summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorSteve Martinelli <stevemar@ca.ibm.com>2015-01-09 19:58:17 -0500
committerSteve Martinelli <stevemar@ca.ibm.com>2015-01-10 01:02:33 +0000
commitffb783215986318aded3eef0d97b603062f7c7ee (patch)
treee090679ffb9f98a25fc1ebceb932b657099106df /openstackclient
parentd2943d2592b2de98a59c44445c5cd2cc564740da (diff)
downloadpython-openstackclient-ffb783215986318aded3eef0d97b603062f7c7ee.tar.gz
Rework role list v2 for --user and --project
`os user role list` does the same as v3's `os role list`. We should rework v2's `role list` to basically call `os user role list` under the covers. Closes-Bug: #1409179 Change-Id: I9839f6be139d6a6a3f6bbf79957e218dd8e03fe3
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/identity/v2_0/role.py69
1 files changed, 67 insertions, 2 deletions
diff --git a/openstackclient/identity/v2_0/role.py b/openstackclient/identity/v2_0/role.py
index d03664e0..295de07e 100644
--- a/openstackclient/identity/v2_0/role.py
+++ b/openstackclient/identity/v2_0/role.py
@@ -146,10 +146,75 @@ class ListRole(lister.Lister):
log = logging.getLogger(__name__ + '.ListRole')
+ def get_parser(self, prog_name):
+ parser = super(ListRole, self).get_parser(prog_name)
+ parser.add_argument(
+ '--project',
+ metavar='<project>',
+ help='Filter roles by <project> (name or ID)',
+ )
+ parser.add_argument(
+ '--user',
+ metavar='<user>',
+ help='Filter roles by <user> (name or ID)',
+ )
+ 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()
+ identity_client = self.app.client_manager.identity
+ auth_ref = self.app.client_manager.auth_ref
+
+ # No user or project specified, list all roles in the system
+ if not parsed_args.user and not parsed_args.project:
+ columns = ('ID', 'Name')
+ data = identity_client.roles.list()
+ elif parsed_args.user and parsed_args.project:
+ user = utils.find_resource(
+ identity_client.users,
+ parsed_args.user,
+ )
+ project = utils.find_resource(
+ identity_client.projects,
+ parsed_args.project,
+ )
+ data = identity_client.roles.roles_for_user(user.id, project.id)
+
+ elif parsed_args.user:
+ user = utils.find_resource(
+ identity_client.users,
+ parsed_args.user,
+ )
+ if self.app.client_manager.auth_ref:
+ project = utils.find_resource(
+ identity_client.projects,
+ auth_ref.project_id
+ )
+ else:
+ msg = _("Project must be specified")
+ raise exceptions.CommandError(msg)
+ data = identity_client.roles.roles_for_user(user.id, project.id)
+ elif parsed_args.project:
+ project = utils.find_resource(
+ identity_client.projects,
+ parsed_args.project,
+ )
+ if self.app.client_manager.auth_ref:
+ user = utils.find_resource(
+ identity_client.users,
+ auth_ref.user_id
+ )
+ else:
+ msg = _("User must be specified")
+ raise exceptions.CommandError(msg)
+ data = identity_client.roles.roles_for_user(user.id, project.id)
+
+ if parsed_args.user or parsed_args.project:
+ columns = ('ID', 'Name', 'Project', 'User')
+ for user_role in data:
+ user_role.user = user.name
+ user_role.project = project.name
+
return (columns,
(utils.get_item_properties(
s, columns,