From 984a28451476141f8f2db74c61e649309f7cb39b Mon Sep 17 00:00:00 2001 From: Adam Spiers Date: Tue, 21 Jan 2014 13:42:04 +0000 Subject: [PATCH] move providers/helper.rb to libraries/cib_objects.rb and extend --- libraries/cib_objects.rb | 62 ++++++++++++++++++++++++++++++++++++++++ providers/clone.rb | 2 +- providers/colocation.rb | 2 +- providers/helper.rb | 20 ------------- providers/location.rb | 2 +- providers/ms.rb | 2 +- providers/order.rb | 2 +- providers/primitive.rb | 1 - providers/property.rb | 2 +- 9 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 libraries/cib_objects.rb delete mode 100644 providers/helper.rb diff --git a/libraries/cib_objects.rb b/libraries/cib_objects.rb new file mode 100644 index 0000000..b066db0 --- /dev/null +++ b/libraries/cib_objects.rb @@ -0,0 +1,62 @@ +require 'shellwords' + +module Chef::Libraries + module Pacemaker + module CIBObjects + include Chef::Mixin::ShellOut + + def get_cib_object_definition(name) + cmd = Mixlib::ShellOut.new("crm configure show #{name}") + cmd.environment['HOME'] = ENV.fetch('HOME', '/root') + cmd.run_command + begin + cmd.error! + cmd.stdout + rescue + nil + end + end + + def cib_object_exists?(name) + ! get_cib_object_definition(name).nil? + end + + def cib_object_type(obj_definition) + unless obj_definition =~ /\A(\w+)\s/ + raise "Couldn't extract CIB object type from '#{obj_definition}'" + end + return $1 + end + + def pacemaker_resource_running?(name) + cmd = shell_out! "crm", "resource", "status", name + Chef::Log.info cmd.stdout + cmd.stdout.include? "resource #{name} is running" + end + + # CIB object definitions look something like: + # + # primitive keystone ocf:openstack:keystone \ + # params os_username="crowbar" os_password="crowbar" os_tenant_name="openstack" \ + # meta target-role="Started" is-managed="true" \ + # op monitor interval="10s" + # + # This method extracts a Hash from one of the params / meta / op lines. + def extract_hash(name, obj_definition, data_type) + unless obj_definition =~ /^\s+#{data_type} (.+?)(\s*\\)?$/ + raise "Couldn't retrieve #{data_type} for '#{name}' CIB object from [#{obj_definition}]" + end + + h = {} + Shellwords.split($1).each do |kvpair| + unless kvpair =~ /^(.+?)=(.+)$/ + raise "Couldn't understand '#{kvpair}' for #{data_type} section of '#{name}' primitive" + end + h[$1] = $2 + end + h + end + + end + end +end diff --git a/providers/clone.rb b/providers/clone.rb index f4a6c99..a62d4b0 100644 --- a/providers/clone.rb +++ b/providers/clone.rb @@ -17,7 +17,7 @@ # limitations under the License. # -require ::File.join(::File.dirname(__FILE__), 'helper') +require ::File.join(::File.dirname(__FILE__), *%w(.. libraries cib_objects)) action :create do name = new_resource.name diff --git a/providers/colocation.rb b/providers/colocation.rb index b67d835..158a9bf 100644 --- a/providers/colocation.rb +++ b/providers/colocation.rb @@ -17,7 +17,7 @@ # limitations under the License. # -require ::File.join(::File.dirname(__FILE__), 'helper') +require ::File.join(::File.dirname(__FILE__), *%w(.. libraries cib_objects)) action :create do name = new_resource.name diff --git a/providers/helper.rb b/providers/helper.rb deleted file mode 100644 index 929dbf9..0000000 --- a/providers/helper.rb +++ /dev/null @@ -1,20 +0,0 @@ -include Chef::Mixin::ShellOut - -def resource_exists?(name) - cmd = Mixlib::ShellOut.new("crm configure show | grep #{name}") - cmd.environment['HOME'] = ENV.fetch('HOME', '/root') - cmd.run_command - begin - cmd.error! - true - rescue - false - end -end - -def resource_running?(name) - cmd = shell_out! "crm", "resource", "status", name - Chef::Log.info cmd.stdout - cmd.stdout.include? "resource #{name} is running" -end - diff --git a/providers/location.rb b/providers/location.rb index afbfbc3..cf55af9 100644 --- a/providers/location.rb +++ b/providers/location.rb @@ -17,7 +17,7 @@ # limitations under the License. # -require ::File.join(::File.dirname(__FILE__), 'helper') +require ::File.join(::File.dirname(__FILE__), *%w(.. libraries cib_objects)) action :create do name = new_resource.name diff --git a/providers/ms.rb b/providers/ms.rb index 95b6434..625793e 100644 --- a/providers/ms.rb +++ b/providers/ms.rb @@ -17,7 +17,7 @@ # limitations under the License. # -require ::File.join(::File.dirname(__FILE__), 'helper') +require ::File.join(::File.dirname(__FILE__), *%w(.. libraries cib_objects)) action :create do name = new_resource.name diff --git a/providers/order.rb b/providers/order.rb index 405685d..ee7ac31 100644 --- a/providers/order.rb +++ b/providers/order.rb @@ -17,7 +17,7 @@ # limitations under the License. # -require ::File.join(::File.dirname(__FILE__), 'helper') +require ::File.join(::File.dirname(__FILE__), *%w(.. libraries cib_objects)) action :create do name = new_resource.name diff --git a/providers/primitive.rb b/providers/primitive.rb index 091952e..07772a1 100644 --- a/providers/primitive.rb +++ b/providers/primitive.rb @@ -17,7 +17,6 @@ # limitations under the License. # -require ::File.join(::File.dirname(__FILE__), 'helper') # For vagrant env, switch to the following 'require' command. #require "/srv/chef/file_store/cookbooks/pacemaker/providers/helper" diff --git a/providers/property.rb b/providers/property.rb index f07552a..90f15a7 100644 --- a/providers/property.rb +++ b/providers/property.rb @@ -17,7 +17,7 @@ # limitations under the License. # -require ::File.join(::File.dirname(__FILE__), 'helper') +require ::File.join(::File.dirname(__FILE__), *%w(.. libraries cib_objects)) action :create do name = new_resource.name