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
|
require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/keystone')
Puppet::Type.type(:keystone_tenant).provide(
:openstack,
:parent => Puppet::Provider::Keystone
) do
desc "Provider to manage keystone tenants/projects."
@credentials = Puppet::Provider::Openstack::CredentialsV3.new
include PuppetX::Keystone::CompositeNamevar::Helpers
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_tenant[#{@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' << resource[:description]
end
properties << '--domain' << resource[:domain]
@property_hash = self.class.system_request('project', 'create', properties)
@property_hash[:name] = resource[:name]
@property_hash[:domain] = resource[:domain]
@property_hash[:ensure] = :present
rescue Puppet::ExecutionFailure => e
if e.message =~ /No domain with a name or ID of/
raise(Puppet::Error, "No project #{resource[:name]} with domain #{resource[:domain]} found")
else
raise
end
end
mk_resource_methods
def exists?
@property_hash[:ensure] == :present
end
def destroy
if self.class.do_not_manage
fail("Not managing Keystone_tenant[#{@resource[:name]}] due to earlier Keystone API failures.")
end
self.class.system_request('project', 'delete', id)
@property_hash.clear
end
def enabled=(value)
if self.class.do_not_manage
fail("Not managing Keystone_tenant[#{@resource[:name]}] due to earlier Keystone API failures.")
end
@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_tenant[#{@resource[:name]}] due to earlier Keystone API failures.")
end
@property_flush[:description] = value
end
def self.instances
if default_domain_changed
warning(default_domain_deprecation_message)
end
self.do_not_manage = true
projects = system_request('project', 'list', '--long')
list = projects.collect do |project|
domain_name = domain_name_from_id(project[:domain_id])
new(
:name => resource_to_name(domain_name, project[:name]),
:ensure => :present,
:enabled => project[:enabled].downcase.chomp == 'true' ? true : false,
:description => project[:description],
:domain => domain_name,
:domain_id => project[:domain_id],
:id => project[:id]
)
end
self.do_not_manage = false
list
end
def self.prefetch(resources)
prefetch_composite(resources) do |sorted_namevars|
domain = sorted_namevars[0]
name = sorted_namevars[1]
resource_to_name(domain, name)
end
end
def flush
options = []
if @property_flush && !@property_flush.empty?
case @property_flush[:enabled]
when :true
options << '--enable'
when :false
options << '--disable'
end
(options << "--description=#{resource[:description]}") if @property_flush[:description]
self.class.system_request('project', 'set', [id] + options) unless options.empty?
@property_flush.clear
end
end
end
|