@@ -56,21 +56,30 @@ def _add_role_assignment_executor_new(cmd, role, assignee, resource_group_name=N
5656 mod = "models" ,
5757 operation_group = "role_assignments" ,
5858 )
59- if cmd .supported_api_version (min_api = "2018-01-01-preview" , resource_type = ResourceType .MGMT_AUTHORIZATION ):
59+ from azure .cli .core import __version__ as core_version
60+ if core_version >= "2.77.0" :
61+ # since 2.77.0, role assignment client swithched to single api version from multi api versions
62+ # ref: https://github.com/Azure/azure-cli/pull/31859
6063 parameters = RoleAssignmentCreateParameters (role_definition_id = role_id , principal_id = object_id ,
61- principal_type = None )
64+ principal_type = assignee_principal_type )
6265 return assignments_client .create (scope , assignment_name , parameters , headers = custom_headers )
63-
64- # for backward compatibility
65- RoleAssignmentProperties = get_sdk (
66- cmd .cli_ctx ,
67- ResourceType .MGMT_AUTHORIZATION ,
68- "RoleAssignmentProperties" ,
69- mod = "models" ,
70- operation_group = "role_assignments" ,
71- )
72- properties = RoleAssignmentProperties (role_definition_id = role_id , principal_id = object_id )
73- return assignments_client .create (scope , assignment_name , properties , headers = custom_headers )
66+ else :
67+ # before 2.77.0, role assignment client used multi api versions
68+ if cmd .supported_api_version (min_api = "2018-01-01-preview" , resource_type = ResourceType .MGMT_AUTHORIZATION ):
69+ parameters = RoleAssignmentCreateParameters (role_definition_id = role_id , principal_id = object_id ,
70+ principal_type = None )
71+ return assignments_client .create (scope , assignment_name , parameters , headers = custom_headers )
72+
73+ # for backward compatibility
74+ RoleAssignmentProperties = get_sdk (
75+ cmd .cli_ctx ,
76+ ResourceType .MGMT_AUTHORIZATION ,
77+ "RoleAssignmentProperties" ,
78+ mod = "models" ,
79+ operation_group = "role_assignments" ,
80+ )
81+ properties = RoleAssignmentProperties (role_definition_id = role_id , principal_id = object_id )
82+ return assignments_client .create (scope , assignment_name , properties , headers = custom_headers )
7483
7584
7685# TODO(fuming): remove and replaced by import from azure.cli.command_modules.acs once dependency bumped to 2.47.0
@@ -92,7 +101,7 @@ def _add_role_assignment_new(cmd, role, service_principal_msi_id, is_service_pri
92101 )
93102 break
94103 except HttpResponseError as ex :
95- if isinstance (ex , ResourceExistsError ) or "The role assignment already exists." in ex . message :
104+ if isinstance (ex , ResourceExistsError ) or ex . error . code == 'RoleAssignmentExists' :
96105 break
97106 logger .info (ex .message )
98107 except Exception as ex : # pylint: disable=broad-except
0 commit comments