From e96a3018fb429767cd2d1a657214207b574e1cb6 Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Fri, 31 Jan 2014 21:52:04 +0000 Subject: [PATCH] support modification of primitive op values --- providers/primitive.rb | 20 +++++++++++++++----- spec/providers/primitive_spec.rb | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/providers/primitive.rb b/providers/primitive.rb index 4602b65..e7279b6 100644 --- a/providers/primitive.rb +++ b/providers/primitive.rb @@ -34,7 +34,7 @@ action :create do [ name, @current_resource.agent, new_resource.agent ] end - modify_resource(name) + maybe_modify_resource(name) end end @@ -133,12 +133,22 @@ def create_resource(name) end end -def modify_resource(name) +def maybe_modify_resource(name) Chef::Log.info "Checking existing resource primitive #{name} for modifications" cmds = [] - modify_params(name, cmds, :params) - modify_params(name, cmds, :meta) + + desired_primitive = Pacemaker::Resource::Primitive.from_chef_resource(new_resource) + if desired_primitive.op_string != @current_primitive.op_string + Chef::Log.debug "op changed from [#{@current_primitive.op_string}] to [#{desired_primitive.op_string}]" + to_echo = desired_primitive.definition_string.chomp + to_echo.gsub!('\\') { '\\\\' } + to_echo.gsub!("'", "\\'") + cmds = ["echo '#{to_echo}' | crm configure load update -"] + else + maybe_configure_params(name, cmds, :params) + maybe_configure_params(name, cmds, :meta) + end cmds.each do |cmd| execute cmd do @@ -149,7 +159,7 @@ def modify_resource(name) new_resource.updated_by_last_action(true) unless cmds.empty? end -def modify_params(name, cmds, data_type) +def maybe_configure_params(name, cmds, data_type) configure_cmd_prefix = "crm_resource --resource #{name}" new_resource.send(data_type).each do |param, new_value| diff --git a/spec/providers/primitive_spec.rb b/spec/providers/primitive_spec.rb index c1d4677..796b1ff 100644 --- a/spec/providers/primitive_spec.rb +++ b/spec/providers/primitive_spec.rb @@ -100,6 +100,21 @@ describe "Chef::Provider::PacemakerPrimitive" do end end + it "should modify the primitive if it has different op values" do + echo_string = rsc.definition_string.chomp + echo_string.gsub!('\\') { '\\\\' }.gsub!('60', '120') + expected_configure_cmd_args = [ + "echo '#{echo_string}' | crm configure load update -" + ] + test_modify(expected_configure_cmd_args) do + new_op = Hash[rsc.op] + # Ensure we're not modifying our expectation as well as the input + new_op['monitor'] = new_op['monitor'].dup + new_op['monitor']['timeout'] = '120' + @resource.op new_op + end + end + it "should create a primitive if it doesn't already exist" do expect_definition("") # Later, the :create action calls Pacemaker::Resource::Primitive#exists? to check