diff options
| author | Jenkins <jenkins@review.openstack.org> | 2015-01-08 23:07:12 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2015-01-08 23:07:12 +0000 |
| commit | f38d6e7aeec080f26366c3c7a006a23c53f339bf (patch) | |
| tree | fe505a11e1e430669d7426b7424cbc52e00a7120 /openstackclient/identity | |
| parent | b7a130ff4417040afa97a5d73270b531ea603e63 (diff) | |
| parent | 0ff28d5251f9e25eafdc628e29b093b7c694ea48 (diff) | |
| download | python-openstackclient-f38d6e7aeec080f26366c3c7a006a23c53f339bf.tar.gz | |
Merge "Allow user list to filter by project"
Diffstat (limited to 'openstackclient/identity')
| -rw-r--r-- | openstackclient/identity/v3/user.py | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/openstackclient/identity/v3/user.py b/openstackclient/identity/v3/user.py index a60c8c83..4fb7b6d1 100644 --- a/openstackclient/identity/v3/user.py +++ b/openstackclient/identity/v3/user.py @@ -188,11 +188,17 @@ class ListUser(lister.Lister): metavar='<domain>', help='Filter users by <domain> (name or ID)', ) - parser.add_argument( + project_or_group = parser.add_mutually_exclusive_group() + project_or_group.add_argument( '--group', metavar='<group>', help='Filter users by <group> membership (name or ID)', ) + project_or_group.add_argument( + '--project', + metavar='<project>', + help='Filter users by <project> (name or ID)', + ) parser.add_argument( '--long', action='store_true', @@ -219,7 +225,44 @@ class ListUser(lister.Lister): else: group = None - # List users + if parsed_args.project: + if domain is not None: + 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, + ).id + + assignments = identity_client.role_assignments.list( + project=project) + + # NOTE(stevemar): If a user has more than one role on a project + # then they will have two entries in the returned data. Since we + # are looking for any role, let's just track unique user IDs. + user_ids = set() + for assignment in assignments: + if hasattr(assignment, 'user'): + user_ids.add(assignment.user['id']) + + # NOTE(stevemar): Call find_resource once we have unique IDs, so + # it's fewer trips to the Identity API, then collect the data. + data = [] + for user_id in user_ids: + user = utils.find_resource(identity_client.users, user_id) + data.append(user) + + else: + data = identity_client.users.list( + domain=domain, + group=group, + ) + + # Column handling if parsed_args.long: columns = ['ID', 'Name', 'Default Project Id', 'Domain Id', 'Description', 'Email', 'Enabled'] @@ -228,11 +271,7 @@ class ListUser(lister.Lister): column_headers[3] = 'Domain' else: columns = ['ID', 'Name'] - column_headers = copy.deepcopy(columns) - data = identity_client.users.list( - domain=domain, - group=group, - ) + column_headers = columns return ( column_headers, |
