]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb
7d19fcef0a8dcffe74e2f865ce2af1f957c2b755
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone_tenant / openstack.rb
1 require 'puppet/provider/keystone'
2
3 Puppet::Type.type(:keystone_tenant).provide(
4   :openstack,
5   :parent => Puppet::Provider::Keystone
6 ) do
7
8   desc "Provider to manage keystone tenants/projects."
9
10   def initialize(value={})
11     super(value)
12     @property_flush = {}
13   end
14
15   def create
16     properties = []
17     if resource[:enabled] == :true
18       properties << '--enable'
19     elsif resource[:enabled] == :false
20       properties << '--disable'
21     end
22     if resource[:description]
23       properties << '--description'
24       properties << resource[:description]
25     end
26     @instance = request('project', 'create', resource[:name], resource[:auth], properties)
27   end
28
29   def exists?
30     ! instance(resource[:name]).empty?
31   end
32
33   def destroy
34     request('project', 'delete', resource[:name], resource[:auth])
35   end
36
37
38   def enabled=(value)
39     @property_flush[:enabled] = value
40   end
41
42   def enabled
43     bool_to_sym(instance(resource[:name])[:enabled])
44   end
45
46
47   def description=(value)
48     @property_flush[:description] = value
49   end
50
51   def description
52     instance(resource[:name])[:description]
53   end
54
55
56   def id
57     instance(resource[:name])[:id]
58   end
59
60   def self.instances
61     list = request('project', 'list', nil, nil, '--long')
62     list.collect do |project|
63       new(
64         :name        => project[:name],
65         :ensure      => :present,
66         :enabled     => project[:enabled].downcase.chomp == 'true' ? true : false,
67         :description => project[:description],
68         :id          => project[:id]
69       )
70     end
71   end
72
73   def instances
74     instances = request('project', 'list', nil, resource[:auth], '--long')
75     instances.collect do |project|
76       {
77         :name        => project[:name],
78         :enabled     => project[:enabled].downcase.chomp == 'true' ? true : false,
79         :description => project[:description],
80         :id          => project[:id]
81       }
82     end
83   end
84
85   def instance(name)
86     @instance ||= instances.select { |instance| instance[:name] == name }.first || {}
87   end
88
89   def flush
90     options = []
91     if @property_flush
92       (options << '--enable') if @property_flush[:enabled] == :true
93       (options << '--disable') if @property_flush[:enabled] == :false
94       # There is a --description flag for the set command, but it does not work if the value is empty
95       (options << '--property' << "description=#{resource[:description]}") if @property_flush[:description]
96       request('project', 'set', resource[:name], resource[:auth], options) unless options.empty?
97     end
98   end
99
100 end