Skip to content

Commit afb3e6b

Browse files
author
Matthew Boentoro
committed
{RDBMS} az postgres flexible-server identity update/assign: modify the logic for flexible_server_identity_update and flexible_server_identity_assign
1 parent 1b627ab commit afb3e6b

File tree

4 files changed

+3154
-5054
lines changed

4 files changed

+3154
-5054
lines changed

src/azure-cli/azure/cli/command_modules/rdbms/flexible_server_custom_postgres.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)