1 require 'puppet/provider/keystone'
3 Puppet::Type.type(:keystone_endpoint).provide(
5 :parent => Puppet::Provider::Keystone
8 desc "Provider to manage keystone endpoints."
10 def initialize(value={})
17 # The region property is just ignored. We should fix this in kilo.
18 region, name = resource[:name].split('/')
19 properties << '--region'
21 if resource[:public_url]
22 properties << '--publicurl'
23 properties << resource[:public_url]
25 if resource[:internal_url]
26 properties << '--internalurl'
27 properties << resource[:internal_url]
29 if resource[:admin_url]
30 properties << '--adminurl'
31 properties << resource[:admin_url]
33 @instance = request('endpoint', 'create', name, resource[:auth], properties)
37 ! instance(resource[:name]).empty?
41 id = instance(resource[:name])[:id]
42 request('endpoint', 'delete', id, resource[:auth])
47 instance(resource[:name])[:region]
51 def public_url=(value)
52 @property_flush[:public_url] = value
56 instance(resource[:name])[:public_url]
60 def internal_url=(value)
61 @property_flush[:internal_url] = value
65 instance(resource[:name])[:internal_url]
70 @property_flush[:admin_url] = value
74 instance(resource[:name])[:admin_url]
78 instance(resource[:name])[:id]
82 list = request('endpoint', 'list', nil, nil, '--long')
83 list.collect do |endpoint|
85 :name => "#{endpoint[:region]}/#{endpoint[:service_name]}",
88 :region => endpoint[:region],
89 :public_url => endpoint[:publicurl],
90 :internal_url => endpoint[:internalurl],
91 :admin_url => endpoint[:adminurl]
97 instances = request('endpoint', 'list', nil, resource[:auth], '--long')
98 instances.collect do |endpoint|
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]
111 @instance ||= instances.select { |instance| instance[:name] == name }.first || {}
115 if ! @property_flush.empty?
118 @property_flush.clear