desc "Provider to manage keystone tenants/projects."
+ @credentials = Puppet::Provider::Openstack::CredentialsV2_0.new
+
def initialize(value={})
super(value)
@property_flush = {}
end
def create
- properties = []
+ properties = [resource[:name]]
if resource[:enabled] == :true
properties << '--enable'
elsif resource[:enabled] == :false
properties << '--description'
properties << resource[:description]
end
- @instance = request('project', 'create', resource[:name], resource[:auth], properties)
+ self.class.request('project', 'create', properties)
+ @property_hash[:ensure] = :present
end
def exists?
- ! instance(resource[:name]).empty?
+ @property_hash[:ensure] == :present
end
def destroy
- request('project', 'delete', resource[:name], resource[:auth])
+ self.class.request('project', 'delete', @property_hash[:id])
+ @property_hash.clear
end
-
def enabled=(value)
@property_flush[:enabled] = value
end
def enabled
- bool_to_sym(instance(resource[:name])[:enabled])
+ bool_to_sym(@property_hash[:enabled])
end
-
def description=(value)
@property_flush[:description] = value
end
def description
- instance(resource[:name])[:description]
+ @property_hash[:description]
end
-
def id
- instance(resource[:name])[:id]
+ @property_hash[:id]
end
def self.instances
- list = request('project', 'list', nil, nil, '--long')
+ list = request('project', 'list', '--long')
list.collect do |project|
new(
:name => project[:name],
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]
- }
+ def self.prefetch(resources)
+ tenants = instances
+ resources.keys.each do |name|
+ if provider = tenants.find{ |tenant| tenant.name == name }
+ resources[name].provider = provider
+ end
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?
+ 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]
+ options << @property_hash[:id]
+ self.class.request('project', 'set', options) unless options.empty?
+ @property_flush.clear
end
end