@@ -71,6 +71,7 @@ def _get_keystone_session(**kwargs):
71
71
auth_url = kwargs .pop ('auth_url' , None )
72
72
project_id = kwargs .pop ('project_id' , None )
73
73
project_name = kwargs .pop ('project_name' , None )
74
+ token = kwargs ['token' ]
74
75
timeout = kwargs .get ('timeout' )
75
76
76
77
if insecure :
@@ -100,7 +101,21 @@ def _get_keystone_session(**kwargs):
100
101
use_v3 = v3_auth_url and (use_domain or (not v2_auth_url ))
101
102
use_v2 = v2_auth_url and not use_domain
102
103
103
- if use_v3 :
104
+ if use_v3 and token :
105
+ auth = v3_auth .Token (
106
+ v3_auth_url ,
107
+ token = token ,
108
+ project_name = project_name ,
109
+ project_id = project_id ,
110
+ project_domain_name = project_domain_name ,
111
+ project_domain_id = project_domain_id )
112
+ elif use_v2 and token :
113
+ auth = v2_auth .Token (
114
+ v2_auth_url ,
115
+ token = token ,
116
+ tenant_id = project_id ,
117
+ tenant_name = project_name )
118
+ elif use_v3 :
104
119
# the auth_url as v3 specified
105
120
# e.g. http://no.where:5000/v3
106
121
# Keystone will return only v3 as viable option
@@ -125,6 +140,7 @@ def _get_keystone_session(**kwargs):
125
140
kwargs .pop ('password' , None ),
126
141
tenant_id = project_id ,
127
142
tenant_name = project_name )
143
+
128
144
else :
129
145
raise exc .CommandError ('Unable to determine the Keystone version '
130
146
'to authenticate with using the given '
@@ -160,16 +176,20 @@ class AuthPlugin(auth.BaseAuthPlugin):
160
176
def __init__ (self , auth_system = None , ** kwargs ):
161
177
self .opt_names .extend (self .common_opt_names )
162
178
super (AuthPlugin , self ).__init__ (auth_system , ** kwargs )
179
+ # NOTE(sileht): backward compat
180
+ if self .opts .get ('auth_token' ) and not self .opts .get ('token' ):
181
+ self .opts ['token' ] = self .opts .get ('auth_token' )
163
182
164
183
def _do_authenticate (self , http_client ):
165
- token = self .opts .get ('token' ) or self . opts . get ( 'auth_token' )
184
+ token = self .opts .get ('token' )
166
185
endpoint = self .opts .get ('endpoint' )
167
- if not (token and endpoint ):
186
+ if not (endpoint and token ):
168
187
ks_kwargs = self ._get_ks_kwargs (http_timeout = http_client .timeout )
169
188
ks_session = _get_keystone_session (** ks_kwargs )
170
- token = lambda : ks_session .get_token ()
171
- endpoint = (self .opts .get ('endpoint' ) or
172
- _get_endpoint (ks_session , ** ks_kwargs ))
189
+ if not token :
190
+ token = lambda : ks_session .get_token ()
191
+ if not endpoint :
192
+ endpoint = _get_endpoint (ks_session , ** ks_kwargs )
173
193
self .opts ['token' ] = token
174
194
self .opts ['endpoint' ] = endpoint
175
195
@@ -178,6 +198,7 @@ def _get_ks_kwargs(self, http_timeout):
178
198
self .opts .get ('tenant_id' ))
179
199
project_name = (self .opts .get ('project_name' ) or
180
200
self .opts .get ('tenant_name' ))
201
+ token = self .opts .get ('token' )
181
202
ks_kwargs = {
182
203
'username' : self .opts .get ('username' ),
183
204
'password' : self .opts .get ('password' ),
@@ -198,6 +219,7 @@ def _get_ks_kwargs(self, http_timeout):
198
219
'service_type' : self .opts .get ('service_type' ),
199
220
'region_name' : self .opts .get ('region_name' ),
200
221
'timeout' : http_timeout ,
222
+ 'token' : token () if callable (token ) else token ,
201
223
}
202
224
return ks_kwargs
203
225
@@ -212,8 +234,7 @@ def sufficient_options(self):
212
234
213
235
:raises: AuthPluginOptionsMissing
214
236
"""
215
- has_token = self .opts .get ('token' ) or self .opts .get ('auth_token' )
216
- no_auth = has_token and self .opts .get ('endpoint' )
237
+ has_token = self .opts .get ('token' )
217
238
has_project_domain_or_tenant = (self .opts .get ('project_id' ) or
218
239
(self .opts .get ('project_name' ) and
219
240
(self .opts .get ('user_domain_name' ) or
@@ -224,7 +245,7 @@ def sufficient_options(self):
224
245
and has_project_domain_or_tenant
225
246
and self .opts .get ('password' )
226
247
and self .opts .get ('auth_url' ))
227
- missing = not (no_auth or has_credential )
248
+ missing = not (has_token or has_credential )
228
249
if missing :
229
250
missing_opts = []
230
251
opts = ['token' , 'endpoint' , 'username' , 'password' , 'auth_url' ,
0 commit comments