X-Git-Url: https://git.donarmstrong.com/?p=dsa-puppet.git;a=blobdiff_plain;f=3rdparty%2Fmodules%2Fkeystone%2Flib%2Fpuppet%2Fprovider%2Fkeystone_tenant%2Fopenstack.rb;fp=3rdparty%2Fmodules%2Fkeystone%2Flib%2Fpuppet%2Fprovider%2Fkeystone_tenant%2Fopenstack.rb;h=7d19fcef0a8dcffe74e2f865ce2af1f957c2b755;hp=0000000000000000000000000000000000000000;hb=4631045ebb77ee8622f6fa09277a50c372bcc02e;hpb=3d4dc4fd9e59bd0e07646c99f6b356c7d9d859aa diff --git a/3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb b/3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb new file mode 100644 index 00000000..7d19fcef --- /dev/null +++ b/3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb @@ -0,0 +1,100 @@ +require 'puppet/provider/keystone' + +Puppet::Type.type(:keystone_tenant).provide( + :openstack, + :parent => Puppet::Provider::Keystone +) do + + desc "Provider to manage keystone tenants/projects." + + def initialize(value={}) + super(value) + @property_flush = {} + end + + def create + properties = [] + if resource[:enabled] == :true + properties << '--enable' + elsif resource[:enabled] == :false + properties << '--disable' + end + if resource[:description] + properties << '--description' + properties << resource[:description] + end + @instance = request('project', 'create', resource[:name], resource[:auth], properties) + end + + def exists? + ! instance(resource[:name]).empty? + end + + def destroy + request('project', 'delete', resource[:name], resource[:auth]) + end + + + def enabled=(value) + @property_flush[:enabled] = value + end + + def enabled + bool_to_sym(instance(resource[:name])[:enabled]) + end + + + def description=(value) + @property_flush[:description] = value + end + + def description + instance(resource[:name])[:description] + end + + + def id + instance(resource[:name])[:id] + end + + def self.instances + list = request('project', 'list', nil, nil, '--long') + list.collect do |project| + new( + :name => project[:name], + :ensure => :present, + :enabled => project[:enabled].downcase.chomp == 'true' ? true : false, + :description => project[:description], + :id => project[:id] + ) + end + end + + def instances + instances = request('project', 'list', nil, resource[:auth], '--long') + instances.collect do |project| + { + :name => project[:name], + :enabled => project[:enabled].downcase.chomp == 'true' ? true : false, + :description => project[:description], + :id => project[:id] + } + end + end + + def instance(name) + @instance ||= instances.select { |instance| instance[:name] == name }.first || {} + end + + def flush + options = [] + if @property_flush + (options << '--enable') if @property_flush[:enabled] == :true + (options << '--disable') if @property_flush[:enabled] == :false + # There is a --description flag for the set command, but it does not work if the value is empty + (options << '--property' << "description=#{resource[:description]}") if @property_flush[:description] + request('project', 'set', resource[:name], resource[:auth], options) unless options.empty? + end + end + +end