support users in domains other than Default (KSv3)

Closes-Bug: 1471882

Change-Id: I8574fa3d393dc7a2c9d0470cbf7b9e819a3be0cc
This commit is contained in:
Joachim Barheine 2015-07-06 16:28:35 +00:00 committed by jobrs
parent a50f7c5a93
commit 6e428c4614
5 changed files with 33 additions and 2 deletions

View File

@ -78,10 +78,13 @@ When using Keystone to obtain the token and endpoint::
export OS_USERNAME=
export OS_PASSWORD=
export OS_USER_DOMAIN_NAME=
export OS_PROJECT_NAME=
export OS_AUTH_URL=
export OS_REGION_NAME=
When OS_USER_DOMAIN_NAME is not set, then 'Default' is assumed. Alternatively IDs can be used instead of names.
When using Vagrant Environment with middleware disabled::
export OS_AUTH_TOKEN=82510970543135
@ -97,6 +100,7 @@ You'll find complete documentation on the shell by running
[--key-file KEY_FILE] [--os-cacert OS_CACERT]
[--timeout TIMEOUT] [--os-username OS_USERNAME]
[--os-password OS_PASSWORD] [--os-project-id OS_PROJECT_ID]
[--os-user-domain-id OS_USER_DOMAIN_ID] [--os-user-domain-name OS_USER_DOMAIN_NAME]
[--os-project-name OS_PROJECT_NAME]
[--os-domain-id OS_DOMAIN_ID] [--os-domain-name OS_DOMAIN_NAME]
[--os-auth-url OS_AUTH_URL] [--os-region-name OS_REGION_NAME]

View File

@ -62,6 +62,8 @@ class HTTPClient(object):
self.auth_token = kwargs.get('token')
self.username = kwargs.get('username')
self.password = kwargs.get('password')
self.user_domain_id = kwargs.get('user_domain_id')
self.user_domain_name = kwargs.get('user_domain_name')
self.region_name = kwargs.get('region_name')
self.include_pass = kwargs.get('include_pass')
self.endpoint_url = endpoint
@ -99,6 +101,8 @@ class HTTPClient(object):
ks_args = {
'username': self.username,
'password': self.password,
'user_domain_id': self.user_domain_id,
'user_domain_name': self.user_domain_name,
'token': '',
'auth_url': self.auth_url,
'service_type': self.service_type,

View File

@ -24,11 +24,14 @@ from monascaclient import exc
class KSClient(object):
def __init__(self, **kwargs):
"""Get an endpoint and auth token from Keystone.
:param username: name of user
:param password: user's password
:param user_domain_id: unique identifier of domain username resides in (optional)
:param user_domain_name: name of domain for username (optional), if user_domain_id not specified
:param project_id: unique identifier of project
:param project_name: name of project
:param domain_name: name of domain project is in
@ -55,6 +58,11 @@ class KSClient(object):
else:
kc_args['username'] = kwargs.get('username')
kc_args['password'] = kwargs.get('password')
# when username not in the default domain (id='default'), supply user domain (as namespace)
if kwargs.get('user_domain_name'):
kc_args['user_domain_name'] = kwargs.get('user_domain_name')
if kwargs.get('user_domain_id'):
kc_args['user_domain_id'] = kwargs.get('user_domain_id')
self._kwargs = kwargs
self._keystone = client.Client(**kc_args)

View File

@ -118,6 +118,14 @@ class MonascaShell(object):
parser.add_argument('--os_password',
help=argparse.SUPPRESS)
parser.add_argument('--os-user-domain-id',
default=utils.env('OS_USER_DOMAIN_ID'),
help='Defaults to env[OS_USER_DOMAIN_ID].')
parser.add_argument('--os-user-domain-name',
default=utils.env('OS_USER_DOMAIN_NAME'),
help='Defaults to env[OS_USER_DOMAIN_NAME].')
parser.add_argument('--os-project-id',
default=utils.env('OS_PROJECT_ID'),
help='Defaults to env[OS_PROJECT_ID].')
@ -322,6 +330,8 @@ class MonascaShell(object):
'service_type': args.os_service_type,
'endpoint_type': args.os_endpoint_type,
'os_cacert': args.os_cacert,
'user_domain_id': args.os_user_domain_id,
'user_domain_name': args.os_user_domain_name,
'project_id': args.os_project_id,
'project_name': args.os_project_name,
'domain_id': args.os_domain_id,
@ -346,7 +356,7 @@ class MonascaShell(object):
"--os-project-id or via env[OS_PROJECT_ID], "
"or you must provide a project name using "
"--os-project-name or via env[OS_PROJECT_NAME] "
"and a domain using --os-domain-name, via "
"and a project domain using --os-domain-name, via "
"env[OS_DOMAIN_NAME], using --os-domain-id or "
"via env[OS_DOMAIN_ID]")
@ -364,6 +374,10 @@ class MonascaShell(object):
'auth_url': args.os_auth_url
}
if args.os_user_domain_name:
kwargs['user_domain_name'] = args.os_user_domain_name
if args.os_user_domain_id:
kwargs['user_domain_id'] = args.os_user_domain_id
if args.os_region_name:
kwargs['region_name'] = args.os_region_name
if args.os_project_name:

View File

@ -31,7 +31,8 @@ from monascaclient.tests import fakes
class TestCase(testtools.TestCase):
def set_fake_env(self, fake_env):
client_env = ('OS_USERNAME', 'OS_PASSWORD', 'OS_PROJECT_ID',
client_env = ('OS_USERNAME', 'OS_PASSWORD', 'OS_USER_DOMAIN_ID',
'OS_USER_DOMAIN_NAME', 'OS_PROJECT_ID',
'OS_PROJECT_NAME', 'OS_AUTH_URL', 'OS_REGION_NAME',
'OS_AUTH_TOKEN', 'OS_NO_CLIENT_AUTH', 'OS_SERVICE_TYPE',
'OS_DOMAIN_NAME', 'OS_DOMAIN_ID',