Skip to content

Commit 4a8a2fb

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Rework role list v2 for --user and --project"
2 parents a43d6f0 + ffb7832 commit 4a8a2fb

1 file changed

Lines changed: 67 additions & 2 deletions

File tree

  • openstackclient/identity/v2_0

‎openstackclient/identity/v2_0/role.py‎

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,75 @@ class ListRole(lister.Lister):
146146

147147
log = logging.getLogger(__name__ + '.ListRole')
148148

149+
def get_parser(self, prog_name):
150+
parser = super(ListRole, self).get_parser(prog_name)
151+
parser.add_argument(
152+
'--project',
153+
metavar='<project>',
154+
help='Filter roles by <project> (name or ID)',
155+
)
156+
parser.add_argument(
157+
'--user',
158+
metavar='<user>',
159+
help='Filter roles by <user> (name or ID)',
160+
)
161+
return parser
162+
149163
def take_action(self, parsed_args):
150164
self.log.debug('take_action(%s)', parsed_args)
151-
columns = ('ID', 'Name')
152-
data = self.app.client_manager.identity.roles.list()
165+
identity_client = self.app.client_manager.identity
166+
auth_ref = self.app.client_manager.auth_ref
167+
168+
# No user or project specified, list all roles in the system
169+
if not parsed_args.user and not parsed_args.project:
170+
columns = ('ID', 'Name')
171+
data = identity_client.roles.list()
172+
elif parsed_args.user and parsed_args.project:
173+
user = utils.find_resource(
174+
identity_client.users,
175+
parsed_args.user,
176+
)
177+
project = utils.find_resource(
178+
identity_client.projects,
179+
parsed_args.project,
180+
)
181+
data = identity_client.roles.roles_for_user(user.id, project.id)
182+
183+
elif parsed_args.user:
184+
user = utils.find_resource(
185+
identity_client.users,
186+
parsed_args.user,
187+
)
188+
if self.app.client_manager.auth_ref:
189+
project = utils.find_resource(
190+
identity_client.projects,
191+
auth_ref.project_id
192+
)
193+
else:
194+
msg = _("Project must be specified")
195+
raise exceptions.CommandError(msg)
196+
data = identity_client.roles.roles_for_user(user.id, project.id)
197+
elif parsed_args.project:
198+
project = utils.find_resource(
199+
identity_client.projects,
200+
parsed_args.project,
201+
)
202+
if self.app.client_manager.auth_ref:
203+
user = utils.find_resource(
204+
identity_client.users,
205+
auth_ref.user_id
206+
)
207+
else:
208+
msg = _("User must be specified")
209+
raise exceptions.CommandError(msg)
210+
data = identity_client.roles.roles_for_user(user.id, project.id)
211+
212+
if parsed_args.user or parsed_args.project:
213+
columns = ('ID', 'Name', 'Project', 'User')
214+
for user_role in data:
215+
user_role.user = user.name
216+
user_role.project = project.name
217+
153218
return (columns,
154219
(utils.get_item_properties(
155220
s, columns,

0 commit comments

Comments
 (0)