1 require 'puppet/provider/keystone'
2 require 'puppet/util/inifile'
4 Puppet::Type.type(:keystone_domain).provide(
6 :parent => Puppet::Provider::Keystone
9 desc 'Provider that manages keystone domains'
11 @credentials = Puppet::Provider::Openstack::CredentialsV3.new
13 def initialize(value={})
19 properties = [resource[:name]]
20 if resource[:enabled] == :true
21 properties << '--enable'
22 elsif resource[:enabled] == :false
23 properties << '--disable'
25 if resource[:description]
26 properties << '--description'
27 properties << resource[:description]
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)
36 @property_hash[:ensure] == :present
40 # have to disable first - Keystone does not allow you to delete an
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)
50 @property_flush[:enabled] = value
54 bool_to_sym(@property_hash[:enabled])
57 def description=(value)
58 @property_flush[:description] = value
62 @property_hash[:description]
70 bool_to_sym(@property_hash[:is_default])
73 def is_default=(value)
74 @property_flush[:is_default] = value
77 def ensure_default_domain(create, destroy=false, value=nil)
78 if !self.class.keystone_file
82 curid = self.class.default_domain_id
84 default = (is_default == :true)
85 if (default && create) || (!default && (value == :true))
86 # new default domain, or making existing domain the default domain
88 self.class.keystone_file['identity']['default_domain_id'] = newid
91 elsif (default && destroy) || (default && (value == :false))
92 # removing default domain, or making this domain not the default
94 # can't delete from inifile, so just reset to default 'default'
95 self.class.keystone_file['identity']['default_domain_id'] = 'default'
101 self.class.keystone_file.store
102 debug("The default_domain_id was changed from #{curid} to #{newid}")
107 request('domain', 'list').collect do |domain|
109 :name => domain[:name],
111 :enabled => domain[:enabled].downcase.chomp == 'true' ? true : false,
112 :description => domain[:description],
114 :is_default => domain[:id] == default_domain_id
119 def self.prefetch(resources)
121 resources.keys.each do |name|
122 if provider = domains.find{ |domain| domain.name == name }
123 resources[name].provider = provider
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]
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])
140 @property_flush.clear