diff options
author | ZhiQiang Fan <aji.zqfan@gmail.com> | 2014-11-27 06:37:23 +0800 |
---|---|---|
committer | ZhiQiang Fan <zhiqiang.fan@huawei.com> | 2015-01-08 12:26:01 +0800 |
commit | 2dd894c7117d2d8ebf0f7ae365de49b3b3b1a078 (patch) | |
tree | 2a4222a66f008f20c8d2611ad312e1c720bcf7db | |
parent | 23172170b5a9a972e2d3ca0955c081eda50cadb1 (diff) | |
download | python-ceilometerclient-2dd894c7117d2d8ebf0f7ae365de49b3b3b1a078.tar.gz |
Support ceilometer-url and os-endpoint
Ceilometerclient has messed up with (ceilometer-url and os-endpoint)
and (os-auth-token and token). This patch marks ceilometer-url and
auth-token as deprecated, and unifies the two pairs arguments.
Change-Id: Id55e5b603d8075018cf45b9833d397173439b3ce
Closes-Bug: #1396811
-rw-r--r-- | ceilometerclient/client.py | 43 | ||||
-rw-r--r-- | ceilometerclient/shell.py | 13 | ||||
-rw-r--r-- | ceilometerclient/tests/test_shell.py | 18 | ||||
-rw-r--r-- | ceilometerclient/v2/client.py | 1 |
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) |