Skip to content

Commit 420b10e

Browse files
pabelangertownbull
authored andcommitted
Add support for specifying custom domains
Add the ability to pass user_domain_id / user_domain_name, domain_id / domain_name, and project_domain_id / project_domain_name to keystone. These parameters are the first step needed to getting multi-domain support working via the CLI. Closes-Bug: #1198171 Change-Id: I81a8534913978ff1cce01ec02741ae477e8c5fa4 Signed-off-by: Paul Belanger <paul.belanger@polybeacon.com> Signed-off-by: Bo Tang <btang@cs.utsa.edu>
1 parent facdc87 commit 420b10e

4 files changed

Lines changed: 254 additions & 13 deletions

File tree

‎openstackclient/common/clientmanager.py‎

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,26 @@ class ClientManager(object):
4242
"""Manages access to API clients, including authentication."""
4343
identity = ClientCache(identity_client.make_client)
4444

45-
def __init__(self, token=None, url=None, auth_url=None, project_name=None,
46-
project_id=None, username=None, password=None,
47-
region_name=None, verify=True, api_version=None):
45+
def __init__(self, token=None, url=None, auth_url=None,
46+
domain_id=None, domain_name=None,
47+
project_name=None, project_id=None,
48+
username=None, password=None,
49+
user_domain_id=None, user_domain_name=None,
50+
project_domain_id=None, project_domain_name=None,
51+
region_name=None, api_version=None, verify=True):
4852
self._token = token
4953
self._url = url
5054
self._auth_url = auth_url
55+
self._domain_id = domain_id
56+
self._domain_name = domain_name
5157
self._project_name = project_name
5258
self._project_id = project_id
5359
self._username = username
5460
self._password = password
61+
self._user_domain_id = user_domain_id
62+
self._user_domain_name = user_domain_name
63+
self._project_domain_id = project_domain_id
64+
self._project_domain_name = project_domain_name
5565
self._region_name = region_name
5666
self._api_version = api_version
5767
self._service_catalog = None

