12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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[:ensure] = :absent
- end
- def create
- warning("Nova_service provider can only delete compute services because "\
- "of openstackclient limitations.")
- end
- end
|