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
|
require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/cinder')
Puppet::Type.type(:cinder_qos).provide(
:openstack,
:parent => Puppet::Provider::Cinder
) do
desc 'Provider for cinder QOS.'
@credentials = Puppet::Provider::Openstack::CredentialsV3.new
mk_resource_methods
def create
properties = []
properties << '--consumer' << resource[:consumer].to_s
if resource[:properties]
resource[:properties].each do |k, v|
properties << '--property' << "#{k}=#{v}"
end
end
properties << name
self.class.request('volume qos', 'create', properties)
@property_hash[:ensure] = :present
@property_hash[:properties] = resource[:properties]
@property_hash[:consumer] = resource[:consumer]
@property_hash[:name] = name
resource[:associations].each do |item|
self.class.request('volume qos', 'associate', [name, item])
end
@property_hash[:associations] = resource[:associations]
end
def destroy
self.class.request('volume qos', 'delete', name)
@property_hash.clear
end
def exists?
@property_hash[:ensure] == :present
end
def properties=(value)
added = []
@property_hash[:properties].each do |k, v|
if value[k] != v
added << '--property' << "#{k}=#{value[k]}"
end
end
unless added.empty?
self.class.request('volume type', 'set', [properties, added])
@property_hash[:properties] = value
end
end
def associations=(value)
added = value - @property_hash[:associations]
removed = @property_hash[:associations] - value
added.each do |item|
self.class.request('volume qos', 'associate', [name, item])
end
removed.each do |item|
self.class.request('volume qos', 'disassociate', [name, item])
end
@property_hash[:associations] = value
end
def self.instances
list = request('volume qos', 'list')
list.collect do |qos|
properties = qos[:properties]
new({
:name => qos[:name],
:ensure => :present,
:id => qos[:id],
:properties => parse_python_dict(properties),
:consumer => qos[:consumer].downcase,
:associations => string2array(qos[:associations])
})
end
end
def self.prefetch(resources)
qoss = instances
resources.keys.each do |name|
if provider = qoss.find{ |qos| qos.name == name }
resources[name].provider = provider
end
end
end
def self.string2array(input)
return input[1..-2].delete("'").split(/,\s/)
end
end
|