‎openstackclient/identity/client.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ def make_client(instance):
4646
client = identity_client(
4747
username=instance._username,
4848
password=instance._password,
49+
user_domain_id=instance._user_domain_id,
50+
user_domain_name=instance._user_domain_name,
51+
project_domain_id=instance._project_domain_id,
52+
project_domain_name=instance._project_domain_name,
53+
domain_id=instance._domain_id,
54+
domain_name=instance._domain_name,
4955
tenant_name=instance._project_name,
5056
tenant_id=instance._project_id,
5157
auth_url=instance._auth_url,

‎openstackclient/shell.py‎

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,26 @@ def build_option_parser(self, description, version):
143143
metavar='<auth-url>',
144144
default=env('OS_AUTH_URL'),
145145
help='Authentication URL (Env: OS_AUTH_URL)')
146+
parser.add_argument(
147+
'--os-domain-name',
148+
metavar='<auth-domain-name>',
149+
default=env('OS_DOMAIN_NAME'),
150+
help='Domain name of the requested domain-level'
151+
'authorization scope (Env: OS_DOMAIN_NAME)',
152+
)
153+
parser.add_argument(
154+
'--os-domain-id',
155+
metavar='<auth-domain-id>',
156+
default=env('OS_DOMAIN_ID'),
157+
help='Domain ID of the requested domain-level'
158+
'authorization scope (Env: OS_DOMAIN_ID)',
159+
)
146160
parser.add_argument(
147161
'--os-project-name',
148162
metavar='<auth-project-name>',
149163
default=env('OS_PROJECT_NAME', default=env('OS_TENANT_NAME')),
150-
help='Authentication project name (Env: OS_PROJECT_NAME)',
164+
help='Project name of the requested project-level'
165+
'authorization scope (Env: OS_PROJECT_NAME)',
151166
)
152167
parser.add_argument(
153168
'--os-tenant-name',
@@ -159,7 +174,8 @@ def build_option_parser(self, description, version):
159174
'--os-project-id',
160175
metavar='<auth-project-id>',
161176
default=env('OS_PROJECT_ID', default=env('OS_TENANT_ID')),
162-
help='Authentication project ID (Env: OS_PROJECT_ID)',
177+
help='Project ID of the requested project-level'
178+
'authorization scope (Env: OS_PROJECT_ID)',
163179
)
164180
parser.add_argument(
165181
'--os-tenant-id',
@@ -177,6 +193,30 @@ def build_option_parser(self, description, version):
177193
metavar='<auth-password>',
178194
default=utils.env('OS_PASSWORD'),
179195
help='Authentication password (Env: OS_PASSWORD)')
196+
parser.add_argument(
197+
'--os-user-domain-name',
198+
metavar='<auth-user-domain-name>',
199+
default=utils.env('OS_USER_DOMAIN_NAME'),
200+
help='Domain name of the user (Env: OS_USER_DOMAIN_NAME)')
201+
parser.add_argument(
202+
'--os-user-domain-id',
203+
metavar='<auth-user-domain-id>',
204+
default=utils.env('OS_USER_DOMAIN_ID'),
205+
help='Domain ID of the user (Env: OS_USER_DOMAIN_ID)')
206+
parser.add_argument(
207+
'--os-project-domain-name',
208+
metavar='<auth-project-domain-name>',
209+
default=utils.env('OS_PROJECT_DOMAIN_NAME'),
210+
help='Domain name of the project which is the requested '
211+
'project-level authorization scope '
212+
'(Env: OS_PROJECT_DOMAIN_NAME)')
213+
parser.add_argument(
214+
'--os-project-domain-id',
215+
metavar='<auth-project-domain-id>',
216+
default=utils.env('OS_PROJECT_DOMAIN_ID'),
217+
help='Domain ID of the project which is the requested '
218+
'project-level authorization scope '
219+
'(Env: OS_PROJECT_DOMAIN_ID)')
180220
parser.add_argument(
181221
'--os-region-name',
182222
metavar='<auth-region-name>',
@@ -284,11 +324,16 @@ def authenticate_user(self):
284324
" either --os-password, or env[OS_PASSWORD], "
285325
" or prompted response")
286326

287-
if not (self.options.os_project_id
288-
or self.options.os_project_name):
327+
if not ((self.options.os_project_id
328+
or self.options.os_project_name) or
329+
(self.options.os_domain_id
330+
or self.options.os_domain_name)):
289331
raise exc.CommandError(
290-
"You must provide a project id via"
291-
" either --os-project-id or via env[OS_PROJECT_ID]")
332+
"You must provide authentication scope as a project "
333+
"or a domain via --os-project-id or env[OS_PROJECT_ID], "
334+
"--os-project-name or env[OS_PROJECT_NAME], "
335+
"--os-domain-id or env[OS_DOMAIN_ID], or"
336+
"--os-domain-name or env[OS_DOMAIN_NAME].")
292337

293338
if not self.options.os_auth_url:
294339
raise exc.CommandError(
@@ -299,8 +344,14 @@ def authenticate_user(self):
299344
token=self.options.os_token,
300345
url=self.options.os_url,
301346
auth_url=self.options.os_auth_url,
347+
domain_id=self.options.os_domain_id,
348+
domain_name=self.options.os_domain_name,
302349
project_name=self.options.os_project_name,
303350
project_id=self.options.os_project_id,
351+
user_domain_id=self.options.os_user_domain_id,
352+
user_domain_name=self.options.os_user_domain_name,
353+
project_domain_id=self.options.os_project_domain_id,
354+
project_domain_name=self.options.os_project_domain_name,
304355
username=self.options.os_username,
305356
password=self.options.os_password,
306357
region_name=self.options.os_region_name,

0 commit comments

Comments
 (0)