openstack.rb 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/nova')
  2. Puppet::Type.type(:nova_service).provide(
  3. :openstack,
  4. :parent => Puppet::Provider::Nova
  5. ) do
  6. desc <<-EOT
  7. Provider to manage nova host services
  8. EOT
  9. @credentials = Puppet::Provider::Openstack::CredentialsV3.new
  10. mk_resource_methods
  11. def self.instances
  12. hosts = {}
  13. request('compute service', 'list').collect do |host_svc|
  14. hname = host_svc[:host]
  15. if hosts[hname].nil?
  16. hosts[hname] = Hash.new {|h,k| h[k]=[]}
  17. hosts[hname][:ids] = []
  18. hosts[hname][:service_name] = []
  19. end
  20. hosts[hname][:ids] << host_svc[:id]
  21. hosts[hname][:service_name] << host_svc[:binary]
  22. end
  23. hosts.collect do |hname, host|
  24. new(
  25. :ensure => :present,
  26. :name => hname,
  27. :ids => host[:ids],
  28. :service_name => host[:service_name]
  29. )
  30. end
  31. end
  32. def self.prefetch(resources)
  33. instances_ = self.instances
  34. resources.keys.each do |name|
  35. if provider = instances_.find{ |instance| instance.name == name }
  36. resources[name].provider = provider
  37. end
  38. end
  39. end
  40. def exists?
  41. @property_hash[:ensure] == :present
  42. end
  43. def destroy
  44. return unless @property_hash[:ids].kind_of?(Array)
  45. svcname_id_map = @property_hash[:service_name].zip(@property_hash[:ids]) || {}
  46. svcname_id_map.each do |service_name, id|
  47. if (@resource[:service_name].empty? ||
  48. (@resource[:service_name].include? service_name))
  49. self.class.request('compute service', 'delete', id)
  50. end
  51. end
  52. @property_hash[:ensure] = :absent
  53. end
  54. def create
  55. warning("Nova_service provider can only delete compute services because "\
  56. "of openstackclient limitations.")
  57. end
  58. end