diff --git a/lib/puppet/provider/nova.rb b/lib/puppet/provider/nova.rb index 134df89cf..6484cc05b 100644 --- a/lib/puppet/provider/nova.rb +++ b/lib/puppet/provider/nova.rb @@ -38,6 +38,20 @@ class Puppet::Provider::Nova < Puppet::Provider::Openstack Puppet::Provider::Openstack.request(service, action, properties, @credentials) end + def self.nova_manage_request(*args) + # Not using the nova-manage command directly, + # so we can disable combining of stderr/stdout output. + Puppet::Util::Execution.execute("#{Puppet::Util.which('nova-manage')} #{args.join(' ')}", { + :failonfail => true, + :combine => false, + :custom_environment => {} + }) + end + + def nova_manage_request(*args) + self.class.nova_manage_request(args) + end + def self.conf_filename '/etc/nova/nova.conf' end diff --git a/lib/puppet/provider/nova_cell_v2/nova_manage.rb b/lib/puppet/provider/nova_cell_v2/nova_manage.rb index dbeecf7d2..56168036d 100644 --- a/lib/puppet/provider/nova_cell_v2/nova_manage.rb +++ b/lib/puppet/provider/nova_cell_v2/nova_manage.rb @@ -8,8 +8,6 @@ Puppet::Type.type(:nova_cell_v2).provide( desc "Manage nova cellv2 cells" - optional_commands :nova_manage => 'nova-manage' - mk_resource_methods def initialize(value={}) @@ -18,7 +16,7 @@ Puppet::Type.type(:nova_cell_v2).provide( end def self.instances - cells_list = nova_manage("cell_v2", "list_cells", "--verbose") + cells_list = nova_manage_request("cell_v2", "list_cells", "--verbose") cells_list.split("\n")[3..-2].collect do |cell| $name, $uuid, $transport_url, $database_connection = cell.split('|')[1..-1].map{ |x| x.strip} @@ -93,7 +91,7 @@ Puppet::Type.type(:nova_cell_v2).provide( optional_opts.push(opt).push(resource[param]) end end - cell_uuid = nova_manage('cell_v2', 'create_cell', + cell_uuid = nova_manage_request('cell_v2', 'create_cell', optional_opts, "--verbose" ) @property_hash = { @@ -119,7 +117,7 @@ Puppet::Type.type(:nova_cell_v2).provide( def flush @property_hash.update(@property_flush) if @property_flush[:ensure] == :absent - nova_manage("cell_v2", "delete_cell", "--cell_uuid", @property_hash[:uuid]) + nova_manage_request("cell_v2", "delete_cell", "--cell_uuid", @property_hash[:uuid]) elsif @property_flush[:transport_url] or @property_flush[:database_connection] opts = [] if not @property_flush[:transport_url] @@ -140,8 +138,8 @@ Puppet::Type.type(:nova_cell_v2).provide( end opts.push('--database_connection').push(@property_flush[:database_connection]) - nova_manage("cell_v2", "update_cell", "--cell_uuid", @property_hash[:uuid], opts) + nova_manage_request("cell_v2", "update_cell", "--cell_uuid", @property_hash[:uuid], opts) end @property_flush = {} end -end \ No newline at end of file +end diff --git a/lib/puppet/provider/nova_cells/nova_manage.rb b/lib/puppet/provider/nova_cells/nova_manage.rb index 76faf05a9..1ed085722 100644 --- a/lib/puppet/provider/nova_cells/nova_manage.rb +++ b/lib/puppet/provider/nova_cells/nova_manage.rb @@ -20,15 +20,18 @@ # nova_cells provider # -Puppet::Type.type(:nova_cells).provide(:nova_manage) do +require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/nova') + +Puppet::Type.type(:nova_cells).provide( + :nova_manage, + :parent => Puppet::Provider::Nova +) do desc "Manage nova cells" - optional_commands :nova_manage => 'nova-manage' - def self.instances begin - cells_list = nova_manage("cell", "list") + cells_list = nova_manage_request("cell", "list") rescue Exception => e if e.message =~ /No cells defined/ return [] @@ -63,14 +66,14 @@ Puppet::Type.type(:nova_cells).provide(:nova_manage) do end end - nova_manage('cell', 'create', + nova_manage_request('cell', 'create', optional_opts ) end def exists? begin - cells_list = nova_manage("cell", "list") + cells_list = nova_manage_request("cell", "list") return cells_list.split("\n")[1..-1].detect do |n| n =~ /^(\S+)\s+(#{resource[:cells].split('/').first})/ end @@ -81,7 +84,7 @@ Puppet::Type.type(:nova_cells).provide(:nova_manage) do def destroy - nova_manage("cell", "delete", resource[:name]) + nova_manage_request("cell", "delete", resource[:name]) end end