]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/lib/puppet/provider/keystone_service/openstack.rb
Update to Kilo
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone_service / openstack.rb
1 require 'puppet/provider/keystone'
2
3 Puppet::Type.type(:keystone_service).provide(
4   :openstack,
5   :parent => Puppet::Provider::Keystone
6 ) do
7
8   desc "Provider to manage keystone services."
9
10   @credentials = Puppet::Provider::Openstack::CredentialsV3.new
11
12   def initialize(value={})
13     super(value)
14     @property_flush = {}
15   end
16
17   def create
18     if resource[:type]
19       properties = [resource[:type]]
20       properties << '--name' << resource[:name]
21       if resource[:description]
22         properties << '--description' << resource[:description]
23       end
24       self.class.request('service', 'create', properties)
25       @property_hash[:ensure] = :present
26     else
27       raise(Puppet::Error, 'The type is mandatory for creating a keystone service')
28     end
29   end
30
31   def destroy
32     self.class.request('service', 'delete', @property_hash[:id])
33     @property_hash.clear
34   end
35
36   def exists?
37     @property_hash[:ensure] == :present
38   end
39
40   def description
41     @property_hash[:description]
42   end
43
44   def description=(value)
45     @property_flush[:description] = value
46   end
47
48   def type
49     @property_hash[:type]
50   end
51
52   def type=(value)
53     @property_flush[:type] = value
54   end
55
56   def id
57     @property_hash[:id]
58   end
59
60   def self.instances
61     list = request('service', 'list', '--long')
62     list.collect do |service|
63       new(
64         :name        => service[:name],
65         :ensure      => :present,
66         :type        => service[:type],
67         :description => service[:description],
68         :id          => service[:id]
69       )
70     end
71   end
72
73   def self.prefetch(resources)
74     services = instances
75     resources.keys.each do |name|
76        if provider = services.find{ |service| service.name == name }
77         resources[name].provider = provider
78       end
79     end
80   end
81
82   def flush
83     options = []
84     if @property_flush && !@property_flush.empty?
85       options << "--description=#{resource[:description]}" if @property_flush[:description]
86       options << "--type=#{resource[:type]}" if @property_flush[:type]
87       self.class.request('service', 'set', [@property_hash[:id]] + options) unless options.empty?
88       @property_flush.clear
89     end
90   end
91 end