From cdd8dc7a6020ee4c851e88dcc1201be0aa45a70b Mon Sep 17 00:00:00 2001 From: Terry Howe Date: Fri, 29 Aug 2014 13:10:37 -0600 Subject: [PATCH] Add domains for v3 authentication I was having trouble authenticating with devstack identity v3 without domain. These options make it possible. Change-Id: I2a968a89136e72898dc086b8f5330608c31ec66f --- examples/authenticate.py | 3 +++ examples/common.py | 21 +++++++++++++++++++ examples/session.py | 3 +++ openstack/auth/identity/authenticator.py | 12 ++++++++++- openstack/session.py | 8 +++++-- .../tests/auth/identity/test_authenticator.py | 6 ++++++ 6 files changed, 50 insertions(+), 3 deletions(-) diff --git a/examples/authenticate.py b/examples/authenticate.py index 314d7737..68d8e87c 100644 --- a/examples/authenticate.py +++ b/examples/authenticate.py @@ -54,6 +54,9 @@ def make_authenticate(opts): auth_url=opts.os_auth_url, version=opts.os_identity_api_version, project_name=opts.os_project_name, + domain_name=opts.os_domain_name, + project_domain_name=opts.os_project_domain_name, + user_domain_name=opts.os_user_domain_name, ) diff --git a/examples/common.py b/examples/common.py index d168b5fd..feaac89e 100755 --- a/examples/common.py +++ b/examples/common.py @@ -129,6 +129,27 @@ def option_parser(): help='Project name of the requested project-level' 'authorization scope (Env: OS_PROJECT_NAME)', ) + parser.add_argument( + '--os-domain-name', + metavar='', + default=env('OS_DOMAIN_NAME'), + help='Domain name for scope of ' + 'authorization (Env: OS_DOMAIN_NAME)', + ) + parser.add_argument( + '--os-project-domain-name', + metavar='', + default=env('OS_PROJECT_DOMAIN_NAME'), + help='Project domain name for scope of ' + 'authorization (Env: OS_PROJECT_DOMAIN_NAME)', + ) + parser.add_argument( + '--os-user-domain-name', + metavar='', + default=env('OS_USER_DOMAIN_NAME'), + help='User domain name for scope of ' + 'authorization (Env: OS_USER_DOMAIN_NAME)', + ) parser.add_argument( '--os-username', metavar='', diff --git a/examples/session.py b/examples/session.py index 81213214..21d78c2f 100644 --- a/examples/session.py +++ b/examples/session.py @@ -35,6 +35,9 @@ def make_session(opts): auth_url=opts.os_auth_url, version=opts.os_identity_api_version, project_name=opts.os_project_name, + domain_name=opts.os_domain_name, + project_domain_name=opts.os_project_domain_name, + user_domain_name=opts.os_user_domain_name, cacert=opts.os_cacert, insecure=opts.insecure, user_agent='SDKExample', diff --git a/openstack/auth/identity/authenticator.py b/openstack/auth/identity/authenticator.py index 00535782..df683598 100644 --- a/openstack/auth/identity/authenticator.py +++ b/openstack/auth/identity/authenticator.py @@ -16,7 +16,8 @@ from openstack import exceptions def create(username=None, password=None, token=None, auth_url=None, - version='3', project_name=None): + version='3', project_name=None, domain_name=None, + project_domain_name=None, user_domain_name=None): """Temporary code for creating an authenticator This is temporary code to create an authenticator. This code will be @@ -28,6 +29,9 @@ def create(username=None, password=None, token=None, auth_url=None, :param string auth_url: The URL to use for authentication. :param string version: Version of authentication to use. :param string project_name: Project name to athenticate. + :param string domain_name: Domain name to athenticate. + :param string project_domain_name: Project domain name to athenticate. + :param string user_domain_name: User domain name to athenticate. :returns string: An authenticator. """ @@ -38,6 +42,12 @@ def create(username=None, password=None, token=None, auth_url=None, args = {'username': username, 'password': password} if project_name: args['project_name'] = project_name + if domain_name: + args['domain_name'] = domain_name + if project_domain_name: + args['project_domain_name'] = project_domain_name + if user_domain_name: + args['user_domain_name'] = user_domain_name return v3.Password(auth_url, **args) else: return v3.Token(auth_url, token=token) diff --git a/openstack/session.py b/openstack/session.py index f99f94b9..72ef48eb 100644 --- a/openstack/session.py +++ b/openstack/session.py @@ -41,7 +41,8 @@ class Session(object): @classmethod def create(cls, username=None, password=None, token=None, auth_url=None, version=None, project_name=None, cacert=None, insecure=False, - user_agent=None, region=None): + user_agent=None, region=None, domain_name=None, + project_domain_name=None, user_domain_name=None): xport = transport.Transport.create( cacert=cacert, insecure=insecure, @@ -52,7 +53,10 @@ class Session(object): 'password': password, 'token': token, 'auth_url': auth_url, - 'project_name': project_name + 'project_name': project_name, + 'domain_name': domain_name, + 'project_domain_name': project_domain_name, + 'user_domain_name': user_domain_name, } if version: args['version'] = version diff --git a/openstack/tests/auth/identity/test_authenticator.py b/openstack/tests/auth/identity/test_authenticator.py index 86fc4060..b046bb02 100644 --- a/openstack/tests/auth/identity/test_authenticator.py +++ b/openstack/tests/auth/identity/test_authenticator.py @@ -24,11 +24,17 @@ class TestAuthenticatorCreate(base.TestCase): auth_url='4', version='3', project_name='6', + domain_name='7', + project_domain_name='8', + user_domain_name='9', ) self.assertEqual('1', auth.auth_methods[0].username) self.assertEqual('2', auth.auth_methods[0].password) self.assertEqual('4', auth.auth_url) self.assertEqual('6', auth.project_name) + self.assertEqual('7', auth.domain_name) + self.assertEqual('8', auth.project_domain_name) + self.assertEqual('9', auth.auth_methods[0].user_domain_name) def test_create_3_token(self): auth = authenticator.create(