]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/lib/puppet/provider/keystone_tenant/openstack.rb
Add the posibility to tell openstack to use --os_cacert for keystone_tenant
[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     if not resource[:os_cacert].nil?
62       resource_args = ['project', 'list', nil, nil, '--long', '--os-cacert', resource[:os_cacert]]
63     else
64       resource_args = ['project', 'list', nil, nil, '--long']
65     end
66     list = request(resource_args)
67     list.collect do |project|
68       new(
69         :name        => project[:name],
70         :ensure      => :present,
71         :enabled     => project[:enabled].downcase.chomp == 'true' ? true : false,
72         :description => project[:description],
73         :id          => project[:id]
74       )
75     end
76   end
77
78   def instances
79     if not resource[:os_cacert].nil?
80       resource_args = ['project', 'list', nil, resource[:auth], '--long', '--os-cacert', resource[:os_cacert]]
81     else
82       resource_args = ['project', 'list', nil, resource[:auth], '--long']
83     end
84     instances = request(resource_args)
85     instances.collect do |project|
86       {
87         :name        => project[:name],
88         :enabled     => project[:enabled].downcase.chomp == 'true' ? true : false,
89         :description => project[:description],
90         :id          => project[:id]
91       }
92     end
93   end
94
95   def instance(name)
96     @instance ||= instances.select { |instance| instance[:name] == name }.first || {}
97   end
98
99   def flush
100     options = []
101     if @property_flush
102       (options << '--enable') if @property_flush[:enabled] == :true
103       (options << '--disable') if @property_flush[:enabled] == :false
104       # There is a --description flag for the set command, but it does not work if the value is empty
105       (options << '--property' << "description=#{resource[:description]}") if @property_flush[:description]
106       request('project', 'set', resource[:name], resource[:auth], options) unless options.empty?
107     end
108   end
109
110 end