allow modification of resource params and meta
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user