From 8c6a26da742f29ff2773f4173f49c9f2edc4687b Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Thu, 23 Jan 2014 16:09:09 +0000 Subject: [PATCH] allow modification of resource params and meta --- providers/primitive.rb | 43 +++++++++++++++++++++----------- spec/providers/primitive_spec.rb | 10 +++++--- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/providers/primitive.rb b/providers/primitive.rb index 086a1dc..081bf9a 100644 --- a/providers/primitive.rb +++ b/providers/primitive.rb @@ -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 diff --git a/spec/providers/primitive_spec.rb b/spec/providers/primitive_spec.rb index 7b76d32..ecb6557 100644 --- a/spec/providers/primitive_spec.rb +++ b/spec/providers/primitive_spec.rb @@ -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