summaryrefslogtreecommitdiff
path: root/openstackclient/identity
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-06-19 17:14:03 +0000
committerGerrit Code Review <review@openstack.org>2014-06-19 17:14:03 +0000
commitc6cc1d72d50404b5921b9d451afcb513ad98ff9a (patch)
treed2f36f45ae932b584a88c019b13c6eb1c1ffa1bb /openstackclient/identity
parent0a491b2ac82553d5bec10e782c582fca3a88c148 (diff)
parentf78a3f1653c634e40071fb96750b9ca64865c058 (diff)
downloadpython-openstackclient-c6cc1d72d50404b5921b9d451afcb513ad98ff9a.tar.gz
Merge "Refactor role list subcommand for identity v3 api"
Diffstat (limited to 'openstackclient/identity')
-rw-r--r--openstackclient/identity/v3/group.py80
-rw-r--r--openstackclient/identity/v3/role.py106
-rw-r--r--openstackclient/identity/v3/user.py87
3 files changed, 115 insertions, 158 deletions
diff --git a/openstackclient/identity/v3/group.py b/openstackclient/identity/v3/group.py
index f51129c9..c5a44017 100644
--- a/openstackclient/identity/v3/group.py
+++ b/openstackclient/identity/v3/group.py
@@ -177,23 +177,6 @@ class ListGroup(lister.Lister):
help='Name or ID of group to list [required with --role]',
)
parser.add_argument(
- '--role',
- action='store_true',
- default=False,
- help='List the roles assigned to <group>',
- )
- domain_or_project = parser.add_mutually_exclusive_group()
- domain_or_project.add_argument(
- '--domain',
- metavar='<domain>',
- help='Filter list by <domain> [Only valid with --role]',
- )
- domain_or_project.add_argument(
- '--project',
- metavar='<project>',
- help='Filter list by <project> [Only valid with --role]',
- )
- parser.add_argument(
'--long',
action='store_true',
default=False,
@@ -205,65 +188,12 @@ class ListGroup(lister.Lister):
self.log.debug('take_action(%s)', parsed_args)
identity_client = self.app.client_manager.identity
- if parsed_args.role:
- # List roles belonging to group
-
- # Group is required here, bail if it is not supplied
- if not parsed_args.group:
- sys.stderr.write('Error: Group must be specified')
- # TODO(dtroyer): This lists the commands...I want it to
- # show the help for _this_ command.
- self.app.DeferredHelpAction(
- self.app.parser,
- self.app.parser,
- None,
- None,
- )
- return ([], [])
-
- group = utils.find_resource(
- identity_client.groups,
- parsed_args.group,
- )
-
- if parsed_args.domain:
- columns = ('ID', 'Name', 'Domain', 'Group')
- domain = utils.find_resource(
- identity_client.domains,
- parsed_args.domain,
- )
- data = identity_client.roles.list(
- group=group,
- domain=domain,
- )
- for group_role in data:
- group_role.group = group.name
- group_role.domain = domain.name
- elif parsed_args.project:
- columns = ('ID', 'Name', 'Project', 'Group')
- project = utils.find_resource(
- identity_client.projects,
- parsed_args.project,
- )
- data = identity_client.roles.list(
- group=group,
- project=project,
- )
- for group_role in data:
- group_role.group = group.name
- group_role.project = project.name
- else:
- # TODO(dtroyer): raise exception here, this really is an error
- sys.stderr.write("Error: Must specify --domain or --project "
- "with --role\n")
- return ([], [])
+ # List groups
+ if parsed_args.long:
+ columns = ('ID', 'Name', 'Domain ID', 'Description')
else:
- # List groups
- if parsed_args.long:
- columns = ('ID', 'Name', 'Domain ID', 'Description')
- else:
- columns = ('ID', 'Name')
- data = identity_client.groups.list()
+ columns = ('ID', 'Name')
+ data = identity_client.groups.list()
return (columns,
(utils.get_item_properties(
diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py
index 69c0aa6a..2aabc00c 100644
--- a/openstackclient/identity/v3/role.py
+++ b/openstackclient/identity/v3/role.py
@@ -192,10 +192,110 @@ class ListRole(lister.Lister):
log = logging.getLogger(__name__ + '.ListRole')
+ def get_parser(self, prog_name):
+ parser = super(ListRole, self).get_parser(prog_name)
+ domain_or_project = parser.add_mutually_exclusive_group()
+ domain_or_project.add_argument(
+ '--domain',
+ metavar='<domain>',
+ help='Filter role list by <domain>',
+ )
+ domain_or_project.add_argument(
+ '--project',
+ metavar='<project>',
+ help='Filter role list by <project>',
+ )
+ user_or_group = parser.add_mutually_exclusive_group()
+ user_or_group.add_argument(
+ '--user',
+ metavar='<user>',
+ help='Name or ID of user to list roles asssigned to',
+ )
+ user_or_group.add_argument(
+ '--group',
+ metavar='<group>',
+ help='Name or ID of group to list roles asssigned to',
+ )
+ return parser
+
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)', parsed_args)
- columns = ('ID', 'Name')
- data = self.app.client_manager.identity.roles.list()
+ self.log.debug('take_action(%s)' % parsed_args)
+ identity_client = self.app.client_manager.identity
+
+ if parsed_args.user:
+ user = utils.find_resource(
+ identity_client.users,
+ parsed_args.user,
+ )
+ elif parsed_args.group:
+ group = utils.find_resource(
+ identity_client.groups,
+ parsed_args.group,
+ )
+
+ if parsed_args.domain:
+ domain = utils.find_resource(
+ identity_client.domains,
+ parsed_args.domain,
+ )
+ elif parsed_args.project:
+ project = utils.find_resource(
+ identity_client.projects,
+ parsed_args.project,
+ )
+
+ # no user or group specified, list all roles in the system
+ if not parsed_args.user and not parsed_args.group:
+ columns = ('ID', 'Name')
+ data = identity_client.roles.list()
+ elif parsed_args.user and parsed_args.domain:
+ columns = ('ID', 'Name', 'Domain', 'User')
+ data = identity_client.roles.list(
+ user=user,
+ domain=domain,
+ )
+ for user_role in data:
+ user_role.user = user.name
+ user_role.domain = domain.name
+ elif parsed_args.user and parsed_args.project:
+ columns = ('ID', 'Name', 'Project', 'User')
+ data = identity_client.roles.list(
+ user=user,
+ project=project,
+ )
+ for user_role in data:
+ user_role.user = user.name
+ user_role.project = project.name
+ elif parsed_args.user:
+ columns = ('ID', 'Name')
+ data = identity_client.roles.list(
+ user=user,
+ domain='default',
+ )
+ elif parsed_args.group and parsed_args.domain:
+ columns = ('ID', 'Name', 'Domain', 'Group')
+ data = identity_client.roles.list(
+ group=group,
+ domain=domain,
+ )
+ for group_role in data:
+ group_role.group = group.name
+ group_role.domain = domain.name
+ elif parsed_args.group and parsed_args.project:
+ columns = ('ID', 'Name', 'Project', 'Group')
+ data = identity_client.roles.list(
+ group=group,
+ project=project,
+ )
+ for group_role in data:
+ group_role.group = group.name
+ group_role.project = project.name
+ else:
+ sys.stderr.write("Error: If a user or group is specified, either "
+ "--domain or --project must also be specified to "
+ "list role grants.\n")
+ return ([], [])
+
return (columns,
(utils.get_item_properties(
s, columns,
diff --git a/openstackclient/identity/v3/user.py b/openstackclient/identity/v3/user.py
index e628e884..c4adb225 100644
--- a/openstackclient/identity/v3/user.py
+++ b/openstackclient/identity/v3/user.py
@@ -17,7 +17,6 @@
import logging
import six
-import sys
from cliff import command
from cliff import lister
@@ -162,23 +161,6 @@ class ListUser(lister.Lister):
help='Name or ID of user to list [required with --role]',
)
parser.add_argument(
- '--role',
- action='store_true',
- default=False,
- help='List the roles assigned to <user>',
- )
- domain_or_project = parser.add_mutually_exclusive_group()
- domain_or_project.add_argument(
- '--domain',
- metavar='<domain>',
- help='Filter list by <domain> [Only valid with --role]',
- )
- domain_or_project.add_argument(
- '--project',
- metavar='<project>',
- help='Filter list by <project> [Only valid with --role]',
- )
- parser.add_argument(
'--long',
action='store_true',
default=False,
@@ -187,70 +169,15 @@ class ListUser(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)', parsed_args)
- identity_client = self.app.client_manager.identity
+ self.log.debug('take_action(%s)' % parsed_args)
- if parsed_args.role:
- # List roles belonging to user
-
- # User is required here, bail if it is not supplied
- if not parsed_args.user:
- sys.stderr.write('Error: User must be specified')
- return ([], [])
-
- user = utils.find_resource(
- identity_client.users,
- parsed_args.user,
- )
-
- # List a user's roles
- if not parsed_args.domain and not parsed_args.project:
- columns = ('ID', 'Name')
- data = identity_client.roles.list(
- user=user,
- domain='default',
- )
- # List a user's roles on a domain
- elif parsed_args.user and parsed_args.domain:
- columns = ('ID', 'Name', 'Domain', 'User')
- domain = utils.find_resource(
- identity_client.domains,
- parsed_args.domain,
- )
- data = identity_client.roles.list(
- user=user,
- domain=domain,
- )
- for user_role in data:
- user_role.user = user.name
- user_role.domain = domain.name
- # List a user's roles on a project
- elif parsed_args.user and parsed_args.project:
- columns = ('ID', 'Name', 'Project', 'User')
- project = utils.find_resource(
- identity_client.projects,
- parsed_args.project,
- )
- data = identity_client.roles.list(
- user=user,
- project=project,
- )
- for user_role in data:
- user_role.user = user.name
- user_role.project = project.name
- else:
- # TODO(dtroyer): raise exception here, this really is an error
- sys.stderr.write("Error: Must specify --domain or --project "
- "with --role\n")
- return ([], [])
+ # List users
+ if parsed_args.long:
+ columns = ('ID', 'Name', 'Project Id', 'Domain Id',
+ 'Description', 'Email', 'Enabled')
else:
- # List users
- if parsed_args.long:
- columns = ('ID', 'Name', 'Project Id', 'Domain Id',
- 'Description', 'Email', 'Enabled')
- else:
- columns = ('ID', 'Name')
- data = self.app.client_manager.identity.users.list()
+ columns = ('ID', 'Name')
+ data = self.app.client_manager.identity.users.list()
return (columns,
(utils.get_item_properties(