Skip to content

Commit 8677de9

Browse files
Jenkinsopenstack-gerrit
Jenkins
authored andcommitted
Merge "Only token or creds are required."
2 parents 25517d0 + f0124b7 commit 8677de9

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

ceilometerclient/client.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def _get_keystone_session(**kwargs):
7171
auth_url = kwargs.pop('auth_url', None)
7272
project_id = kwargs.pop('project_id', None)
7373
project_name = kwargs.pop('project_name', None)
74+
token = kwargs['token']
7475
timeout = kwargs.get('timeout')
7576

7677
if insecure:
@@ -100,7 +101,21 @@ def _get_keystone_session(**kwargs):
100101
use_v3 = v3_auth_url and (use_domain or (not v2_auth_url))
101102
use_v2 = v2_auth_url and not use_domain
102103

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:
104119
# the auth_url as v3 specified
105120
# e.g. http://no.where:5000/v3
106121
# Keystone will return only v3 as viable option
@@ -125,6 +140,7 @@ def _get_keystone_session(**kwargs):
125140
kwargs.pop('password', None),
126141
tenant_id=project_id,
127142
tenant_name=project_name)
143+
128144
else:
129145
raise exc.CommandError('Unable to determine the Keystone version '
130146
'to authenticate with using the given '
@@ -160,16 +176,20 @@ class AuthPlugin(auth.BaseAuthPlugin):
160176
def __init__(self, auth_system=None, **kwargs):
161177
self.opt_names.extend(self.common_opt_names)
162178
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')
163182

164183
def _do_authenticate(self, http_client):
165-
token = self.opts.get('token') or self.opts.get('auth_token')
184+
token = self.opts.get('token')
166185
endpoint = self.opts.get('endpoint')
167-
if not (token and endpoint):
186+
if not (endpoint and token):
168187
ks_kwargs = self._get_ks_kwargs(http_timeout=http_client.timeout)
169188
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)
173193
self.opts['token'] = token
174194
self.opts['endpoint'] = endpoint
175195

@@ -178,6 +198,7 @@ def _get_ks_kwargs(self, http_timeout):
178198
self.opts.get('tenant_id'))
179199
project_name = (self.opts.get('project_name') or
180200
self.opts.get('tenant_name'))
201+
token = self.opts.get('token')
181202
ks_kwargs = {
182203
'username': self.opts.get('username'),
183204
'password': self.opts.get('password'),
@@ -198,6 +219,7 @@ def _get_ks_kwargs(self, http_timeout):
198219
'service_type': self.opts.get('service_type'),
199220
'region_name': self.opts.get('region_name'),
200221
'timeout': http_timeout,
222+
'token': token() if callable(token) else token,
201223
}
202224
return ks_kwargs
203225

@@ -212,8 +234,7 @@ def sufficient_options(self):
212234
213235
:raises: AuthPluginOptionsMissing
214236
"""
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')
217238
has_project_domain_or_tenant = (self.opts.get('project_id') or
218239
(self.opts.get('project_name') and
219240
(self.opts.get('user_domain_name') or
@@ -224,7 +245,7 @@ def sufficient_options(self):
224245
and has_project_domain_or_tenant
225246
and self.opts.get('password')
226247
and self.opts.get('auth_url'))
227-
missing = not (no_auth or has_credential)
248+
missing = not (has_token or has_credential)
228249
if missing:
229250
missing_opts = []
230251
opts = ['token', 'endpoint', 'username', 'password', 'auth_url',

ceilometerclient/tests/unit/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,6 @@ def test_get_sufficient_options_missing(self, session):
399399
session_instance_mock = mock.MagicMock()
400400
session.return_value = session_instance_mock
401401
client = self.create_client(env)
402-
client.auth_plugin.opts.pop('endpoint', None)
402+
client.auth_plugin.opts.pop('token', None)
403403
self.assertRaises(exceptions.AuthPluginOptionsMissing,
404404
client.auth_plugin.sufficient_options)

0 commit comments

Comments
 (0)