Fix CLI auth user interface
This patch fixes how auth options are checked in CLI. Use either: - tenant-id or tenant-name - project-id and user-domain (id or name) - project-name and project-domain (id or name) and user-domain (id or name) For consistency, the same checking is used in the client authentication plugin. Change-Id: I2210d8bf21bba5d1faf72dfbe38756078d8bc0c1 Closes-Bug: #1616468
This commit is contained in:
@@ -208,8 +208,13 @@ class AuthPlugin(auth.BaseAuthPlugin):
|
|||||||
"""
|
"""
|
||||||
has_token = self.opts.get('token') or self.opts.get('auth_token')
|
has_token = self.opts.get('token') or self.opts.get('auth_token')
|
||||||
no_auth = has_token and self.opts.get('endpoint')
|
no_auth = has_token and self.opts.get('endpoint')
|
||||||
|
has_project = (self.opts.get('project_id')
|
||||||
|
or (self.opts.get('project_name')
|
||||||
|
and (self.opts.get('user_domain_name')
|
||||||
|
or self.opts.get('user_domain_id'))))
|
||||||
has_tenant = self.opts.get('tenant_id') or self.opts.get('tenant_name')
|
has_tenant = self.opts.get('tenant_id') or self.opts.get('tenant_name')
|
||||||
has_credential = (self.opts.get('username') and has_tenant
|
has_credential = (self.opts.get('username')
|
||||||
|
and (has_project or has_tenant)
|
||||||
and self.opts.get('password')
|
and self.opts.get('password')
|
||||||
and self.opts.get('auth_url'))
|
and self.opts.get('auth_url'))
|
||||||
missing = not (no_auth or has_credential)
|
missing = not (no_auth or has_credential)
|
||||||
|
@@ -198,12 +198,11 @@ class CloudkittyShell(object):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def no_project_and_domain_set(args):
|
def no_project_and_domain_set(args):
|
||||||
if not (args.os_project_id or (args.os_project_name and
|
return not (((args.os_project_id or (args.os_project_name and
|
||||||
(args.os_user_domain_name or args.os_user_domain_id)) or
|
(args.os_project_domain_name or
|
||||||
(args.os_tenant_id or args.os_tenant_name)):
|
args.os_project_domain_id)))
|
||||||
return True
|
and (args.os_user_domain_name or args.os_user_domain_id))
|
||||||
else:
|
or (args.os_tenant_id or args.os_tenant_name))
|
||||||
return False
|
|
||||||
|
|
||||||
def main(self, argv):
|
def main(self, argv):
|
||||||
parsed = self.parse_args(argv)
|
parsed = self.parse_args(argv)
|
||||||
@@ -242,13 +241,17 @@ class CloudkittyShell(object):
|
|||||||
"env[OS_USER_DOMAIN_NAME] or "
|
"env[OS_USER_DOMAIN_NAME] or "
|
||||||
"a domain_id via either "
|
"a domain_id via either "
|
||||||
"--os-user-domain-id or via "
|
"--os-user-domain-id or via "
|
||||||
"env[OS_USER_DOMAIN_ID]")
|
"env[OS_USER_DOMAIN_ID]\n\n"
|
||||||
|
"As an alternative to project_id, "
|
||||||
if not (self.auth_plugin.opts['tenant_id']
|
"you can provide a project_name via "
|
||||||
or self.auth_plugin.opts['tenant_name']):
|
"either --os-project-name or via "
|
||||||
raise exc.CommandError("You must provide a tenant_id via "
|
"env[OS_PROJECT_NAME] and "
|
||||||
"either --os-tenant-id or via "
|
"a project_domain_name via either "
|
||||||
"env[OS_TENANT_ID]")
|
"--os-project-domain-name or via "
|
||||||
|
"env[OS_PROJECT_DOMAIN_NAME] or "
|
||||||
|
"a project_domain_id via either "
|
||||||
|
"--os-project-domain-id or via "
|
||||||
|
"env[OS_PROJECT_DOMAIN_ID]")
|
||||||
|
|
||||||
if not self.auth_plugin.opts['auth_url']:
|
if not self.auth_plugin.opts['auth_url']:
|
||||||
raise exc.CommandError("You must provide an auth url via "
|
raise exc.CommandError("You must provide an auth url via "
|
||||||
|
Reference in New Issue
Block a user