Skip to content

Commit 364071a

Browse files
author
Steve Martinelli
committed
Add domain parameters to user show for Identity V3
Update `user show` for Identity V3 to account for a domain argument, in doing so, also update `find resource` to be more flexible by allowing **kwargs. Also update `group show` and `project show` since they follow the same logic as a user within a group. Change-Id: Ib828e4dbeb0bd31164396069ce8a64c873179779 Closes-Bug: #1378165
1 parent 0c77a9f commit 364071a

4 files changed

Lines changed: 75 additions & 21 deletions

File tree

‎openstackclient/common/utils.py‎

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,27 @@
2626
from openstackclient.common import exceptions
2727

2828

29-
def find_resource(manager, name_or_id):
30-
"""Helper for the _find_* methods."""
29+
def find_resource(manager, name_or_id, **kwargs):
30+
"""Helper for the _find_* methods.
31+
32+
:param manager: A client manager class
33+
:param name_or_id: The resource we are trying to find
34+
:param kwargs: To be used in calling .find()
35+
:rtype: The found resource
36+
37+
This method will attempt to find a resource in a variety of ways.
38+
Primarily .get() methods will be called with `name_or_id` as an integer
39+
value, and tried again as a string value.
40+
41+
If both fail, then a .find() is attempted, which is essentially calling
42+
a .list() function with a 'name' query parameter that is set to
43+
`name_or_id`.
44+
45+
Lastly, if any kwargs are passed in, they will be treated as additional
46+
query parameters. This is particularly handy in the case of finding
47+
resources in a domain.
48+
49+
"""
3150

3251
# Try to get entity as integer id
3352
try:
@@ -49,7 +68,10 @@ def find_resource(manager, name_or_id):
4968
except Exception:
5069
pass
5170

52-
kwargs = {}
71+
if len(kwargs) == 0:
72+
kwargs = {}
73+
74+
# Prepare the kwargs for calling find
5375
if 'NAME_ATTR' in manager.resource_class.__dict__:
5476
# novaclient does this for oddball resources
5577
kwargs[manager.resource_class.NAME_ATTR] = name_or_id

‎openstackclient/identity/v3/group.py‎

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from cliff import show
2525

2626
from openstackclient.common import utils
27+
from openstackclient.identity import common
2728

2829

2930
class AddUserToGroup(command.Command):
@@ -321,14 +322,26 @@ def get_parser(self, prog_name):
321322
parser.add_argument(
322323
'group',
323324
metavar='<group>',
324-
help='Name or ID of group to display')
325+
help='Name or ID of group to display',
326+
)
327+
parser.add_argument(
328+
'--domain',
329+
metavar='<domain>',
330+
help='Domain where group resides (name or ID)',
331+
)
325332
return parser
326333

327334
def take_action(self, parsed_args):
328335
self.log.debug('take_action(%s)', parsed_args)
329336
identity_client = self.app.client_manager.identity
330-
group = utils.find_resource(identity_client.groups, parsed_args.group)
331337

332-
info = {}
333-
info.update(group._info)
334-
return zip(*sorted(six.iteritems(info)))
338+
if parsed_args.domain:
339+
domain = common.find_domain(identity_client, parsed_args.domain)
340+
group = utils.find_resource(identity_client.groups,
341+
parsed_args.group,
342+
domain_id=domain.id)
343+
else:
344+
group = utils.find_resource(identity_client.groups,
345+
parsed_args.group)
346+
347+
return zip(*sorted(six.iteritems(group._info)))

‎openstackclient/identity/v3/project.py‎

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -264,15 +264,26 @@ def get_parser(self, prog_name):
264264
parser.add_argument(
265265
'project',
266266
metavar='<project>',
267-
help='Name or ID of project to display')
267+
help='Name or ID of project to display',
268+
)
269+
parser.add_argument(
270+
'--domain',
271+
metavar='<domain>',
272+
help='Domain where project resides (name or ID)',
273+
)
268274
return parser
269275

270276
def take_action(self, parsed_args):
271277
self.log.debug('take_action(%s)', parsed_args)
272278
identity_client = self.app.client_manager.identity
273-
project = utils.find_resource(identity_client.projects,
274-
parsed_args.project)
275279

276-
info = {}
277-
info.update(project._info)
278-
return zip(*sorted(six.iteritems(info)))
280+
if parsed_args.domain:
281+
domain = common.find_domain(identity_client, parsed_args.domain)
282+
project = utils.find_resource(identity_client.projects,
283+
parsed_args.project,
284+
domain_id=domain.id)
285+
else:
286+
project = utils.find_resource(identity_client.projects,
287+
parsed_args.project)
288+
289+
return zip(*sorted(six.iteritems(project._info)))

‎openstackclient/identity/v3/user.py‎

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from cliff import show
2424

2525
from openstackclient.common import utils
26+
from openstackclient.identity import common
2627

2728

2829
class CreateUser(show.ShowOne):
@@ -364,17 +365,24 @@ def get_parser(self, prog_name):
364365
metavar='<user>',
365366
help='User to display (name or ID)',
366367
)
368+
parser.add_argument(
369+
'--domain',
370+
metavar='<domain>',
371+
help='Domain where user resides (name or ID)',
372+
)
367373
return parser
368374

369375
def take_action(self, parsed_args):
370376
self.log.debug('take_action(%s)', parsed_args)
371377
identity_client = self.app.client_manager.identity
372378

373-
user = utils.find_resource(
374-
identity_client.users,
375-
parsed_args.user,
376-
)
379+
if parsed_args.domain:
380+
domain = common.find_domain(identity_client, parsed_args.domain)
381+
user = utils.find_resource(identity_client.users,
382+
parsed_args.user,
383+
domain_id=domain.id)
384+
else:
385+
user = utils.find_resource(identity_client.users,
386+
parsed_args.user)
377387

378-
info = {}
379-
info.update(user._info)
380-
return zip(*sorted(six.iteritems(info)))
388+
return zip(*sorted(six.iteritems(user._info)))

0 commit comments

Comments
 (0)