]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/keystone/lib/puppet/provider/keystone.rb
b398a8e308148ce9585af207310757c36a1b3f7a
[dsa-puppet.git] / 3rdparty / modules / keystone / lib / puppet / provider / keystone.rb
1 require 'puppet/util/inifile'
2 require 'puppet/provider/openstack'
3 class Puppet::Provider::Keystone < Puppet::Provider::Openstack
4
5   def request(service, action, object, credentials, *properties)
6     begin
7       super
8     rescue Puppet::Error::OpenstackAuthInputError => error
9       keystone_request(service, action, object, credentials, error, *properties)
10     end
11   end
12
13   def self.request(service, action, object, credentials, *properties)
14     begin
15       super
16     rescue Puppet::Error::OpenstackAuthInputError => error
17       keystone_request(service, action, object, credentials, error, *properties)
18     end
19   end
20
21   def keystone_request(service, action, object, credentials, error, *properties)
22     self.class.keystone_request(service, action, object, credentials, error, *properties)
23   end
24
25   def self.keystone_request(service, action, object, credentials, error, *properties)
26     credentials = {
27       'token'    => get_admin_token,
28       'auth_url' => get_admin_endpoint,
29     }
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)
34   end
35
36   def self.admin_token
37     @admin_token ||= get_admin_token
38   end
39
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}"
43     else
44       return nil
45     end
46   end
47
48   def self.admin_endpoint
49     @admin_endpoint ||= get_admin_endpoint
50   end
51
52   def get_admin_token
53     self.class.get_admin_token
54   end
55
56
57   def self.get_admin_endpoint
58     if keystone_file
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/"
63         end
64
65         if keystone_file['DEFAULT']['admin_port']
66           admin_port = keystone_file['DEFAULT']['admin_port'].strip
67         else
68           admin_port = '35357'
69         end
70
71         if keystone_file['DEFAULT']['admin_bind_host']
72           host = keystone_file['DEFAULT']['admin_bind_host'].strip
73           if host == "0.0.0.0"
74             host = "127.0.0.1"
75           elsif host == '::0'
76             host = '[::1]'
77           end
78         else
79           host = "127.0.0.1"
80         end
81       end
82
83       if keystone_file['ssl'] && keystone_file['ssl']['enable'] && keystone_file['ssl']['enable'].strip.downcase == 'true'
84         protocol = 'https'
85       else
86         protocol = 'http'
87       end
88     end
89
90     "#{protocol}://#{host}:#{admin_port}/v2.0/"
91   end
92
93   def get_admin_endpoint
94     self.class.get_admin_endpoint
95   end
96
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')
101     @keystone_file
102   end
103
104   def keystone_file
105     self.class.keystone_file
106   end
107
108   # Helper functions to use on the pre-validated enabled field
109   def bool_to_sym(bool)
110     bool == true ? :true : :false
111   end
112
113   def sym_to_bool(sym)
114     sym == :true ? true : false
115   end
116
117 end