
This change enforces usage of system scope credentials to manage flavors, aggregates, and services, following the new policy rules for SRBAC support in nova. The logic to look up credential for the nova service user from [keystone_authtoken] is left to keep backward compatibility but is deprecated and will be removed. Depends-on: https://review.opendev.org/806474 Depends-on: https://review.opendev.org/828025 Depends-on: https://review.opendev.org/828874 Change-Id: I71779f0f1459d64914589a94a440336386266306
67 lines
1.8 KiB
Ruby
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 = {}
|
|
system_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.system_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
|