diff --git a/ceilometerclient/shell.py b/ceilometerclient/shell.py index 9642bdf..fa847ff 100644 --- a/ceilometerclient/shell.py +++ b/ceilometerclient/shell.py @@ -256,38 +256,44 @@ class CeilometerShell(object): self.do_help(args) return 0 - if not args.os_username: - raise exc.CommandError("You must provide a username via" - " either --os-username or env[OS_USERNAME]") + if args.os_auth_token and args.ceilometer_url: + token = args.os_auth_token + endpoint = args.ceilometer_url + else: + if not args.os_username: + raise exc.CommandError("You must provide a username via " + "either --os-username or via " + "env[OS_USERNAME]") - if not args.os_password: - raise exc.CommandError("You must provide a password via" - " either --os-password or env[OS_PASSWORD]") + if not args.os_password: + raise exc.CommandError("You must provide a password via " + "either --os-password or via " + "env[OS_PASSWORD]") - if not (args.os_tenant_id or args.os_tenant_name): - raise exc.CommandError("You must provide a tenant_id via" - " either --os-tenant-id or via " - "env[OS_TENANT_ID]") + if not (args.os_tenant_id or args.os_tenant_name): + raise exc.CommandError("You must provide a tenant_id via " + "either --os-tenant-id or via " + "env[OS_TENANT_ID]") - if not args.os_auth_url: - raise exc.CommandError("You must provide an auth url via" - " either --os-auth-url or via " - "env[OS_AUTH_URL]") - kwargs = { - 'username': args.os_username, - 'password': args.os_password, - 'tenant_id': args.os_tenant_id, - 'tenant_name': args.os_tenant_name, - 'auth_url': args.os_auth_url, - 'service_type': args.os_service_type, - 'endpoint_type': args.os_endpoint_type, - 'insecure': args.insecure - } - _ksclient = self._get_ksclient(**kwargs) - token = args.os_auth_token or _ksclient.auth_token + if not args.os_auth_url: + raise exc.CommandError("You must provide an auth url via " + "either --os-auth-url or via " + "env[OS_AUTH_URL]") + kwargs = { + 'username': args.os_username, + 'password': args.os_password, + 'tenant_id': args.os_tenant_id, + 'tenant_name': args.os_tenant_name, + 'auth_url': args.os_auth_url, + 'service_type': args.os_service_type, + 'endpoint_type': args.os_endpoint_type, + 'insecure': args.insecure + } + _ksclient = self._get_ksclient(**kwargs) + token = args.os_auth_token or _ksclient.auth_token - endpoint = args.ceilometer_url or \ - self._get_endpoint(_ksclient, **kwargs) + endpoint = args.ceilometer_url or \ + self._get_endpoint(_ksclient, **kwargs) kwargs = { 'token': token, diff --git a/tests/test_shell.py b/tests/test_shell.py index 8260058..bff38d2 100644 --- a/tests/test_shell.py +++ b/tests/test_shell.py @@ -105,3 +105,18 @@ class ShellTest(unittest2.TestCase): help_text = self.shell(argstr) for r in required: self.assertRegexpMatches(help_text, r) + + def test_auth_param(self): + class TokenContext(object): + def __enter__(self): + fake_env = { + 'OS_AUTH_TOKEN': 'token', + 'CEILOMETER_URL': 'http://no.where' + } + self.old_env, os.environ = os.environ, fake_env.copy() + + def __exit__(self, exc_type, exc_value, traceback): + os.environ = self.old_env + + with TokenContext(): + self.test_help()