]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/lib/puppet/provider/keystone_endpoint/openstack.rb
ac7780d483f56f2dbd0da66b73b0f2c4a1c8748d
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone_endpoint / openstack.rb
1 require 'puppet/provider/keystone'
2
3 Puppet::Type.type(:keystone_endpoint).provide(
4   :openstack,
5   :parent => Puppet::Provider::Keystone
6 ) do
7
8   desc "Provider to manage keystone endpoints."
9
10   def initialize(value={})
11     super(value)
12     @property_flush = {}
13   end
14
15   def create
16     properties = []
17     # The region property is just ignored. We should fix this in kilo.
18     region, name = resource[:name].split('/')
19     properties << '--region'
20     properties << region
21     if resource[:public_url]
22       properties << '--publicurl'
23       properties << resource[:public_url]
24     end
25     if resource[:internal_url]
26       properties << '--internalurl'
27       properties << resource[:internal_url]
28     end
29     if resource[:admin_url]
30       properties << '--adminurl'
31       properties << resource[:admin_url]
32     end
33     @instance = request('endpoint', 'create', name, resource[:auth], properties)
34   end
35
36   def exists?
37     ! instance(resource[:name]).empty?
38   end
39
40   def destroy
41     id = instance(resource[:name])[:id]
42     request('endpoint', 'delete', id, resource[:auth])
43   end
44
45
46   def region
47     instance(resource[:name])[:region]
48   end
49
50
51   def public_url=(value)
52     @property_flush[:public_url] = value
53   end
54
55   def public_url
56     instance(resource[:name])[:public_url]
57   end
58
59
60   def internal_url=(value)
61     @property_flush[:internal_url] = value
62   end
63
64   def internal_url
65     instance(resource[:name])[:internal_url]
66   end
67
68
69   def admin_url=(value)
70     @property_flush[:admin_url] = value
71   end
72
73   def admin_url
74     instance(resource[:name])[:admin_url]
75   end
76
77   def id
78     instance(resource[:name])[:id]
79   end
80
81   def self.instances
82     list = request('endpoint', 'list', nil, nil, '--long')
83     list.collect do |endpoint|
84       new(
85         :name         => "#{endpoint[:region]}/#{endpoint[:service_name]}",
86         :ensure       => :present,
87         :id           => endpoint[:id],
88         :region       => endpoint[:region],
89         :public_url   => endpoint[:publicurl],
90         :internal_url => endpoint[:internalurl],
91         :admin_url    => endpoint[:adminurl]
92       )
93     end
94   end
95
96   def instances
97     instances = request('endpoint', 'list', nil, resource[:auth], '--long')
98     instances.collect do |endpoint|
99       {
100         :name         => "#{endpoint[:region]}/#{endpoint[:service_name]}",
101         :id           => endpoint[:id],
102         :region       => endpoint[:region],
103         :public_url   => endpoint[:publicurl],
104         :internal_url => endpoint[:internalurl],
105         :admin_url    => endpoint[:adminurl]
106       }
107     end
108   end
109
110   def instance(name)
111     @instance ||= instances.select { |instance| instance[:name] == name }.first || {}
112   end
113
114   def flush
115     if  ! @property_flush.empty?
116       destroy
117       create
118       @property_flush.clear
119     end
120   end
121
122 end