]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/lib/puppet/provider/keystone_domain/openstack.rb
Update to Kilo
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone_domain / openstack.rb
1 require 'puppet/provider/keystone'
2 require 'puppet/util/inifile'
3
4 Puppet::Type.type(:keystone_domain).provide(
5   :openstack,
6   :parent => Puppet::Provider::Keystone
7 ) do
8
9   desc 'Provider that manages keystone domains'
10
11   @credentials = Puppet::Provider::Openstack::CredentialsV3.new
12
13   def initialize(value={})
14     super(value)
15     @property_flush = {}
16   end
17
18   def create
19     properties = [resource[:name]]
20     if resource[:enabled] == :true
21       properties << '--enable'
22     elsif resource[:enabled] == :false
23       properties << '--disable'
24     end
25     if resource[:description]
26       properties << '--description'
27       properties << resource[:description]
28     end
29     @property_hash = self.class.request('domain', 'create', properties)
30     @property_hash[:is_default] = sym_to_bool(resource[:is_default])
31     @property_hash[:ensure] = :present
32     ensure_default_domain(true)
33   end
34
35   def exists?
36     @property_hash[:ensure] == :present
37   end
38
39   def destroy
40     # have to disable first - Keystone does not allow you to delete an
41     # enabled domain
42     self.class.request('domain', 'set', [resource[:name], '--disable'])
43     self.class.request('domain', 'delete', resource[:name])
44     @property_hash[:ensure] == :absent
45     ensure_default_domain(false, true)
46     @property_hash.clear
47   end
48
49   def enabled=(value)
50     @property_flush[:enabled] = value
51   end
52
53   def enabled
54     bool_to_sym(@property_hash[:enabled])
55   end
56
57   def description=(value)
58     @property_flush[:description] = value
59   end
60
61   def description
62     @property_hash[:description]
63   end
64
65   def id
66     @property_hash[:id]
67   end
68
69   def is_default
70     bool_to_sym(@property_hash[:is_default])
71   end
72
73   def is_default=(value)
74     @property_flush[:is_default] = value
75   end
76
77   def ensure_default_domain(create, destroy=false, value=nil)
78     if !self.class.keystone_file
79       return
80     end
81     changed = false
82     curid = self.class.default_domain_id
83     newid = id
84     default = (is_default == :true)
85     if (default && create) || (!default && (value == :true))
86       # new default domain, or making existing domain the default domain
87       if curid != newid
88         self.class.keystone_file['identity']['default_domain_id'] = newid
89         changed = true
90       end
91     elsif (default && destroy) || (default && (value == :false))
92       # removing default domain, or making this domain not the default
93       if curid == newid
94         # can't delete from inifile, so just reset to default 'default'
95         self.class.keystone_file['identity']['default_domain_id'] = 'default'
96         changed = true
97         newid = 'default'
98       end
99     end
100     if changed
101       self.class.keystone_file.store
102       debug("The default_domain_id was changed from #{curid} to #{newid}")
103     end
104   end
105
106   def self.instances
107     request('domain', 'list').collect do |domain|
108       new(
109         :name        => domain[:name],
110         :ensure      => :present,
111         :enabled     => domain[:enabled].downcase.chomp == 'true' ? true : false,
112         :description => domain[:description],
113         :id          => domain[:id],
114         :is_default  => domain[:id] == default_domain_id
115       )
116     end
117   end
118
119   def self.prefetch(resources)
120     domains = instances
121     resources.keys.each do |name|
122       if provider = domains.find{ |domain| domain.name == name }
123         resources[name].provider = provider
124       end
125     end
126   end
127
128   def flush
129     options = []
130     if @property_flush && !@property_flush.empty?
131       options << '--enable' if @property_flush[:enabled] == :true
132       options << '--disable' if @property_flush[:enabled] == :false
133       if @property_flush[:description]
134         options << '--description' << resource[:description]
135       end
136       self.class.request('domain', 'set', [resource[:name]] + options) unless options.empty?
137       if @property_flush[:is_default]
138         ensure_default_domain(false, false, @property_flush[:is_default])
139       end
140       @property_flush.clear
141     end
142   end
143 end