diff options
| author | Jenkins <jenkins@review.openstack.org> | 2015-01-13 22:35:21 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2015-01-13 22:35:21 +0000 |
| commit | 4a8a2fb27d9f4f4142b019be75e48e872b72b116 (patch) | |
| tree | fc06dabac61f970755f436820268aa1ffff5b3f9 /openstackclient | |
| parent | a43d6f02c5c74b1b69990e9e10f1221a0d16f23a (diff) | |
| parent | ffb783215986318aded3eef0d97b603062f7c7ee (diff) | |
| download | python-openstackclient-4a8a2fb27d9f4f4142b019be75e48e872b72b116.tar.gz | |
Merge "Rework role list v2 for --user and --project"
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/identity/v2_0/role.py | 69 |
1 files changed, 67 insertions, 2 deletions
diff --git a/openstackclient/identity/v2_0/role.py b/openstackclient/identity/v2_0/role.py index f5f901ee..3167f50f 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, |
