File: openstack.rb

package info (click to toggle)
puppet-module-cinder 27.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,512 kB
  • sloc: ruby: 6,697; python: 33; sh: 10; makefile: 10
file content (95 lines) | stat: -rw-r--r-- 2,586 bytes parent folder | download
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