1 require 'puppet/util/inifile'
2 require 'puppet/provider/openstack'
3 class Puppet::Provider::Keystone < Puppet::Provider::Openstack
5 def request(service, action, object, credentials, *properties)
8 rescue Puppet::Error::OpenstackAuthInputError => error
9 keystone_request(service, action, object, credentials, error, *properties)
13 def self.request(service, action, object, credentials, *properties)
16 rescue Puppet::Error::OpenstackAuthInputError => error
17 keystone_request(service, action, object, credentials, error, *properties)
21 def keystone_request(service, action, object, credentials, error, *properties)
22 self.class.keystone_request(service, action, object, credentials, error, *properties)
25 def self.keystone_request(service, action, object, credentials, error, *properties)
27 'token' => get_admin_token,
28 'auth_url' => get_admin_endpoint,
30 raise error unless (credentials['token'] && credentials['auth_url'])
31 auth_args = token_auth_args(credentials)
32 args = [object, properties, auth_args].flatten.compact
33 authenticate_request(service, action, args)
37 @admin_token ||= get_admin_token
40 def self.get_admin_token
41 if keystone_file and keystone_file['DEFAULT'] and keystone_file['DEFAULT']['admin_token']
42 return "#{keystone_file['DEFAULT']['admin_token'].strip}"
48 def self.admin_endpoint
49 @admin_endpoint ||= get_admin_endpoint
53 self.class.get_admin_token
57 def self.get_admin_endpoint
59 if keystone_file['DEFAULT']
60 if keystone_file['DEFAULT']['admin_endpoint']
61 auth_url = keystone_file['DEFAULT']['admin_endpoint'].strip.chomp('/')
62 return "#{auth_url}/v2.0/"
65 if keystone_file['DEFAULT']['admin_port']
66 admin_port = keystone_file['DEFAULT']['admin_port'].strip
71 if keystone_file['DEFAULT']['admin_bind_host']
72 host = keystone_file['DEFAULT']['admin_bind_host'].strip
83 if keystone_file['ssl'] && keystone_file['ssl']['enable'] && keystone_file['ssl']['enable'].strip.downcase == 'true'
90 "#{protocol}://#{host}:#{admin_port}/v2.0/"
93 def get_admin_endpoint
94 self.class.get_admin_endpoint
97 def self.keystone_file
98 return @keystone_file if @keystone_file
99 @keystone_file = Puppet::Util::IniConfig::File.new
100 @keystone_file.read('/etc/keystone/keystone.conf')
105 self.class.keystone_file
108 # Helper functions to use on the pre-validated enabled field
109 def bool_to_sym(bool)
110 bool == true ? :true : :false
114 sym == :true ? true : false