1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/keystone')
require 'puppet/util/inifile'
Puppet::Type.type(:keystone_domain).provide(
:openstack,
:parent => Puppet::Provider::Keystone
) do
desc 'Provider that manages keystone domains'
@credentials = Puppet::Provider::Openstack::CredentialsV3.new
def initialize(value={})
super(value)
@property_flush = {}
end
def self.do_not_manage
@do_not_manage
end
def self.do_not_manage=(value)
@do_not_manage = value
end
def create
if self.class.do_not_manage
fail("Not managing Keystone_domain[#{@resource[:name]}] due to earlier Keystone API failures.")
end
properties = [resource[:name]]
if resource[:enabled] == :true
properties << '--enable'
elsif resource[:enabled] == :false
properties << '--disable'
end
if resource[:description]
properties << '--description'
properties << resource[:description]
end
@property_hash = self.class.system_request('domain', 'create', properties)
@property_hash[:is_default] = sym_to_bool(resource[:is_default])
@property_hash[:ensure] = :present
ensure_default_domain(true)
end
def exists?
@property_hash[:ensure] == :present
end
def destroy
if self.class.do_not_manage
fail("Not managing Keystone_domain[#{@resource[:name]}] due to earlier Keystone API failures.")
end
# have to disable first - Keystone does not allow you to delete an
# enabled domain
self.class.system_request('domain', 'set', [resource[:name], '--disable'])
self.class.system_request('domain', 'delete', resource[:name])
@property_hash[:ensure] = :absent
ensure_default_domain(false, true)
@property_hash.clear
end
mk_resource_methods
def enabled=(value)
@property_flush[:enabled] = value
end
def enabled
bool_to_sym(@property_hash[:enabled])
end
def description=(value)
if self.class.do_not_manage
fail("Not managing Keystone_domain[#{@resource[:name]}] due to earlier Keystone API failures.")
end
@property_flush[:description] = value
end
def is_default
bool_to_sym(@property_hash[:is_default])
end
def is_default=(value)
if self.class.do_not_manage
fail("Not managing Keystone_domain[#{@resource[:name]}] due to earlier Keystone API failures.")
end
@property_flush[:is_default] = value
end
def ensure_default_domain(create, destroy=false, value=nil)
if self.class.do_not_manage
fail("Not managing Keystone_domain[#{@resource[:name]}] due to earlier Keystone API failures.")
end
curid = self.class.default_domain_id
default = (is_default == :true)
entry = keystone_conf_default_domain_id_entry(id)
if (default && create) || (!default && (value == :true))
# new default domain, or making existing domain the default domain
if curid != id
entry.create
end
elsif (default && destroy) || (default && (value == :false))
# removing default domain, or making this domain not the default
if curid == id
entry.destroy
end
end
self.class.default_domain_id = id
end
def self.instances
self.do_not_manage = true
list = system_request('domain', 'list').collect do |domain|
new(
:name => domain[:name],
:ensure => :present,
:enabled => domain[:enabled].downcase.chomp == 'true' ? true : false,
:description => domain[:description],
:id => domain[:id],
:is_default => domain[:id] == default_domain_id
)
end
self.do_not_manage = false
list
end
def self.prefetch(resources)
domains = instances
resources.keys.each do |name|
if provider = domains.find { |domain| domain.name == name }
resources[name].provider = provider
end
end
end
def flush
options = []
if @property_flush && !@property_flush.empty?
options << '--enable' if @property_flush[:enabled] == :true
options << '--disable' if @property_flush[:enabled] == :false
if @property_flush[:description]
options << '--description' << resource[:description]
end
self.class.system_request('domain', 'set', [resource[:name]] + options) unless options.empty?
if @property_flush[:is_default]
ensure_default_domain(false, false, @property_flush[:is_default])
end
@property_flush.clear
end
end
private
def keystone_conf_default_domain_id_entry(newid)
conf = Puppet::Type::Keystone_config
.new(:title => 'identity/default_domain_id', :value => newid)
entry = Puppet::Type.type(:keystone_config).provider(:openstackconfig)
.new(conf)
entry
end
def self.default_domain_id=(value)
class_variable_set(:@@default_domain_id, value)
end
end
|