Skip to content

Commit f1c5229

Browse files
authored
[RDBMS] az postgres flexible-server update: BUG FIX, Updating geo data encryption properties (#30948)
* add to ignore * Fix bug when updating cmk geo * Revert "add to ignore" This reverts commit ee1192c. * Update validators and check that primary and backup id are not the same * lint fixes * small changes
1 parent a53afc8 commit f1c5229

3 files changed

Lines changed: 38 additions & 14 deletions

File tree

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

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -443,34 +443,42 @@ def _is_resource_name(resource):
443443

444444

445445
def build_identity_and_data_encryption(db_engine, byok_identity=None, backup_byok_identity=None,
446-
byok_key=None, backup_byok_key=None):
446+
byok_key=None, backup_byok_key=None, instance=None):
447447
identity, data_encryption = None, None
448448

449-
if byok_identity and byok_key:
450-
identities = {byok_identity: {}}
449+
primary_user_assigned_identity_id = byok_identity
450+
primary_key_uri = byok_key
451+
geo_backup_user_assigned_identity_id = backup_byok_identity
452+
geo_backup_key_uri = backup_byok_key
453+
if (instance is not None) and (byok_identity is None) and (backup_byok_identity is not None):
454+
primary_user_assigned_identity_id = instance.data_encryption.primary_user_assigned_identity_id
455+
primary_key_uri = instance.data_encryption.primary_key_uri
451456

452-
if backup_byok_identity:
453-
identities[backup_byok_identity] = {}
457+
if primary_user_assigned_identity_id and primary_key_uri:
458+
identities = {primary_user_assigned_identity_id: {}}
459+
460+
if geo_backup_user_assigned_identity_id:
461+
identities[geo_backup_user_assigned_identity_id] = {}
454462

455463
if db_engine == 'mysql':
456464
identity = mysql_flexibleservers.models.Identity(user_assigned_identities=identities,
457465
type="UserAssigned")
458466

459467
data_encryption = mysql_flexibleservers.models.DataEncryption(
460-
primary_user_assigned_identity_id=byok_identity,
461-
primary_key_uri=byok_key,
462-
geo_backup_user_assigned_identity_id=backup_byok_identity,
463-
geo_backup_key_uri=backup_byok_key,
468+
primary_user_assigned_identity_id=primary_user_assigned_identity_id,
469+
primary_key_uri=primary_key_uri,
470+
geo_backup_user_assigned_identity_id=geo_backup_user_assigned_identity_id,
471+
geo_backup_key_uri=geo_backup_key_uri,
464472
type="AzureKeyVault")
465473
else:
466474
identity = postgresql_flexibleservers.models.UserAssignedIdentity(user_assigned_identities=identities,
467475
type="UserAssigned")
468476

469477
data_encryption = postgresql_flexibleservers.models.DataEncryption(
470-
primary_user_assigned_identity_id=byok_identity,
471-
primary_key_uri=byok_key,
472-
geo_backup_user_assigned_identity_id=backup_byok_identity,
473-
geo_backup_key_uri=backup_byok_key,
478+
primary_user_assigned_identity_id=primary_user_assigned_identity_id,
479+
primary_key_uri=primary_key_uri,
480+
geo_backup_user_assigned_identity_id=geo_backup_user_assigned_identity_id,
481+
geo_backup_key_uri=geo_backup_key_uri,
474482
type="AzureKeyVault")
475483

476484
return identity, data_encryption

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,10 @@ def flexible_server_update_custom_func(cmd, client, instance,
396396

397397
identity, data_encryption = build_identity_and_data_encryption(db_engine='postgres',
398398
byok_identity=byok_identity,
399-
byok_key=byok_key)
399+
byok_key=byok_key,
400+
backup_byok_identity=backup_byok_identity,
401+
backup_byok_key=backup_byok_key,
402+
instance=instance)
400403

401404
auth_config = instance.auth_config
402405
administrator_login = instance.administrator_login if instance.administrator_login else None

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,11 @@ def pg_byok_validator(byok_identity, byok_key, backup_byok_identity=None, backup
556556
raise ArgumentUsageError("User assigned identity and keyvault key need to be provided together. "
557557
"Please provide --backup-identity and --backup-key together.")
558558

559+
if bool(byok_identity is not None) and bool(backup_byok_identity is not None) and \
560+
byok_identity.lower() == backup_byok_identity.lower():
561+
raise ArgumentUsageError("Primary user assigned identity and backup identity cannot be same. "
562+
"Please provide different identities for --identity and --backup-identity.")
563+
559564
if (instance is not None) and \
560565
not (instance.data_encryption and instance.data_encryption.type == 'AzureKeyVault') and \
561566
(byok_key or backup_byok_key):
@@ -570,6 +575,14 @@ def pg_byok_validator(byok_identity, byok_key, backup_byok_identity=None, backup
570575
if instance is None and (bool(byok_key is not None) ^ bool(backup_byok_key is not None)):
571576
raise ArgumentUsageError("Please provide both primary as well as geo-back user assigned identity "
572577
"and keyvault key to enable Data encryption for geo-redundant backup.")
578+
if instance is not None and (bool(byok_identity is None) ^ bool(backup_byok_identity is None)):
579+
primary_user_assigned_identity_id = byok_identity if byok_identity else \
580+
instance.data_encryption.primary_user_assigned_identity_id
581+
geo_backup_user_assigned_identity_id = backup_byok_identity if backup_byok_identity else \
582+
instance.data_encryption.geo_backup_user_assigned_identity_id
583+
if primary_user_assigned_identity_id.lower() == geo_backup_user_assigned_identity_id.lower():
584+
raise ArgumentUsageError("Primary user assigned identity and backup identity cannot be same. "
585+
"Please provide different identities for --identity and --backup-identity.")
573586

574587

575588
def _network_arg_validator(subnet, public_access):

0 commit comments

Comments
 (0)