Files
puppet-keystone/lib/puppet/provider/keystone_domain/openstack.rb
Matthew J Black 6f9d029206 Fixed require statements for puppet 4
This change updates the require statements in the providers
to resolve the issues with the autoloader in puppet. This
issue technically always existed but was masked prior to the
split with puppet server and puppet agent because both used to
share the same loadpath. Documentation on this issue can be
read at https://tickets.puppetlabs.com/browse/PUP-4450.

Change-Id: I5eae546d65832a39dd75ab9c0f97868c7edc9e91
2016-05-16 12:18:23 -04:00

167 lines
4.7 KiB
Ruby

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.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.request('domain', 'set', [resource[:name], '--disable'])
self.class.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 = 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.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(:ini_setting)
.new(conf)
entry
end
def self.default_domain_id=(value)
class_variable_set(:@@default_domain_id, value)
end
end