]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/lib/puppet/provider/keystone_service/openstack.rb
54e75f5963504e21af9168e99886766894cc9432
[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   def initialize(value={})
11     super(value)
12     @property_flush = {}
13   end
14
15   def create
16     properties = []
17     if resource[:description]
18       properties << '--description'
19       properties << resource[:description]
20     end
21     if resource[:type]
22       properties << '--type'
23       properties << resource[:type]
24     end
25     @instance = request('service', 'create', resource[:name], resource[:auth], properties)
26   end
27
28   def exists?
29     ! instance(resource[:name]).empty?
30   end
31
32   def destroy
33     request('service', 'delete', resource[:name], resource[:auth])
34   end
35
36
37   def description=(value)
38     raise(Puppet::Error, "Updating the service is not currently supported.")
39   end
40
41   def description
42     instance(resource[:name])[:description]
43   end
44
45
46   def type=(value)
47     raise(Puppet::Error, "Updating the service is not currently supported.")
48   end
49
50   def type
51     instance(resource[:name])[:type]
52   end
53
54
55   def id
56     instance(resource[:name])[:id]
57   end
58
59   def self.instances
60     list = request('service', 'list', nil, nil, '--long')
61     list.collect do |service|
62       new(
63         :name        => service[:name],
64         :ensure      => :present,
65         :type        => service[:type],
66         :description => service[:description],
67         :id          => service[:id]
68       )
69     end
70   end
71
72   def instances
73     instances = request('service', 'list', nil, resource[:auth], '--long')
74     instances.collect do |service|
75       {
76         :name        => service[:name],
77         :type        => service[:type],
78         :description => service[:description],
79         :id          => service[:id]
80       }
81     end
82   end
83
84   def instance(name)
85     @instance ||= instances.select { |instance| instance[:name] == name }.first || {}
86   end
87
88   def flush
89     options = []
90     if @property_flush
91       # There is a --description flag for the set command, but it does not work if the value is empty
92       (options << '--property' << "type=#{resource[:type]}") if @property_flush[:type]
93       (options << '--property' << "description=#{resource[:description]}") if @property_flush[:description]
94       request('project', 'set', resource[:name], resource[:auth], options) unless options.empty?
95     end
96   end
97
98 end