@@ -915,21 +915,36 @@ def flexible_server_identity_update(cmd, client, resource_group_name, server_nam
915915 validate_resource_group (resource_group_name )
916916 validate_citus_cluster (cmd , resource_group_name , server_name )
917917
918- identity_type = 'None'
918+ server = client .get (resource_group_name , server_name )
919+ identity_type = server .identity .type if (server and server .identity and server .identity .type ) else 'None'
920+
919921 if system_assigned .lower () == 'enabled' :
920- identity_type = 'SystemAssigned'
922+ # user wants to enable system-assigned identity
923+ if identity_type == 'None' :
924+ # if user-assigned identity is not enabled, then enable system-assigned identity
925+ identity_type = 'SystemAssigned'
926+ elif identity_type == 'UserAssigned' :
927+ # if user-assigned identity is enabled, then enable both system-assigned and user-assigned identity
928+ identity_type = 'SystemAssigned,UserAssigned'
921929 else :
922- server = client .get (resource_group_name , server_name )
923- identity_type = 'UserAssigned' if (server and server .identity and server .identity .type and 'UserAssigned' in server .identity .type ) else 'None'
924-
925- if identity_type == 'UserAssigned' :
930+ if server .data_encryption .type == 'AzureKeyVault' :
931+ # if data encryption is enabled, then system-assigned identity cannot be disabled
932+ raise CLIError ("Cannot disable system-assigned identity because it's used for data encryption." )
933+ if identity_type == 'SystemAssigned,UserAssigned' :
934+ # if both system-assigned and user-assigned identity is enabled, then disable system-assigned identity
935+ identity_type = 'UserAssigned'
936+ elif identity_type == 'SystemAssigned' :
937+ # if only system-assigned identity is enabled, then disable system-assigned identity
938+ identity_type = 'None'
939+
940+ if identity_type == 'UserAssigned' or identity_type == 'SystemAssigned,UserAssigned' :
926941 identities_map = {}
927942 for identity in server .identity .user_assigned_identities :
928943 identities_map [identity ] = {}
929944 parameters = {
930945 'identity' : postgresql_flexibleservers .models .UserAssignedIdentity (
931946 user_assigned_identities = identities_map ,
932- type = "UserAssigned" )}
947+ type = identity_type )}
933948 else :
934949 parameters = {
935950 'identity' : postgresql_flexibleservers .models .UserAssignedIdentity (
@@ -950,14 +965,24 @@ def flexible_server_identity_assign(cmd, client, resource_group_name, server_nam
950965 validate_resource_group (resource_group_name )
951966 validate_citus_cluster (cmd , resource_group_name , server_name )
952967
968+ server = client .get (resource_group_name , server_name )
969+ identity_type = server .identity .type if (server and server .identity and server .identity .type ) else 'None'
970+
971+ if identity_type == 'SystemAssigned' :
972+ # if system-assigned identity is enabled, then enable both system
973+ identity_type = 'SystemAssigned,UserAssigned'
974+ elif identity_type == 'None' :
975+ # if system-assigned identity is not enabled, then enable user-assigned identity
976+ identity_type = 'UserAssigned'
977+
953978 identities_map = {}
954979 for identity in identities :
955980 identities_map [identity ] = {}
956981
957982 parameters = {
958983 'identity' : postgresql_flexibleservers .models .UserAssignedIdentity (
959984 user_assigned_identities = identities_map ,
960- type = "UserAssigned" )}
985+ type = identity_type )}
961986
962987 result = resolve_poller (
963988 client .begin_update (
0 commit comments