extract some of load_current_resource for reuse
This commit is contained in:
@@ -23,6 +23,7 @@ group :rspec do
|
|||||||
watch(%r{^libraries/(.+)\.rb$}) { |m|
|
watch(%r{^libraries/(.+)\.rb$}) { |m|
|
||||||
"spec/libraries/#{m[1]}_spec.rb"
|
"spec/libraries/#{m[1]}_spec.rb"
|
||||||
}
|
}
|
||||||
|
watch(%r{^providers/common\.rb$}) { all_specs }
|
||||||
watch(%r{^(resources|providers)/(.+)\.rb$}) { |m|
|
watch(%r{^(resources|providers)/(.+)\.rb$}) { |m|
|
||||||
"spec/providers/#{m[1]}_spec.rb"
|
"spec/providers/#{m[1]}_spec.rb"
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,11 @@ module Pacemaker
|
|||||||
class Resource < Pacemaker::CIBObject
|
class Resource < Pacemaker::CIBObject
|
||||||
include Chef::Mixin::ShellOut
|
include Chef::Mixin::ShellOut
|
||||||
|
|
||||||
|
def self.description
|
||||||
|
type = self.to_s.split('::').last
|
||||||
|
"#{type} resource"
|
||||||
|
end
|
||||||
|
|
||||||
def running?
|
def running?
|
||||||
cmd = shell_out! "crm", "resource", "status", name
|
cmd = shell_out! "crm", "resource", "status", name
|
||||||
Chef::Log.info cmd.stdout
|
Chef::Log.info cmd.stdout
|
||||||
|
36
providers/common.rb
Normal file
36
providers/common.rb
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
require 'chef/application'
|
||||||
|
require ::File.join(::File.dirname(__FILE__),
|
||||||
|
*%w(.. libraries pacemaker cib_object))
|
||||||
|
|
||||||
|
class Chef
|
||||||
|
module Mixin::PacemakerCommon
|
||||||
|
# Instantiate @current_resource and read details about the existing
|
||||||
|
# primitive (if any) via "crm configure show" into it, so that we
|
||||||
|
# can compare it against the resource requested by the recipe, and
|
||||||
|
# create / delete / modify as necessary.
|
||||||
|
#
|
||||||
|
# http://docs.opscode.com/lwrp_custom_provider_ruby.html#load-current-resource
|
||||||
|
def load_current_resource
|
||||||
|
name = @new_resource.name
|
||||||
|
|
||||||
|
cib_object = Pacemaker::CIBObject.from_name(name)
|
||||||
|
unless cib_object
|
||||||
|
::Chef::Log.debug "CIB object definition nil or empty"
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
unless cib_object.is_a? cib_object_class
|
||||||
|
expected_type = cib_object_class.description
|
||||||
|
::Chef::Log.warn "CIB object '#{name}' was a #{cib_object.type} not a #{expected_type}"
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
::Chef::Log.debug "CIB object definition #{cib_object.definition}"
|
||||||
|
@current_resource_definition = cib_object.definition
|
||||||
|
cib_object.parse_definition
|
||||||
|
|
||||||
|
@current_cib_object = cib_object
|
||||||
|
init_current_resource
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@@ -18,6 +18,9 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
require ::File.join(::File.dirname(__FILE__), *%w(.. libraries pacemaker))
|
require ::File.join(::File.dirname(__FILE__), *%w(.. libraries pacemaker))
|
||||||
|
require ::File.join(::File.dirname(__FILE__), 'common')
|
||||||
|
|
||||||
|
include Chef::Mixin::PacemakerCommon
|
||||||
|
|
||||||
# For vagrant env, switch to the following 'require' command.
|
# For vagrant env, switch to the following 'require' command.
|
||||||
#require "/srv/chef/file_store/cookbooks/pacemaker/providers/helper"
|
#require "/srv/chef/file_store/cookbooks/pacemaker/providers/helper"
|
||||||
@@ -80,36 +83,17 @@ action :stop do
|
|||||||
Chef::Log.info "Successfully stopped primitive '#{name}'."
|
Chef::Log.info "Successfully stopped primitive '#{name}'."
|
||||||
end
|
end
|
||||||
|
|
||||||
# Instantiate @current_resource and read details about the existing
|
def cib_object_class
|
||||||
# primitive (if any) via "crm configure show" into it, so that we
|
Pacemaker::Resource::Primitive
|
||||||
# can compare it against the resource requested by the recipe, and
|
end
|
||||||
# create / delete / modify as necessary.
|
|
||||||
|
|
||||||
# http://docs.opscode.com/lwrp_custom_provider_ruby.html#load-current-resource
|
def init_current_resource
|
||||||
def load_current_resource
|
|
||||||
name = @new_resource.name
|
name = @new_resource.name
|
||||||
|
|
||||||
primitive = Pacemaker::CIBObject.from_name(name)
|
|
||||||
unless primitive
|
|
||||||
Chef::Log.debug "CIB object definition nil or empty"
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
unless primitive.is_a? Pacemaker::Resource::Primitive
|
|
||||||
Chef::Log.warn "CIB object '#{name}' was a #{primitive.type} not a resource primitive"
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
Chef::Log.debug "CIB object definition #{primitive.definition}"
|
|
||||||
@current_resource_definition = primitive.definition
|
|
||||||
primitive.parse_definition
|
|
||||||
|
|
||||||
@current_primitive = primitive
|
|
||||||
@current_resource = Chef::Resource::PacemakerPrimitive.new(name)
|
@current_resource = Chef::Resource::PacemakerPrimitive.new(name)
|
||||||
@current_resource.agent(primitive.agent)
|
@current_resource.agent(@current_cib_object.agent)
|
||||||
%w(params meta).each do |data_type|
|
%w(params meta).each do |data_type|
|
||||||
method = data_type.to_sym
|
method = data_type.to_sym
|
||||||
value = primitive.send(method)
|
value = @current_cib_object.send(method)
|
||||||
@current_resource.send(method, value)
|
@current_resource.send(method, value)
|
||||||
Chef::Log.debug "detected #{name} has #{data_type} #{value}"
|
Chef::Log.debug "detected #{name} has #{data_type} #{value}"
|
||||||
end
|
end
|
||||||
@@ -139,8 +123,8 @@ def maybe_modify_resource(name)
|
|||||||
cmds = []
|
cmds = []
|
||||||
|
|
||||||
desired_primitive = Pacemaker::Resource::Primitive.from_chef_resource(new_resource)
|
desired_primitive = Pacemaker::Resource::Primitive.from_chef_resource(new_resource)
|
||||||
if desired_primitive.op_string != @current_primitive.op_string
|
if desired_primitive.op_string != @current_cib_object.op_string
|
||||||
Chef::Log.debug "op changed from [#{@current_primitive.op_string}] to [#{desired_primitive.op_string}]"
|
Chef::Log.debug "op changed from [#{@current_cib_object.op_string}] to [#{desired_primitive.op_string}]"
|
||||||
to_echo = desired_primitive.definition_string.chomp
|
to_echo = desired_primitive.definition_string.chomp
|
||||||
to_echo.gsub!('\\') { '\\\\' }
|
to_echo.gsub!('\\') { '\\\\' }
|
||||||
to_echo.gsub!("'", "\\'")
|
to_echo.gsub!("'", "\\'")
|
||||||
|
Reference in New Issue
Block a user