summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-01-09 14:37:18 +0000
committerGerrit Code Review <review@openstack.org>2015-01-09 14:37:18 +0000
commitefdcb7075294710df3fb24ca016abe924ab3585f (patch)
treedec8675fa89abed9a77188a22b5bbcdf29a07a81
parentaeba1a12170ae51ac52e7f8a5225d5c8dbabd170 (diff)
parent2dd894c7117d2d8ebf0f7ae365de49b3b3b1a078 (diff)
downloadpython-ceilometerclient-efdcb7075294710df3fb24ca016abe924ab3585f.tar.gz
Merge "Support ceilometer-url and os-endpoint"
-rw-r--r--ceilometerclient/client.py43
-rw-r--r--ceilometerclient/shell.py13
-rw-r--r--ceilometerclient/tests/test_shell.py18
-rw-r--r--ceilometerclient/v2/client.py1
4 files changed, 50 insertions, 25 deletions
diff --git a/ceilometerclient/client.py b/ceilometerclient/client.py
index bffc2bf..feacf7c 100644
--- a/ceilometerclient/client.py
+++ b/ceilometerclient/client.py
@@ -153,12 +153,11 @@ class AuthPlugin(auth.BaseAuthPlugin):
super(AuthPlugin, self).__init__(auth_system, **kwargs)
def _do_authenticate(self, http_client):
- if self.opts.get('token') and self.opts.get('endpoint'):
- token = self.opts.get('token')
- endpoint = self.opts.get('endpoint')
- else:
- project_id = self.opts.get('project_id') \
- or self.opts.get('tenant_id')
+ token = self.opts.get('token') or self.opts.get('auth_token')
+ endpoint = self.opts.get('endpoint')
+ if not (token and endpoint):
+ project_id = (self.opts.get('project_id') or
+ self.opts.get('tenant_id'))
project_name = (self.opts.get('project_name') or
self.opts.get('tenant_name'))
ks_kwargs = {
@@ -183,8 +182,8 @@ class AuthPlugin(auth.BaseAuthPlugin):
# retrieve session
ks_session = _get_keystone_session(**ks_kwargs)
token = lambda: ks_session.get_token()
- endpoint = self.opts.get('endpoint') or \
- _get_endpoint(ks_session, **ks_kwargs)
+ endpoint = (self.opts.get('endpoint') or
+ _get_endpoint(ks_session, **ks_kwargs))
self.opts['token'] = token
self.opts['endpoint'] = endpoint
@@ -199,14 +198,13 @@ class AuthPlugin(auth.BaseAuthPlugin):
:raises: AuthPluginOptionsMissing
"""
- missing = not ((self.opts.get('token') and
- self.opts.get('endpoint')) or
- (self.opts.get('username')
- and self.opts.get('password')
- and self.opts.get('auth_url') and
- (self.opts.get('tenant_id')
- or self.opts.get('tenant_name'))))
-
+ has_token = self.opts.get('token') or self.opts.get('auth_token')
+ no_auth = has_token and self.opts.get('endpoint')
+ has_tenant = self.opts.get('tenant_id') or self.opts.get('tenant_name')
+ has_credential = (self.opts.get('username') and has_tenant
+ and self.opts.get('password')
+ and self.opts.get('auth_url'))
+ missing = not (no_auth or has_credential)
if missing:
missing_opts = []
opts = ['token', 'endpoint', 'username', 'password', 'auth_url',
@@ -220,6 +218,7 @@ class AuthPlugin(auth.BaseAuthPlugin):
def Client(version, *args, **kwargs):
module = utils.import_versioned_module(version, 'client')
client_class = getattr(module, 'Client')
+ kwargs['token'] = kwargs.get('token') or kwargs.get('auth_token')
return client_class(*args, **kwargs)
@@ -230,8 +229,12 @@ def get_client(version, **kwargs):
:param api_version: the API version to use ('1' or '2')
:param kwargs: keyword args containing credentials, either:
- * os_auth_token: pre-existing token to re-use
- * ceilometer_url: ceilometer API endpoint
+ * os_auth_token: (DEPRECATED) pre-existing token to re-use,
+ use os_token instead
+ * os_token: pre-existing token to re-use
+ * ceilometer_url: (DEPRECATED) Ceilometer API endpoint,
+ use os_endpoint instead
+ * os_endpoint: Ceilometer API endpoint
or:
* os_username: name of user
* os_password: user's password
@@ -249,7 +252,7 @@ def get_client(version, **kwargs):
* os_key: SSL private key
* insecure: allow insecure SSL (no cert verification)
"""
- endpoint = kwargs.get('ceilometer_url')
+ endpoint = kwargs.get('os_endpoint') or kwargs.get('ceilometer_url')
cli_kwargs = {
'username': kwargs.get('os_username'),
@@ -263,7 +266,7 @@ def get_client(version, **kwargs):
'cacert': kwargs.get('os_cacert'),
'cert_file': kwargs.get('os_cert'),
'key_file': kwargs.get('os_key'),
- 'token': kwargs.get('os_auth_token'),
+ 'token': kwargs.get('os_token') or kwargs.get('os_auth_token'),
'user_domain_name': kwargs.get('os_user_domain_name'),
'user_domain_id': kwargs.get('os_user_domain_id'),
'project_domain_name': kwargs.get('os_project_domain_name'),
diff --git a/ceilometerclient/shell.py b/ceilometerclient/shell.py
index 5bfe1d5..221eca9 100644
--- a/ceilometerclient/shell.py
+++ b/ceilometerclient/shell.py
@@ -81,11 +81,14 @@ class CeilometerShell(object):
type=_positive_non_zero_int,
help='Number of seconds to wait for a response.')
- parser.add_argument('--ceilometer-url',
+ parser.add_argument('--ceilometer-url', metavar='<CEILOMETER_URL>',
+ dest='os_endpoint',
default=cliutils.env('CEILOMETER_URL'),
- help='Defaults to env[CEILOMETER_URL].')
+ help=("DEPRECATED, use --os-endpoint instead. "
+ "Defaults to env[CEILOMETER_URL]."))
parser.add_argument('--ceilometer_url',
+ dest='os_endpoint',
help=argparse.SUPPRESS)
parser.add_argument('--ceilometer-api-version',
@@ -155,7 +158,7 @@ class CeilometerShell(object):
def parse_args(self, argv):
# Parse args once to find version
- self.auth_plugin = ceiloclient.AuthPlugin(argv)
+ self.auth_plugin = ceiloclient.AuthPlugin()
parser = self.get_base_parser()
(options, args) = parser.parse_known_args(argv)
self.auth_plugin.parse_opts(options)
@@ -198,7 +201,9 @@ class CeilometerShell(object):
self.do_bash_completion(args)
return 0
- if not (self.auth_plugin.opts['auth_token'] and args.ceilometer_url):
+ if not ((self.auth_plugin.opts.get('token')
+ or self.auth_plugin.opts.get('auth_token'))
+ and self.auth_plugin.opts['endpoint']):
if not self.auth_plugin.opts['username']:
raise exc.CommandError("You must provide a username via "
"either --os-username or via "
diff --git a/ceilometerclient/tests/test_shell.py b/ceilometerclient/tests/test_shell.py
index f121d29..6d6403b 100644
--- a/ceilometerclient/tests/test_shell.py
+++ b/ceilometerclient/tests/test_shell.py
@@ -205,3 +205,21 @@ class ShellInsecureTest(ShellTestBase):
args = ['--debug', '--os-insecure', 'false', 'alarm-list']
self.assertRaises(exc.CommandError, ceilometer_shell.main, args)
mocked_session.assert_called_with(verify=True, cert='')
+
+
+class ShellEndpointTest(ShellTestBase):
+
+ @mock.patch('ceilometerclient.v2.client.Client')
+ def _test_endpoint_and_token(self, token_name, endpoint_name, mocked):
+ args = ['--debug', token_name, 'fake-token',
+ endpoint_name, 'http://fake-url', 'alarm-list']
+ self.assertEqual(None, ceilometer_shell.main(args))
+ args, kwargs = mocked.call_args
+ self.assertEqual('http://fake-url', kwargs.get('endpoint'))
+ self.assertEqual('fake-token', kwargs.get('token'))
+
+ def test_endpoint_and_token(self):
+ self._test_endpoint_and_token('--os-auth-token', '--ceilometer-url')
+ self._test_endpoint_and_token('--os-auth-token', '--os-endpoint')
+ self._test_endpoint_and_token('--os-token', '--ceilometer-url')
+ self._test_endpoint_and_token('--os-token', '--os-endpoint')
diff --git a/ceilometerclient/v2/client.py b/ceilometerclient/v2/client.py
index 88616ba..d0cf7ff 100644
--- a/ceilometerclient/v2/client.py
+++ b/ceilometerclient/v2/client.py
@@ -45,7 +45,6 @@ class Client(object):
"""
def __init__(self, *args, **kwargs):
-
"""Initialize a new client for the Ceilometer v2 API."""
self.auth_plugin = kwargs.get('auth_plugin') \
or ceiloclient.get_auth_plugin(*args, **kwargs)