allow modification of resource params and meta

This commit is contained in:
Adam Spiers
2014-01-23 16:09:09 +00:00
parent 67d34f6f83
commit 8c6a26da74
2 changed files with 36 additions and 17 deletions

View File

@@ -120,24 +120,39 @@ def create_resource(name)
end
def modify_resource(name)
configure_cmd_prefix = "crm_resource --resource keystone"
cmds = []
new_resource.params.each do |k, v|
if @current_resource.params[k] == v
Chef::Log.debug("#{name}'s #{k} param didn't change")
else
Chef::Log.info("#{name}'s #{k} param changed to #{v}")
cmds << configure_cmd_prefix + " --set-parameter #{k} --parameter-value #{v}"
end
end
modify_params(name, cmds, :params)
modify_params(name, cmds, :meta)
cmds.each do |cmd|
converge_by("execute #{cmd}") do
result = shell_out!(cmd)
Chef::Log.info("#{cmd} ran successfully")
end
execute cmd do
action :nothing
end.run_action(:run)
end
new_resource.updated_by_last_action(true) unless cmds.empty?
end
def modify_params(name, cmds, data_type)
configure_cmd_prefix = "crm_resource --resource #{name}"
new_resource.send(data_type).each do |k, v|
if @current_resource.send(data_type)[k] == v
Chef::Log.debug("#{name}'s #{k} #{data_type} didn't change")
else
Chef::Log.info("#{name}'s #{k} #{data_type} changed to #{v}")
cmd = configure_cmd_prefix + %' --set-parameter "#{k}" --parameter-value "#{v}"'
cmd += " --meta" if data_type == :meta
cmds << cmd
end
end
@current_resource.send(data_type).each do |k, v|
unless new_resource.send(data_type).has_key? k
Chef::Log.info("#{name}'s #{k} #{data_type} was removed")
cmd = configure_cmd_prefix + %' --delete-parameter "#{k}"'
cmd += " --meta" if data_type == :meta
cmds << cmd
end
end
end

View File

@@ -26,6 +26,10 @@ describe "Chef::Provider::PacemakerPrimitive" do
it "should modify the primitive if it already exists" do
provider = Chef::Provider::PacemakerPrimitive.new(@resource, @run_context)
new_params = Hash[ra[:params]].merge("os_password" => "newpasswd")
new_params.delete("os_tenant_name")
@resource.params new_params
@resource.meta Hash[ra[:meta]].merge("target-role" => "Stopped")
# get_cib_object_definition is invoked by load_current_resource
# and later used to see whether to create or modify.
@@ -33,9 +37,9 @@ describe "Chef::Provider::PacemakerPrimitive" do
configure_cmd_prefix = "crm_resource --resource keystone"
expected_configure_cmd_args = [
"--set-parameter os_password --parameter-value newpasswd",
"--delete-parameter os_tenant_name",
"--set-parameter target-role --parameter-value Stopped --meta",
%'--set-parameter "os_password" --parameter-value "newpasswd"',
%'--delete-parameter "os_tenant_name"',
%'--set-parameter "target-role" --parameter-value "Stopped" --meta',
]
provider.run_action :create