Files
puppet-nova/lib/puppet/provider/nova_service/openstack.rb
Takashi Kajinami 60acc82c22 Fix missing update of property_hash
When a resource is created, the :ensure parameter should be set to
'present' so that exists returns true. In addition, the whole hash
should be cleared when a resource is deleted, otherwise subsequent
access might look up stale values. This change ensures property_hash is
updated in create/destroy accordingly.

This change also fixes the incorrect handling of "project" property
in nova_flavor which is causing unexpected update.

Finally, the ignored unit tests are fixed, to test the above fixes.

Change-Id: I611e3d0428674e7438fe15b276667f7b379d136e
2022-02-12 23:19:38 +09:00

67 lines
1.8 KiB
Ruby

require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/nova')
Puppet::Type.type(:nova_service).provide(
:openstack,
:parent => Puppet::Provider::Nova
) do
desc <<-EOT
Provider to manage nova host services
EOT
@credentials = Puppet::Provider::Openstack::CredentialsV3.new
mk_resource_methods
def self.instances
hosts = {}
request('compute service', 'list').collect do |host_svc|
hname = host_svc[:host]
if hosts[hname].nil?
hosts[hname] = Hash.new {|h,k| h[k]=[]}
hosts[hname][:ids] = []
hosts[hname][:service_name] = []
end
hosts[hname][:ids] << host_svc[:id]
hosts[hname][:service_name] << host_svc[:binary]
end
hosts.collect do |hname, host|
new(
:ensure => :present,
:name => hname,
:ids => host[:ids],
:service_name => host[:service_name]
)
end
end
def self.prefetch(resources)
instances_ = self.instances
resources.keys.each do |name|
if provider = instances_.find{ |instance| instance.name == name }
resources[name].provider = provider
end
end
end
def exists?
@property_hash[:ensure] == :present
end
def destroy
return unless @property_hash[:ids].kind_of?(Array)
svcname_id_map = @property_hash[:service_name].zip(@property_hash[:ids]) || {}
svcname_id_map.each do |service_name, id|
if (@resource[:service_name].empty? ||
(@resource[:service_name].include? service_name))
self.class.request('compute service', 'delete', id)
end
end
@property_hash.clear
end
def create
warning("Nova_service provider can only delete compute services because "\
"of openstackclient limitations.")
end
end