From 0d79e7e811fa2f9ffad84ef7fe12343c8b706991 Mon Sep 17 00:00:00 2001 From: Haoran Hong Date: Tue, 9 Dec 2025 12:58:07 +0800 Subject: [PATCH 1/2] Remove storage redundancy --- .../cli/command_modules/mysql/_params.py | 10 ---- .../azure/cli/command_modules/mysql/custom.py | 47 +++++++------------ .../mysql/tests/latest/test_mysql_scenario.py | 24 ++++------ 3 files changed, 25 insertions(+), 56 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/mysql/_params.py b/src/azure-cli/azure/cli/command_modules/mysql/_params.py index 53bf92808de..9148484e5e5 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/_params.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/_params.py @@ -134,12 +134,6 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- help='Enable or disable Auto scale IOPS configuration for both the source and the newly provisioned replica server to enable faster provisioning.' ) - storage_redundancy_arg_type = CLIArgumentType( - arg_type=get_enum_type(['LocalRedundancy', 'ZoneRedundancy']), - options_list=['--storage-redundancy'], - help='Enable local redundancy or zone redundancy. Zone redundancy only supports Business Critical tier.' - ) - maintenance_policy_patch_strategy_arg_type = CLIArgumentType( arg_type=get_enum_type(['Regular', 'VirtualCanary']), options_list=['--maintenance-policy-patch-strategy', '--patch-strategy'], @@ -372,7 +366,6 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- c.argument('public_access', arg_type=public_access_create_arg_type) c.argument('vnet', arg_type=vnet_arg_type) c.argument('vnet_address_prefix', arg_type=vnet_address_prefix_arg_type) - c.argument('storage_redundancy', arg_type=storage_redundancy_arg_type, default="LocalRedundancy") c.argument('subnet', arg_type=subnet_arg_type) c.argument('subnet_address_prefix', arg_type=subnet_address_prefix_arg_type) c.argument('private_dns_zone_arguments', private_dns_zone_arguments_arg_type) @@ -431,7 +424,6 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- c.argument('vnet_address_prefix', arg_type=vnet_address_prefix_arg_type) c.argument('subnet', arg_type=subnet_arg_type) c.argument('subnet_address_prefix', arg_type=subnet_address_prefix_arg_type) - c.argument('storage_redundancy', arg_type=storage_redundancy_arg_type) c.argument('private_dns_zone_arguments', private_dns_zone_arguments_arg_type) c.argument('zone', arg_type=zone_arg_type) c.argument('tags', tags_type) @@ -464,7 +456,6 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- c.argument('storage_gb', arg_type=storage_gb_arg_type) c.argument('auto_grow', arg_type=auto_grow_arg_type) c.argument('accelerated_logs', arg_type=accelerated_logs_arg_type) - c.argument('storage_redundancy', arg_type=storage_redundancy_arg_type) c.argument('backup_retention', arg_type=mysql_backup_retention_arg_type) c.argument('geo_redundant_backup', arg_type=geo_redundant_backup_arg_type) c.argument('public_access', options_list=['--public-access'], arg_type=get_enum_type(['Enabled', 'Disabled']), help='Determines the public access. ') @@ -594,7 +585,6 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- c.argument('sku_name', arg_type=sku_name_arg_type) c.argument('storage_gb', arg_type=storage_gb_arg_type) c.argument('iops', arg_type=iops_arg_type) - c.argument('storage_redundancy', arg_type=storage_redundancy_arg_type, default="LocalRedundancy") c.argument('faster_provisioning', arg_type=faster_provisioning_arg_type) c.argument('database_port', arg_type=database_port_arg_type) c.argument('backup_retention', arg_type=mysql_backup_retention_arg_type) diff --git a/src/azure-cli/azure/cli/command_modules/mysql/custom.py b/src/azure-cli/azure/cli/command_modules/mysql/custom.py index 8a2123d640a..9cee7842773 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/custom.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/custom.py @@ -335,18 +335,13 @@ def flexible_server_version_upgrade(cmd, client, resource_group_name, server_nam # pylint: disable=too-many-locals, too-many-statements, raise-missing-from # Region create without args def flexible_server_create(cmd, client, - resource_group_name=None, server_name=None, - location=None, backup_retention=None, - sku_name=None, tier=None, - storage_gb=None, administrator_login=None, - administrator_login_password=None, version=None, - tags=None, database_name=None, database_port=None, - subnet=None, subnet_address_prefix=None, vnet=None, vnet_address_prefix=None, - private_dns_zone_arguments=None, public_access=None, - high_availability=None, zone=None, standby_availability_zone=None, - iops=None, auto_grow=None, auto_scale_iops=None, accelerated_logs=None, storage_redundancy=None, - geo_redundant_backup=None, byok_identity=None, backup_byok_identity=None, byok_key=None, backup_byok_key=None, - backup_interval=None, maintenance_policy_patch_strategy=None, yes=False): + resource_group_name=None, server_name=None, location=None, backup_retention=None, sku_name=None, + tier=None, storage_gb=None, administrator_login=None, administrator_login_password=None, version=None, + tags=None, database_name=None, database_port=None, subnet=None, subnet_address_prefix=None, vnet=None, + vnet_address_prefix=None, private_dns_zone_arguments=None, public_access=None, high_availability=None, + zone=None, standby_availability_zone=None, iops=None, auto_grow=None, auto_scale_iops=None, + accelerated_logs=None, geo_redundant_backup=None, byok_identity=None, backup_byok_identity=None, + byok_key=None, backup_byok_key=None, backup_interval=None, maintenance_policy_patch_strategy=None, yes=False): # Generate missing parameters location, resource_group_name, server_name = generate_missing_parameters(cmd, location, resource_group_name, server_name) db_context = DbContext( @@ -416,8 +411,7 @@ def flexible_server_create(cmd, client, iops=iops, auto_grow=auto_grow, auto_io_scaling=auto_scale_iops, - log_on_disk=accelerated_logs, - storage_redundancy=storage_redundancy) + log_on_disk=accelerated_logs) backup = models.Backup(backup_retention_days=backup_retention, backup_interval_hours=backup_interval, geo_redundant_backup=geo_redundant_backup) @@ -712,8 +706,8 @@ def flexible_server_import_replica_stop(client, resource_group_name, server_name def flexible_server_restore(cmd, client, resource_group_name, server_name, source_server, restore_point_in_time=None, zone=None, no_wait=False, subnet=None, subnet_address_prefix=None, vnet=None, vnet_address_prefix=None, private_dns_zone_arguments=None, public_access=None, yes=False, sku_name=None, tier=None, database_port=None, - storage_gb=None, auto_grow=None, accelerated_logs=None, faster_restore=None, storage_redundancy=None, - backup_retention=None, geo_redundant_backup=None, tags=None): + storage_gb=None, auto_grow=None, accelerated_logs=None, faster_restore=None, backup_retention=None, + geo_redundant_backup=None, tags=None): provider = 'Microsoft.DBforMySQL' server_name = server_name.lower() @@ -771,9 +765,6 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc else: auto_io_scaling = _determine_auto_io_scaling_by_faster_restore(faster_restore) - if not storage_redundancy: - storage_redundancy = source_server_object.storage.storage_redundancy - if not backup_retention: backup_retention = source_server_object.backup.backup_retention_days else: @@ -796,8 +787,7 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc iops_input=source_server_object.storage.iops, tier=tier, sku_name=sku_name) storage = models.Storage(storage_size_gb=storage_gb, iops=iops, auto_grow=auto_grow, - auto_io_scaling=auto_io_scaling, - log_on_disk=accelerated_logs, storage_redundancy=storage_redundancy) + auto_io_scaling=auto_io_scaling, log_on_disk=accelerated_logs) backup = models.Backup(backup_retention_days=backup_retention, geo_redundant_backup=geo_redundant_backup) @@ -860,8 +850,7 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc def flexible_server_georestore(cmd, client, resource_group_name, server_name, source_server, location, zone=None, no_wait=False, subnet=None, subnet_address_prefix=None, vnet=None, vnet_address_prefix=None, tags=None, private_dns_zone_arguments=None, public_access=None, yes=False, sku_name=None, tier=None, - storage_gb=None, auto_grow=None, accelerated_logs=None, storage_redundancy=None, - backup_retention=None, geo_redundant_backup=None): + storage_gb=None, auto_grow=None, accelerated_logs=None, backup_retention=None, geo_redundant_backup=None): provider = 'Microsoft.DBforMySQL' server_name = server_name.lower() @@ -908,9 +897,6 @@ def flexible_server_georestore(cmd, client, resource_group_name, server_name, so else: mysql_accelerated_logs_validator(accelerated_logs, tier) - if not storage_redundancy: - storage_redundancy = source_server_object.storage.storage_redundancy - if not backup_retention: backup_retention = source_server_object.backup.backup_retention_days else: @@ -937,7 +923,7 @@ def flexible_server_georestore(cmd, client, resource_group_name, server_name, so storage = models.Storage(storage_size_gb=storage_gb, iops=iops, auto_grow=auto_grow, auto_io_scaling=source_server_object.storage.auto_io_scaling, - log_on_disk=accelerated_logs, storage_redundancy=storage_redundancy) + log_on_disk=accelerated_logs) backup = models.Backup(backup_retention_days=backup_retention, geo_redundant_backup=geo_redundant_backup) @@ -1320,8 +1306,8 @@ def flexible_parameter_update_batch(client, server_name, resource_group_name, so # Custom functions for server replica, will add MySQL part after backend ready in future def flexible_replica_create(cmd, client, resource_group_name, source_server, replica_name, location=None, tags=None, sku_name=None, private_dns_zone_arguments=None, vnet=None, subnet=None, zone=None, public_access=None, no_wait=False, - storage_gb=None, iops=None, storage_redundancy=None, faster_provisioning=None, geo_redundant_backup=None, - backup_retention=None, tier=None, database_port=None): + storage_gb=None, iops=None, faster_provisioning=None, geo_redundant_backup=None, backup_retention=None, + tier=None, database_port=None): provider = 'Microsoft.DBforMySQL' replica_name = replica_name.lower() @@ -1376,8 +1362,7 @@ def flexible_replica_create(cmd, client, resource_group_name, source_server, rep storage = models.Storage(storage_size_gb=storage_gb, iops=iops, auto_grow="Enabled", - auto_io_scaling=auto_io_scaling, - storage_redundancy=storage_redundancy) + auto_io_scaling=auto_io_scaling) backup = models.Backup(backup_retention_days=backup_retention, geo_redundant_backup=geo_redundant_backup) diff --git a/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py b/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py index 728a820a3d8..90e0065c14b 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py @@ -147,12 +147,11 @@ def _test_flexible_server_mgmt(self, database_engine, resource_group): backup_retention = 7 database_name = 'testdb' server_name = self.create_random_name(SERVER_NAME_PREFIX, SERVER_NAME_MAX_LENGTH) - storage_redundancy = "LocalRedundancy" self.cmd('{} flexible-server create -g {} -n {} --backup-retention {} --sku-name {} --tier {} \ - --storage-size {} --storage-redundancy {} -u {} --version {} --tags keys=3 --database-name {} --public-access None' + --storage-size {} -u {} --version {} --tags keys=3 --database-name {} --public-access None' .format(database_engine, resource_group, server_name, backup_retention, sku_name, tier, storage_size, - storage_redundancy, 'dbadmin', version, database_name)) + 'dbadmin', version, database_name)) basic_info = self.cmd('{} flexible-server show -g {} -n {}'.format(database_engine, resource_group, server_name)).get_output_in_json() self.assertEqual(basic_info['name'], server_name) @@ -449,10 +448,8 @@ def _test_flexible_server_restore_mgmt(self, database_engine, resource_group): new_vnet_2 = self.create_random_name('VNET', SERVER_NAME_MAX_LENGTH) new_subnet_2 = self.create_random_name('SUBNET', SERVER_NAME_MAX_LENGTH) - storage_redundancy = "LocalRedundancy" - - self.cmd('{} flexible-server create -g {} -n {} --storage-redundancy {} --vnet {} --subnet {} -l {} --yes'.format( - database_engine, resource_group, source_server, storage_redundancy, source_vnet, source_subnet, location)) + self.cmd('{} flexible-server create -g {} -n {} --vnet {} --subnet {} -l {} --yes'.format( + database_engine, resource_group, source_server, source_vnet, source_subnet, location)) result = self.cmd('{} flexible-server show -g {} -n {}'.format(database_engine, resource_group, source_server)).get_output_in_json() # Wait until snapshot is created @@ -578,8 +575,6 @@ def _test_flexible_server_georestore_mgmt(self, database_engine, resource_group) new_vnet_2 = self.create_random_name('VNET', SERVER_NAME_MAX_LENGTH) new_subnet_2 = self.create_random_name('SUBNET', SERVER_NAME_MAX_LENGTH) - storage_redundancy = "LocalRedundancy" - self.cmd('{} flexible-server create -g {} -n {} --vnet {} --subnet {} -l {} --geo-redundant-backup Enabled --yes'.format( database_engine, resource_group, source_server, source_vnet, source_subnet, location)) result = self.cmd('{} flexible-server show -g {} -n {}'.format(database_engine, resource_group, source_server)).get_output_in_json() @@ -596,9 +591,9 @@ def _test_flexible_server_georestore_mgmt(self, database_engine, resource_group) .format(database_engine, resource_group, target_location, target_server_default, source_server), expect_failure=True) # 2. vnet to public access - restore_result = self.cmd('{} flexible-server geo-restore -g {} -l {} --name {} --source-server {} --storage-redundancy {} --public-access enabled' - .format(database_engine, resource_group, target_location, target_server_public_access, source_server, - storage_redundancy)).get_output_in_json() + restore_result = self.cmd('{} flexible-server geo-restore -g {} -l {} --name {} --source-server {} --public-access enabled' + .format(database_engine, resource_group, target_location, target_server_public_access, source_server) + ).get_output_in_json() self.assertEqual(str(restore_result['location']).replace(' ', '').lower(), target_location) # 3. vnet to different vnet @@ -1294,12 +1289,11 @@ def _test_flexible_server_cross_region_replica_mgmt(self, database_engine, resou primary_role = 'None' replica_role = 'Replica' private_dns_param = 'privateDnsZoneResourceId' - storage_redundancy = "LocalRedundancy" master_server = self.create_random_name(SERVER_NAME_PREFIX, SERVER_NAME_MAX_LENGTH) replicas = [self.create_random_name(F'azuredbclirep{i+1}', SERVER_NAME_MAX_LENGTH) for i in range(2)] - self.cmd('{} flexible-server create -g {} --name {} -l {} --storage-size {} --tier GeneralPurpose --sku-name {} --storage-redundancy {} --public-access none' - .format(database_engine, resource_group, master_server, master_location, 256, DEFAULT_GENERAL_PURPOSE_SKU, storage_redundancy)) + self.cmd('{} flexible-server create -g {} --name {} -l {} --storage-size {} --tier GeneralPurpose --sku-name {} --public-access none' + .format(database_engine, resource_group, master_server, master_location, 256, DEFAULT_GENERAL_PURPOSE_SKU)) result = self.cmd('{} flexible-server show -g {} --name {} ' .format(database_engine, resource_group, master_server), checks=[JMESPathCheck('replicationRole', primary_role)]).get_output_in_json() From ae6a917bcfad2d702d6950bcad5d9bfd098689c0 Mon Sep 17 00:00:00 2001 From: Haoran Hong Date: Fri, 12 Dec 2025 12:29:00 +0800 Subject: [PATCH 2/2] test fix --- .../command_modules/mysql/tests/latest/test_mysql_scenario.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py b/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py index a9c4039a9cc..edd76772ab0 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/tests/latest/test_mysql_scenario.py @@ -161,7 +161,6 @@ def _test_flexible_server_mgmt(self, database_engine, resource_group): self.assertEqual(basic_info['sku']['tier'], tier) self.assertEqual(basic_info['version'], version) self.assertEqual(basic_info['storage']['storageSizeGb'], storage_size) - self.assertEqual(basic_info['storage']['storageRedundancy'], storage_redundancy) self.assertEqual(basic_info['storage']['logOnDisk'], "Disabled") self.assertEqual(basic_info['backup']['backupRetentionDays'], backup_retention) @@ -449,7 +448,6 @@ def _test_flexible_server_restore_mgmt(self, database_engine, resource_group): self.cmd('{} flexible-server create -g {} -n {} --vnet {} --subnet {} -l {} --yes'.format( database_engine, resource_group, source_server, source_vnet, source_subnet, location)) result = self.cmd('{} flexible-server show -g {} -n {}'.format(database_engine, resource_group, source_server)).get_output_in_json() - self.assertEqual(result['storage']['storageRedundancy'], storage_redundancy) # Wait until snapshot is created current_time = datetime.utcnow().replace(tzinfo=tzutc()).isoformat()