From 1d75edb1678e42a36879245c6ebac69c14a5f965 Mon Sep 17 00:00:00 2001 From: Steve Martinelli Date: Mon, 17 Nov 2014 21:35:30 -0500 Subject: [PATCH] Default user domain id and project domain id If either of OS_USER_DOMAIN_ID or OS_USER_DOMAIN_NAME are present then we don't tinker with anything. Otherwise, we should set the USER_DOMAIN_ID to 'OS_DEFAULT_DOMAIN', as this provides a better UX, since the end user doesn't have to specify these arguments. Same logic applies for OS_PROJECT_DOMAIN_ID. Closes-Bug: #1385338 Change-Id: I8a4034c16a1dd50d269f809abab8e960d5de20f7 --- examples/common.py | 6 ++++++ openstackclient/common/clientmanager.py | 17 +++++++++++++++++ .../tests/common/test_clientmanager.py | 1 + 3 files changed, 24 insertions(+) diff --git a/examples/common.py b/examples/common.py index ad3a5e492e..1ccea2a070 100755 --- a/examples/common.py +++ b/examples/common.py @@ -102,6 +102,12 @@ def base_parser(parser): default=env('OS_CACERT'), help='CA certificate bundle file (Env: OS_CACERT)', ) + parser.add_argument( + '--os-default-domain', + metavar='', + default='default', + help='Default domain ID, default=default (Env: OS_DEFAULT_DOMAIN)', + ) verify_group = parser.add_mutually_exclusive_group() verify_group.add_argument( '--verify', diff --git a/openstackclient/common/clientmanager.py b/openstackclient/common/clientmanager.py index 0396e83dd2..2a138d944b 100644 --- a/openstackclient/common/clientmanager.py +++ b/openstackclient/common/clientmanager.py @@ -98,6 +98,23 @@ class ClientManager(object): self._auth_ref = None self.timing = auth_options.timing + default_domain = auth_options.os_default_domain + # NOTE(stevemar): If PROJECT_DOMAIN_ID or PROJECT_DOMAIN_NAME is + # present, then do not change the behaviour. Otherwise, set the + # PROJECT_DOMAIN_ID to 'OS_DEFAULT_DOMAIN' for better usability. + if (self._api_version.get('identity') == '3' and + not self._auth_params.get('project_domain_id') and + not self._auth_params.get('project_domain_name')): + self._auth_params['project_domain_id'] = default_domain + + # NOTE(stevemar): If USER_DOMAIN_ID or USER_DOMAIN_NAME is present, + # then do not change the behaviour. Otherwise, set the USER_DOMAIN_ID + # to 'OS_DEFAULT_DOMAIN' for better usability. + if (self._api_version.get('identity') == '3' and + not self._auth_params.get('user_domain_id') and + not self._auth_params.get('user_domain_name')): + self._auth_params['user_domain_id'] = default_domain + # For compatibility until all clients can be updated if 'project_name' in self._auth_params: self._project_name = self._auth_params['project_name'] diff --git a/openstackclient/tests/common/test_clientmanager.py b/openstackclient/tests/common/test_clientmanager.py index 8c27e5621d..9e9964edac 100644 --- a/openstackclient/tests/common/test_clientmanager.py +++ b/openstackclient/tests/common/test_clientmanager.py @@ -49,6 +49,7 @@ class FakeOptions(object): self.timing = None self.os_region_name = None self.os_url = None + self.os_default_domain = 'default' self.__dict__.update(kwargs)