Skip to content

Commit f0c57e1

Browse files
committed
Allow --domain to be used for identity commands without lookup
Performing create, list, or set operations for users, groups, and projects with the --domain option attempts to look up the domain for name to ID conversion. In the case of an environment using Keystone domains, it is desired to allow a domain admin to perform these operations for objects in their domain without allowing them to list or show domains. The current behavior prevents the domain admin from performing these operations since they will be forbidden to perform the underlying list_domains operation. This patch makes the domain lookup error a soft failure, and falls back to using the passed in domain argument directly as a domain ID in the request that it sends to Keystone. Change-Id: I5139097f8cedc53693f6f71297518917ac72e50a Closes-Bug: #1378565
1 parent 364071a commit f0c57e1

3 files changed

Lines changed: 21 additions & 27 deletions

File tree

‎openstackclient/identity/v3/group.py‎

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ def take_action(self, parsed_args):
129129
self.log.debug('take_action(%s)', parsed_args)
130130
identity_client = self.app.client_manager.identity
131131
if parsed_args.domain:
132-
domain = utils.find_resource(identity_client.domains,
133-
parsed_args.domain).id
132+
domain = common.find_domain(identity_client,
133+
parsed_args.domain).id
134134
else:
135135
domain = None
136136
group = identity_client.groups.create(
@@ -174,7 +174,7 @@ def get_parser(self, prog_name):
174174
parser.add_argument(
175175
'--domain',
176176
metavar='<domain>',
177-
help='Filter group list by <domain>',
177+
help='Filter group list by <domain> (name or ID)',
178178
)
179179
parser.add_argument(
180180
'--user',
@@ -194,10 +194,8 @@ def take_action(self, parsed_args):
194194
identity_client = self.app.client_manager.identity
195195

196196
if parsed_args.domain:
197-
domain = utils.find_resource(
198-
identity_client.domains,
199-
parsed_args.domain,
200-
).id
197+
domain = common.find_domain(identity_client,
198+
parsed_args.domain).id
201199
else:
202200
domain = None
203201

@@ -301,10 +299,8 @@ def take_action(self, parsed_args):
301299
if parsed_args.description:
302300
kwargs['description'] = parsed_args.description
303301
if parsed_args.domain:
304-
domain = utils.find_resource(
305-
identity_client.domains, parsed_args.domain).id
306-
kwargs['domain'] = domain
307-
302+
kwargs['domain'] = common.find_domain(identity_client,
303+
parsed_args.domain).id
308304
if not len(kwargs):
309305
sys.stderr.write("Group not updated, no arguments present")
310306
return

‎openstackclient/identity/v3/project.py‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ def take_action(self, parsed_args):
7474
identity_client = self.app.client_manager.identity
7575

7676
if parsed_args.domain:
77-
domain = common.find_domain(identity_client, parsed_args.domain).id
77+
domain = common.find_domain(identity_client,
78+
parsed_args.domain).id
7879
else:
7980
domain = None
8081

@@ -141,7 +142,7 @@ def get_parser(self, prog_name):
141142
parser.add_argument(
142143
'--domain',
143144
metavar='<project-domain>',
144-
help='Filter by a specific domain',
145+
help='Filter by a specific domain (name or ID)',
145146
)
146147
return parser
147148

@@ -154,8 +155,8 @@ def take_action(self, parsed_args):
154155
columns = ('ID', 'Name')
155156
kwargs = {}
156157
if parsed_args.domain:
157-
domain = common.find_domain(identity_client, parsed_args.domain)
158-
kwargs['domain'] = domain.id
158+
kwargs['domain'] = common.find_domain(identity_client,
159+
parsed_args.domain).id
159160
data = identity_client.projects.list(**kwargs)
160161
return (columns,
161162
(utils.get_item_properties(
@@ -232,8 +233,8 @@ def take_action(self, parsed_args):
232233
if parsed_args.name:
233234
kwargs['name'] = parsed_args.name
234235
if parsed_args.domain:
235-
domain = common.find_domain(identity_client, parsed_args.domain)
236-
kwargs['domain'] = domain.id
236+
kwargs['domain'] = common.find_domain(identity_client,
237+
parsed_args.domain).id
237238
if parsed_args.description:
238239
kwargs['description'] = parsed_args.description
239240
if parsed_args.enable:

‎openstackclient/identity/v3/user.py‎

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ def take_action(self, parsed_args):
9595
project_id = None
9696

9797
if parsed_args.domain:
98-
domain_id = utils.find_resource(
99-
identity_client.domains, parsed_args.domain).id
98+
domain_id = common.find_domain(identity_client,
99+
parsed_args.domain).id
100100
else:
101101
domain_id = None
102102

@@ -158,7 +158,7 @@ def get_parser(self, prog_name):
158158
parser.add_argument(
159159
'--domain',
160160
metavar='<domain>',
161-
help='Filter group list by <domain>',
161+
help='Filter user list by <domain> (name or ID)',
162162
)
163163
parser.add_argument(
164164
'--group',
@@ -178,10 +178,8 @@ def take_action(self, parsed_args):
178178
identity_client = self.app.client_manager.identity
179179

180180
if parsed_args.domain:
181-
domain = utils.find_resource(
182-
identity_client.domains,
183-
parsed_args.domain,
184-
).id
181+
domain = common.find_domain(identity_client,
182+
parsed_args.domain).id
185183
else:
186184
domain = None
187185

@@ -311,9 +309,8 @@ def take_action(self, parsed_args):
311309
identity_client.projects, parsed_args.project).id
312310
kwargs['project'] = project_id
313311
if parsed_args.domain:
314-
domain_id = utils.find_resource(
315-
identity_client.domains, parsed_args.domain).id
316-
kwargs['domain'] = domain_id
312+
kwargs['domain'] = common.find_domain(identity_client,
313+
parsed_args.domain).id
317314
kwargs['enabled'] = user.enabled
318315
if parsed_args.enable:
319316
kwargs['enabled'] = True

0 commit comments

Comments
 (0)