Skip to content

Commit d4147a7

Browse files
authored
[Role] az role assignment list: Add --fill-role-definition-name (#31152)
1 parent 6273ccf commit d4147a7

File tree

6 files changed

+7336
-9388
lines changed

6 files changed

+7336
-9388
lines changed

src/azure-cli/azure/cli/command_modules/role/_params.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,9 @@ def load_arguments(self, _):
347347
"principalName property with it. "
348348
"If the logged-in account has no permission or the machine has no network access to query "
349349
"Microsoft Graph, set this flag to false to avoid warning or error.")
350+
c.argument('fill_role_definition_name', arg_type=get_three_state_flag(),
351+
help="Fill roleDefinitionName property in addition to roleDefinitionId. This operation is "
352+
"expensive. If you encounter performance issue, set this flag to false.")
350353

351354
time_help = 'The {} of the query in the format of %Y-%m-%dT%H:%M:%SZ, e.g. 2000-12-31T12:59:59Z. Defaults to {}'
352355
with self.argument_context('role assignment list-changelogs') as c:

src/azure-cli/azure/cli/command_modules/role/custom.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -232,10 +232,10 @@ def _create_role_assignment(cli_ctx, role, assignee, resource_group_name=None, s
232232
condition=condition, condition_version=condition_version)
233233

234234

235-
def list_role_assignments(cmd, assignee=None, role=None, resource_group_name=None,
235+
def list_role_assignments(cmd, assignee=None, role=None, resource_group_name=None, # pylint: disable=too-many-locals
236236
scope=None, include_inherited=False,
237237
show_all=False, include_groups=False, include_classic_administrators=False,
238-
fill_principal_name=True):
238+
fill_role_definition_name=True, fill_principal_name=True):
239239
'''
240240
:param include_groups: include extra assignments to the groups of which the user is a
241241
member(transitively).
@@ -267,23 +267,23 @@ def list_role_assignments(cmd, assignee=None, role=None, resource_group_name=Non
267267
if not results:
268268
return []
269269

270-
# 1. fill in logic names to get things understandable.
271-
# (it's possible that associated roles and principals were deleted, and we just do nothing.)
272-
# 2. fill in role names
273-
role_defs = list(definitions_client.list(
274-
scope=scope or ('/subscriptions/' + definitions_client._config.subscription_id)))
275-
worker = MultiAPIAdaptor(cmd.cli_ctx)
276-
role_dics = {i.id: worker.get_role_property(i, 'role_name') for i in role_defs}
277-
for i in results:
278-
if not i.get('roleDefinitionName'):
279-
if role_dics.get(worker.get_role_property(i, 'roleDefinitionId')):
280-
worker.set_role_property(i, 'roleDefinitionName',
281-
role_dics[worker.get_role_property(i, 'roleDefinitionId')])
282-
else:
283-
i['roleDefinitionName'] = None # the role definition might have been deleted
270+
# Fill in role definition names
271+
if fill_role_definition_name:
272+
worker = MultiAPIAdaptor(cmd.cli_ctx)
273+
role_defs = list(definitions_client.list(
274+
scope=scope or ('/subscriptions/' + definitions_client._config.subscription_id)))
275+
role_dics = {i.id: worker.get_role_property(i, 'role_name') for i in role_defs}
276+
for i in results:
277+
if not i.get('roleDefinitionName'):
278+
if role_dics.get(worker.get_role_property(i, 'roleDefinitionId')):
279+
worker.set_role_property(i, 'roleDefinitionName',
280+
role_dics[worker.get_role_property(i, 'roleDefinitionId')])
281+
else:
282+
i['roleDefinitionName'] = None # the role definition might have been deleted
284283

285-
# fill in principal names
284+
# Fill in principal names
286285
if fill_principal_name:
286+
worker = MultiAPIAdaptor(cmd.cli_ctx)
287287
principal_ids = set(worker.get_role_property(i, 'principalId')
288288
for i in results if worker.get_role_property(i, 'principalId'))
289289

src/azure-cli/azure/cli/command_modules/role/linter_exclusions.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,9 @@ ad app federated-credential delete:
6666
federated_identity_credential_id_or_name:
6767
rule_exclusions:
6868
- option_length_too_long
69+
role assignment list:
70+
parameters:
71+
fill_role_definition_name:
72+
rule_exclusions:
73+
- option_length_too_long
6974
...

src/azure-cli/azure/cli/command_modules/role/tests/latest/recordings/test_role_assignment_no_graph.yaml

Lines changed: 16 additions & 1688 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)