]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/aviator/lib/puppet/feature/aviator/openstack/identity/requests/v3/public/create_token.rb
Revert "add stackforge/keystone to 3rdparty"
[dsa-puppet.git] / 3rdparty / modules / aviator / lib / puppet / feature / aviator / openstack / identity / requests / v3 / public / create_token.rb
1 module Aviator
2   # Original work by Stephen Paul Suarez
3   # https://github.com/musashi-dev/aviator/blob/develop/lib/aviator/openstack/identity/v3/public/create_token.rb
4
5   define_request :create_token, :inherit => [:openstack, :common, :v3, :public, :base] do
6
7     meta :anonymous,   true
8     meta :service,     :identity
9     meta :api_version, :v3
10
11     link 'documentation',
12          'http://api.openstack.org/api-ref-identity-v3.html#Token_Calls'
13
14     param :domainId,   :required => false, :alias => :domain_id
15     param :domainName, :required => false, :alias => :domain_name
16     param :password,   :required => false
17     param :tenantId,   :required => false, :alias => :tenant_id
18     param :tenantName, :required => false, :alias => :tenant_name
19     param :tokenId,    :required => false, :alias => :token_id
20     param :userId,     :required => false, :alias => :user_id
21     param :username,   :required => false
22
23
24     def body
25       params[:token_id] ? token_auth_body : password_auth_body
26     end
27
28
29     def http_method
30       :post
31     end
32
33
34     def url
35       url  = session_data[:auth_service][:host_uri]
36       url += '/v3' if (URI(url).path =~ /^\/?\w+/).nil?
37       url += "/auth/tokens"
38     end
39
40
41     private
42
43     # Removes nil elements from hash
44     # Adapted from http://stackoverflow.com/a/14773555/402145
45     def compact_hash(hash, opts = {})
46       opts[:recurse] ||= true
47       hash.inject({}) do |new_hash, (k,v)|
48         if !v.nil?
49           new_hash[k] = opts[:recurse] && v.kind_of?(Hash) ? compact_hash(v, opts) : v
50         end
51         new_hash
52       end
53     end
54
55
56     def domain_hash
57       compact_hash({
58         :id   => params[:domain_id],
59         :name => params[:domain_name]
60       })
61     end
62
63
64     def password_auth_body
65       p = {
66         :auth => {
67           :identity => {
68             :methods  => ['password'],
69             :password => {
70               :user => compact_hash({
71                          :id       => params[:user_id],
72                          :name     => params[:username],
73                          :password => params[:password]
74                        })
75             }
76           }
77         }
78       }
79
80       if params[:domain_name] || params[:domain_id]
81         p[:auth][:identity][:password][:user][:domain] = domain_hash
82       end
83
84       if params[:tenant_name] || params[:tenant_id] || params[:domain_name] || params[:domain_id]
85         p[:auth][:scope] = scope_hash
86       end
87       p
88     end
89
90
91     def scope_hash
92       p = {}
93
94       if params[:tenant_name] || params[:tenant_id]
95         p[:project] = compact_hash({
96                         :id   => params[:tenant_id],
97                         :name => params[:tenant_name]
98                       })
99         p[:project][:domain] = domain_hash if params[:domain_name] || params[:domain_id]
100
101       elsif params[:domain_name] || params[:domain_id]
102         p[:domain] = domain_hash
103       end
104
105       p
106     end
107
108
109     def token_auth_body
110       p = {
111         :auth => {
112           :identity => {
113             :methods => ['token'],
114             :token   => { :id => params[:token_id] }
115           }
116         }
117       }
118       p[:auth][:scope] = scope_hash if params[:tenant_name] || params[:tenant_id]
119       p
120     end
121
122
123   end
124
125 end