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
This commit is contained in:
parent
0c77a9fe8b
commit
364071a90b
@ -26,8 +26,27 @@ from oslo.utils import importutils
|
|||||||
from openstackclient.common import exceptions
|
from openstackclient.common import exceptions
|
||||||
|
|
||||||
|
|
||||||
def find_resource(manager, name_or_id):
|
def find_resource(manager, name_or_id, **kwargs):
|
||||||
"""Helper for the _find_* methods."""
|
"""Helper for the _find_* methods.
|
||||||
|
|
||||||
|
:param manager: A client manager class
|
||||||
|
:param name_or_id: The resource we are trying to find
|
||||||
|
:param kwargs: To be used in calling .find()
|
||||||
|
:rtype: The found resource
|
||||||
|
|
||||||
|
This method will attempt to find a resource in a variety of ways.
|
||||||
|
Primarily .get() methods will be called with `name_or_id` as an integer
|
||||||
|
value, and tried again as a string value.
|
||||||
|
|
||||||
|
If both fail, then a .find() is attempted, which is essentially calling
|
||||||
|
a .list() function with a 'name' query parameter that is set to
|
||||||
|
`name_or_id`.
|
||||||
|
|
||||||
|
Lastly, if any kwargs are passed in, they will be treated as additional
|
||||||
|
query parameters. This is particularly handy in the case of finding
|
||||||
|
resources in a domain.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
# Try to get entity as integer id
|
# Try to get entity as integer id
|
||||||
try:
|
try:
|
||||||
@ -49,7 +68,10 @@ def find_resource(manager, name_or_id):
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
kwargs = {}
|
if len(kwargs) == 0:
|
||||||
|
kwargs = {}
|
||||||
|
|
||||||
|
# Prepare the kwargs for calling find
|
||||||
if 'NAME_ATTR' in manager.resource_class.__dict__:
|
if 'NAME_ATTR' in manager.resource_class.__dict__:
|
||||||
# novaclient does this for oddball resources
|
# novaclient does this for oddball resources
|
||||||
kwargs[manager.resource_class.NAME_ATTR] = name_or_id
|
kwargs[manager.resource_class.NAME_ATTR] = name_or_id
|
||||||
|
@ -24,6 +24,7 @@ from cliff import lister
|
|||||||
from cliff import show
|
from cliff import show
|
||||||
|
|
||||||
from openstackclient.common import utils
|
from openstackclient.common import utils
|
||||||
|
from openstackclient.identity import common
|
||||||
|
|
||||||
|
|
||||||
class AddUserToGroup(command.Command):
|
class AddUserToGroup(command.Command):
|
||||||
@ -321,14 +322,26 @@ class ShowGroup(show.ShowOne):
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'group',
|
'group',
|
||||||
metavar='<group>',
|
metavar='<group>',
|
||||||
help='Name or ID of group to display')
|
help='Name or ID of group to display',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--domain',
|
||||||
|
metavar='<domain>',
|
||||||
|
help='Domain where group resides (name or ID)',
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
self.log.debug('take_action(%s)', parsed_args)
|
self.log.debug('take_action(%s)', parsed_args)
|
||||||
identity_client = self.app.client_manager.identity
|
identity_client = self.app.client_manager.identity
|
||||||
group = utils.find_resource(identity_client.groups, parsed_args.group)
|
|
||||||
|
|
||||||
info = {}
|
if parsed_args.domain:
|
||||||
info.update(group._info)
|
domain = common.find_domain(identity_client, parsed_args.domain)
|
||||||
return zip(*sorted(six.iteritems(info)))
|
group = utils.find_resource(identity_client.groups,
|
||||||
|
parsed_args.group,
|
||||||
|
domain_id=domain.id)
|
||||||
|
else:
|
||||||
|
group = utils.find_resource(identity_client.groups,
|
||||||
|
parsed_args.group)
|
||||||
|
|
||||||
|
return zip(*sorted(six.iteritems(group._info)))
|
||||||
|
@ -264,15 +264,26 @@ class ShowProject(show.ShowOne):
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'project',
|
'project',
|
||||||
metavar='<project>',
|
metavar='<project>',
|
||||||
help='Name or ID of project to display')
|
help='Name or ID of project to display',
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--domain',
|
||||||
|
metavar='<domain>',
|
||||||
|
help='Domain where project resides (name or ID)',
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
self.log.debug('take_action(%s)', parsed_args)
|
self.log.debug('take_action(%s)', parsed_args)
|
||||||
identity_client = self.app.client_manager.identity
|
identity_client = self.app.client_manager.identity
|
||||||
project = utils.find_resource(identity_client.projects,
|
|
||||||
parsed_args.project)
|
|
||||||
|
|
||||||
info = {}
|
if parsed_args.domain:
|
||||||
info.update(project._info)
|
domain = common.find_domain(identity_client, parsed_args.domain)
|
||||||
return zip(*sorted(six.iteritems(info)))
|
project = utils.find_resource(identity_client.projects,
|
||||||
|
parsed_args.project,
|
||||||
|
domain_id=domain.id)
|
||||||
|
else:
|
||||||
|
project = utils.find_resource(identity_client.projects,
|
||||||
|
parsed_args.project)
|
||||||
|
|
||||||
|
return zip(*sorted(six.iteritems(project._info)))
|
||||||
|
@ -23,6 +23,7 @@ from cliff import lister
|
|||||||
from cliff import show
|
from cliff import show
|
||||||
|
|
||||||
from openstackclient.common import utils
|
from openstackclient.common import utils
|
||||||
|
from openstackclient.identity import common
|
||||||
|
|
||||||
|
|
||||||
class CreateUser(show.ShowOne):
|
class CreateUser(show.ShowOne):
|
||||||
@ -364,17 +365,24 @@ class ShowUser(show.ShowOne):
|
|||||||
metavar='<user>',
|
metavar='<user>',
|
||||||
help='User to display (name or ID)',
|
help='User to display (name or ID)',
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--domain',
|
||||||
|
metavar='<domain>',
|
||||||
|
help='Domain where user resides (name or ID)',
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
self.log.debug('take_action(%s)', parsed_args)
|
self.log.debug('take_action(%s)', parsed_args)
|
||||||
identity_client = self.app.client_manager.identity
|
identity_client = self.app.client_manager.identity
|
||||||
|
|
||||||
user = utils.find_resource(
|
if parsed_args.domain:
|
||||||
identity_client.users,
|
domain = common.find_domain(identity_client, parsed_args.domain)
|
||||||
parsed_args.user,
|
user = utils.find_resource(identity_client.users,
|
||||||
)
|
parsed_args.user,
|
||||||
|
domain_id=domain.id)
|
||||||
|
else:
|
||||||
|
user = utils.find_resource(identity_client.users,
|
||||||
|
parsed_args.user)
|
||||||
|
|
||||||
info = {}
|
return zip(*sorted(six.iteritems(user._info)))
|
||||||
info.update(user._info)
|
|
||||||
return zip(*sorted(six.iteritems(info)))
|
|
||||||
|
Loading…
Reference in New Issue
Block a user