From 413d08d3032b0a8bdb58eaa33a41585d498eba06 Mon Sep 17 00:00:00 2001 From: linyudoa <50021265+linyudoa@users.noreply.github.com> Date: Fri, 21 Mar 2025 15:35:30 +0800 Subject: [PATCH 1/7] update --- .../azure/cli/command_modules/mysql/_breaking_change.py | 8 ++++++++ src/azure-cli/azure/cli/command_modules/mysql/custom.py | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py diff --git a/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py b/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py new file mode 100644 index 00000000000..4774e950246 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py @@ -0,0 +1,8 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- +from azure.cli.core.breaking_change import register_logic_breaking_change + +register_logic_breaking_change('mysql flexible-server create', 'Update the validator', detail='the argument `--high-availability` will no longer accept value `SameZone` for new servers created in Business-Critical service tier if the region supports multiple zones.') +register_logic_breaking_change('mysql flexible-server update', 'Update the validator', detail='the argument `--high-availability` will no longer accept value `SameZone` for new servers created in Business-Critical service tier if the region supports multiple zones.') 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 d9e6683bf4f..4e2b548def4 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/custom.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/custom.py @@ -1175,10 +1175,6 @@ def server_delete_func(cmd, client, resource_group_name, server_name, yes=None): def flexible_server_restart(cmd, client, resource_group_name, server_name, fail_over=None): - instance = client.get(resource_group_name, server_name) - if fail_over is not None and instance.high_availability.mode != "ZoneRedundant": - raise ArgumentUsageError("Failing over can only be triggered for zone redundant servers.") - if fail_over is not None: if fail_over != 'Forced': raise InvalidArgumentValueError("Allowed failover parameters are 'Forced'.") From 3a2a0bad8c4f4202c62af0cc7e2d6d851a875653 Mon Sep 17 00:00:00 2001 From: linyudoa <50021265+linyudoa@users.noreply.github.com> Date: Mon, 24 Mar 2025 11:17:27 +0800 Subject: [PATCH 2/7] fix style --- src/azure-cli/azure/cli/command_modules/mysql/custom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4e2b548def4..0f214b5b3de 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/custom.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/custom.py @@ -19,7 +19,7 @@ from azure.cli.core.util import CLIError, sdk_no_wait, user_confirmation, run_cmd from azure.cli.core.local_context import ALL from azure.mgmt.mysqlflexibleservers import models -from azure.cli.core.azclierror import ClientRequestError, RequiredArgumentMissingError, ArgumentUsageError, InvalidArgumentValueError, ValidationError +from azure.cli.core.azclierror import ClientRequestError, RequiredArgumentMissingError, InvalidArgumentValueError, ValidationError from ._client_factory import get_mysql_flexible_management_client, cf_mysql_flexible_firewall_rules, cf_mysql_flexible_db, \ cf_mysql_check_resource_availability, cf_mysql_check_resource_availability_without_location, cf_mysql_flexible_config, \ cf_mysql_flexible_servers, cf_mysql_flexible_replica, cf_mysql_flexible_adadmin, cf_mysql_flexible_private_dns_zone_suffix_operations, cf_mysql_servers, \ From cf8410baf3c71fef4dc237ca705bd0db356bc792 Mon Sep 17 00:00:00 2001 From: linyudoa <50021265+linyudoa@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:21:07 +0800 Subject: [PATCH 3/7] fix pylint --- .../cli/command_modules/mysql/_breaking_change.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py b/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py index 4774e950246..33d92a44207 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py @@ -4,5 +4,11 @@ # -------------------------------------------------------------------------------------------- from azure.cli.core.breaking_change import register_logic_breaking_change -register_logic_breaking_change('mysql flexible-server create', 'Update the validator', detail='the argument `--high-availability` will no longer accept value `SameZone` for new servers created in Business-Critical service tier if the region supports multiple zones.') -register_logic_breaking_change('mysql flexible-server update', 'Update the validator', detail='the argument `--high-availability` will no longer accept value `SameZone` for new servers created in Business-Critical service tier if the region supports multiple zones.') +register_logic_breaking_change('mysql flexible-server create', 'Update the validator', + detail='the argument `--high-availability` will no longer accept value `SameZone` for ' + 'new servers created in Business-Critical service tier ' + 'if the region supports multiple zones.') +register_logic_breaking_change('mysql flexible-server update', 'Update the validator', + detail='the argument `--high-availability` will no longer accept value `SameZone` for ' + 'new servers created in Business-Critical service tier ' + 'if the region supports multiple zones.') From e49229cc732a52f615bd1d613bbc6e195fd78698 Mon Sep 17 00:00:00 2001 From: linyudoa <50021265+linyudoa@users.noreply.github.com> Date: Tue, 25 Mar 2025 10:48:45 +0800 Subject: [PATCH 4/7] revert previous change --- src/azure-cli/azure/cli/command_modules/mysql/custom.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 0f214b5b3de..013f48d06ca 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/custom.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/custom.py @@ -19,7 +19,7 @@ from azure.cli.core.util import CLIError, sdk_no_wait, user_confirmation, run_cmd from azure.cli.core.local_context import ALL from azure.mgmt.mysqlflexibleservers import models -from azure.cli.core.azclierror import ClientRequestError, RequiredArgumentMissingError, InvalidArgumentValueError, ValidationError +from azure.cli.core.azclierror import ClientRequestError, ArgumentUsageError, RequiredArgumentMissingError, InvalidArgumentValueError, ValidationError from ._client_factory import get_mysql_flexible_management_client, cf_mysql_flexible_firewall_rules, cf_mysql_flexible_db, \ cf_mysql_check_resource_availability, cf_mysql_check_resource_availability_without_location, cf_mysql_flexible_config, \ cf_mysql_flexible_servers, cf_mysql_flexible_replica, cf_mysql_flexible_adadmin, cf_mysql_flexible_private_dns_zone_suffix_operations, cf_mysql_servers, \ @@ -1175,6 +1175,10 @@ def server_delete_func(cmd, client, resource_group_name, server_name, yes=None): def flexible_server_restart(cmd, client, resource_group_name, server_name, fail_over=None): + instance = client.get(resource_group_name, server_name) + if fail_over is not None and instance.high_availability.mode != "ZoneRedundant": + raise ArgumentUsageError("Failing over can only be triggered for zone redundant servers.") + if fail_over is not None: if fail_over != 'Forced': raise InvalidArgumentValueError("Allowed failover parameters are 'Forced'.") From efcb7e01b2e6400c720a184c2f746c1fcdec6cdf Mon Sep 17 00:00:00 2001 From: linyudoa <50021265+linyudoa@users.noreply.github.com> Date: Tue, 25 Mar 2025 13:02:58 +0800 Subject: [PATCH 5/7] delete breaking change announcement --- .../cli/command_modules/mysql/_breaking_change.py | 14 -------------- .../azure/cli/command_modules/mysql/custom.py | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py diff --git a/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py b/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py deleted file mode 100644 index 33d92a44207..00000000000 --- a/src/azure-cli/azure/cli/command_modules/mysql/_breaking_change.py +++ /dev/null @@ -1,14 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# -------------------------------------------------------------------------------------------- -from azure.cli.core.breaking_change import register_logic_breaking_change - -register_logic_breaking_change('mysql flexible-server create', 'Update the validator', - detail='the argument `--high-availability` will no longer accept value `SameZone` for ' - 'new servers created in Business-Critical service tier ' - 'if the region supports multiple zones.') -register_logic_breaking_change('mysql flexible-server update', 'Update the validator', - detail='the argument `--high-availability` will no longer accept value `SameZone` for ' - 'new servers created in Business-Critical service tier ' - 'if the region supports multiple zones.') 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 7854bcf8c76..0f214b5b3de 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/custom.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/custom.py @@ -19,7 +19,7 @@ from azure.cli.core.util import CLIError, sdk_no_wait, user_confirmation, run_cmd from azure.cli.core.local_context import ALL from azure.mgmt.mysqlflexibleservers import models -from azure.cli.core.azclierror import ClientRequestError, ArgumentUsageError, RequiredArgumentMissingError, InvalidArgumentValueError, ValidationError +from azure.cli.core.azclierror import ClientRequestError, RequiredArgumentMissingError, InvalidArgumentValueError, ValidationError from ._client_factory import get_mysql_flexible_management_client, cf_mysql_flexible_firewall_rules, cf_mysql_flexible_db, \ cf_mysql_check_resource_availability, cf_mysql_check_resource_availability_without_location, cf_mysql_flexible_config, \ cf_mysql_flexible_servers, cf_mysql_flexible_replica, cf_mysql_flexible_adadmin, cf_mysql_flexible_private_dns_zone_suffix_operations, cf_mysql_servers, \ From 698fe423c3e2b6a0542ad87fb4db83773b6f127e Mon Sep 17 00:00:00 2001 From: linyudoa <50021265+linyudoa@users.noreply.github.com> Date: Fri, 18 Apr 2025 20:25:33 +0800 Subject: [PATCH 6/7] update code --- .../cli/command_modules/mysql/_params.py | 21 +++++++++ .../cli/command_modules/mysql/_validators.py | 14 ++++-- .../azure/cli/command_modules/mysql/custom.py | 43 +++++++++++++++---- 3 files changed, 66 insertions(+), 12 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 7f24764a409..ad25976d739 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/_params.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/_params.py @@ -122,6 +122,18 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- help='Enable or disable accelerated logs. Only support for Business Critical tier. Default value is Enabled.' ) + faster_restore_arg_type = CLIArgumentType( + arg_type=get_enum_type(['Enabled', 'Disabled']), + options_list=['--faster-restore'], + help='Enable or disable Auto scale IOPS configuration for both the source and the newly restored server to enable faster restore.' + ) + + faster_provisioning_arg_type = CLIArgumentType( + arg_type=get_enum_type(['Enabled', 'Disabled']), + options_list=['--faster-provisioning'], + 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'], @@ -256,6 +268,12 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- validator=validate_byok_identity ) + backup_interval_arg_type = CLIArgumentType( + type=int, + options_list=['--backup-interval'], + help='The interval between backups in hours. Accepted values are 24, 12 and 6. The default value is 24.' + ) + key_arg_type = CLIArgumentType( options_list=['--key'], help='The resource ID of the primary keyvault key for data encryption.' @@ -342,6 +360,7 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- c.argument('accelerated_logs', arg_type=accelerated_logs_arg_type) c.argument('backup_retention', default=7, arg_type=mysql_backup_retention_arg_type) c.argument('backup_byok_identity', arg_type=backup_identity_arg_type) + c.argument('backup_interval', arg_type=backup_interval_arg_type) c.argument('backup_byok_key', arg_type=backup_key_arg_type) c.argument('byok_identity', arg_type=identity_arg_type) c.argument('byok_key', arg_type=key_arg_type) @@ -422,6 +441,7 @@ 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('faster_restore', arg_type=faster_restore_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('database_port', arg_type=database_port_arg_type) @@ -574,6 +594,7 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many- 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) + 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) c.argument('geo_redundant_backup', arg_type=geo_redundant_backup_arg_type) diff --git a/src/azure-cli/azure/cli/command_modules/mysql/_validators.py b/src/azure-cli/azure/cli/command_modules/mysql/_validators.py index 49586aa0849..3364a00b558 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/_validators.py @@ -105,10 +105,10 @@ def mysql_restore_tier_validator(target_tier, source_tier, sku_info): def mysql_arguments_validator(db_context, location, tier, sku_name, storage_gb, backup_retention=None, server_name=None, zone=None, standby_availability_zone=None, high_availability=None, backup_byok_key=None, public_access=None, version=None, auto_grow=None, replication_role=None, subnet=None, - byok_identity=None, backup_byok_identity=None, byok_key=None, geo_redundant_backup=None, - disable_data_encryption=None, iops=None, auto_io_scaling=None, accelerated_logs=None, - storage_redundancy=None, instance=None, data_source_type=None, mode=None, - data_source_backup_dir=None, data_source_sas_token=None): + byok_identity=None, backup_interval=None, backup_byok_identity=None, byok_key=None, + geo_redundant_backup=None, disable_data_encryption=None, iops=None, auto_io_scaling=None, + accelerated_logs=None, storage_redundancy=None, instance=None, data_source_type=None, + mode=None, data_source_backup_dir=None, data_source_sas_token=None): validate_server_name(db_context, server_name, 'Microsoft.DBforMySQL/flexibleServers') list_skus_info = get_mysql_list_skus_info(db_context.cmd, location, server_name=instance.name if instance else None) @@ -132,6 +132,7 @@ def mysql_arguments_validator(db_context, location, tier, sku_name, storage_gb, mysql_auto_grow_validator(auto_grow, replication_role, high_availability, instance) _mysql_byok_validator(byok_identity, backup_byok_identity, byok_key, backup_byok_key, disable_data_encryption, geo_redundant_backup, instance) + _mysql_backup_interval_validator(backup_interval) _mysql_iops_validator(iops, auto_io_scaling, instance) mysql_accelerated_logs_validator(accelerated_logs, tier) storage_redundancy_validator(storage_redundancy, tier) @@ -302,6 +303,11 @@ def _mysql_byok_validator(byok_identity, backup_byok_identity, byok_key, backup_ "Use the primary server instead.") +def _mysql_backup_interval_validator(backup_interval): + if backup_interval not in [6, 12, 24]: + raise ArgumentUsageError("Incorrect value for --backup-interval. Allowed values: [6, 12, 24]") + + def _mysql_iops_validator(iops, auto_io_scaling, instance): if iops is None: return 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 0f214b5b3de..4960e1f9cea 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/custom.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/custom.py @@ -339,7 +339,7 @@ def flexible_server_create(cmd, client, 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, - maintenance_policy_patch_strategy=None, yes=False): + 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( @@ -371,6 +371,7 @@ def flexible_server_create(cmd, client, version=version, geo_redundant_backup=geo_redundant_backup, byok_identity=byok_identity, + backup_interval=backup_interval, backup_byok_identity=backup_byok_identity, byok_key=byok_key, backup_byok_key=backup_byok_key, @@ -414,7 +415,7 @@ def flexible_server_create(cmd, client, log_on_disk=accelerated_logs, storage_redundancy=storage_redundancy) - backup = models.Backup(backup_retention_days=backup_retention, geo_redundant_backup=geo_redundant_backup) + backup = models.Backup(backup_retention_days=backup_retention, backup_interval_hours=backup_interval, geo_redundant_backup=geo_redundant_backup) sku = models.MySQLServerSku(name=sku_name, tier=tier) @@ -707,8 +708,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, storage_redundancy=None, backup_retention=None, - geo_redundant_backup=None, tags=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): provider = 'Microsoft.DBforMySQL' server_name = server_name.lower() @@ -761,6 +762,11 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc else: mysql_accelerated_logs_validator(accelerated_logs, tier) + if not faster_restore: + auto_io_scaling = source_server_object.storage.auto_io_scaling + 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 else: @@ -788,7 +794,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=source_server_object.storage.auto_io_scaling, + auto_io_scaling=auto_io_scaling, log_on_disk=accelerated_logs, storage_redundancy=storage_redundancy) backup = models.Backup(backup_retention_days=backup_retention, geo_redundant_backup=geo_redundant_backup) @@ -1323,8 +1329,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, geo_redundant_backup=None, backup_retention=None, - tier=None, database_port=None): + storage_gb=None, iops=None, storage_redundancy=None, faster_provisioning=None, geo_redundant_backup=None, + backup_retention=None, tier=None, database_port=None): provider = 'Microsoft.DBforMySQL' replica_name = replica_name.lower() @@ -1369,6 +1375,11 @@ def flexible_replica_create(cmd, client, resource_group_name, source_server, rep if not iops: iops = source_server_object.storage.iops + if not faster_provisioning: + auto_io_scaling = source_server_object.storage.auto_io_scaling + else: + auto_io_scaling = _determine_auto_io_scaling_by_faster_provisioning(faster_provisioning) + if not storage_redundancy: storage_redundancy = source_server_object.storage.storage_redundancy else: @@ -1379,7 +1390,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=source_server_object.storage.auto_io_scaling, + auto_io_scaling=auto_io_scaling, storage_redundancy=storage_redundancy) backup = models.Backup(backup_retention_days=backup_retention, geo_redundant_backup=geo_redundant_backup) @@ -1657,6 +1668,22 @@ def _determine_iops(storage_gb, iops_info, iops_input, tier, sku_name): return iops +def _determine_auto_io_scaling_by_faster_restore(faster_restore): + if faster_restore.lower() == 'enabled': + logger.info("You have selected Faster Restore as Enabled. This will activate Auto scale IOPS configuration " + "for both the source and the newly restored server to enable faster restore. " + "You can disable the Auto scale IOPS settings later, if needed.") + return faster_restore + + +def _determine_auto_io_scaling_by_faster_provisioning(faster_restore): + if faster_restore.lower() == 'enabled': + logger.info("You have selected Faster Provisioning as Enabled. This will activate Auto scale IOPS configuration " + "for both the source and the newly provisioned replica server to enable faster provisioning. " + "You can disable the Auto scale IOPS settings later, if needed.") + return faster_restore + + def _determine_acceleratedLogs(accelerated_logs, tier): if accelerated_logs is None: if tier == "MemoryOptimized": From 736da72ca294b7c980a4c1ff50f1b4ed816da037 Mon Sep 17 00:00:00 2001 From: linyudoa <50021265+linyudoa@users.noreply.github.com> Date: Fri, 18 Apr 2025 20:38:49 +0800 Subject: [PATCH 7/7] fix bug --- src/azure-cli/azure/cli/command_modules/mysql/_validators.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/azure-cli/azure/cli/command_modules/mysql/_validators.py b/src/azure-cli/azure/cli/command_modules/mysql/_validators.py index 3364a00b558..1fef622c05b 100644 --- a/src/azure-cli/azure/cli/command_modules/mysql/_validators.py +++ b/src/azure-cli/azure/cli/command_modules/mysql/_validators.py @@ -304,6 +304,8 @@ def _mysql_byok_validator(byok_identity, backup_byok_identity, byok_key, backup_ def _mysql_backup_interval_validator(backup_interval): + if backup_interval is None: + return if backup_interval not in [6, 12, 24]: raise ArgumentUsageError("Incorrect value for --backup-interval. Allowed values: [6, 12, 24]")