Skip to content

Commit 698fe42

Browse files
committed
update code
1 parent efcb7e0 commit 698fe42

File tree

3 files changed

+66
-12
lines changed

3 files changed

+66
-12
lines changed

src/azure-cli/azure/cli/command_modules/mysql/_params.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,18 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many-
122122
help='Enable or disable accelerated logs. Only support for Business Critical tier. Default value is Enabled.'
123123
)
124124

125+
faster_restore_arg_type = CLIArgumentType(
126+
arg_type=get_enum_type(['Enabled', 'Disabled']),
127+
options_list=['--faster-restore'],
128+
help='Enable or disable Auto scale IOPS configuration for both the source and the newly restored server to enable faster restore.'
129+
)
130+
131+
faster_provisioning_arg_type = CLIArgumentType(
132+
arg_type=get_enum_type(['Enabled', 'Disabled']),
133+
options_list=['--faster-provisioning'],
134+
help='Enable or disable Auto scale IOPS configuration for both the source and the newly provisioned replica server to enable faster provisioning.'
135+
)
136+
125137
storage_redundancy_arg_type = CLIArgumentType(
126138
arg_type=get_enum_type(['LocalRedundancy', 'ZoneRedundancy']),
127139
options_list=['--storage-redundancy'],
@@ -256,6 +268,12 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many-
256268
validator=validate_byok_identity
257269
)
258270

271+
backup_interval_arg_type = CLIArgumentType(
272+
type=int,
273+
options_list=['--backup-interval'],
274+
help='The interval between backups in hours. Accepted values are 24, 12 and 6. The default value is 24.'
275+
)
276+
259277
key_arg_type = CLIArgumentType(
260278
options_list=['--key'],
261279
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-
342360
c.argument('accelerated_logs', arg_type=accelerated_logs_arg_type)
343361
c.argument('backup_retention', default=7, arg_type=mysql_backup_retention_arg_type)
344362
c.argument('backup_byok_identity', arg_type=backup_identity_arg_type)
363+
c.argument('backup_interval', arg_type=backup_interval_arg_type)
345364
c.argument('backup_byok_key', arg_type=backup_key_arg_type)
346365
c.argument('byok_identity', arg_type=identity_arg_type)
347366
c.argument('byok_key', arg_type=key_arg_type)
@@ -422,6 +441,7 @@ def load_arguments(self, _): # pylint: disable=too-many-statements, too-many-
422441
c.argument('storage_gb', arg_type=storage_gb_arg_type)
423442
c.argument('auto_grow', arg_type=auto_grow_arg_type)
424443
c.argument('accelerated_logs', arg_type=accelerated_logs_arg_type)
444+
c.argument('faster_restore', arg_type=faster_restore_arg_type)
425445
c.argument('backup_retention', arg_type=mysql_backup_retention_arg_type)
426446
c.argument('geo_redundant_backup', arg_type=geo_redundant_backup_arg_type)
427447
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-
574594
c.argument('storage_gb', arg_type=storage_gb_arg_type)
575595
c.argument('iops', arg_type=iops_arg_type)
576596
c.argument('storage_redundancy', arg_type=storage_redundancy_arg_type)
597+
c.argument('faster_provisioning', arg_type=faster_provisioning_arg_type)
577598
c.argument('database_port', arg_type=database_port_arg_type)
578599
c.argument('backup_retention', arg_type=mysql_backup_retention_arg_type)
579600
c.argument('geo_redundant_backup', arg_type=geo_redundant_backup_arg_type)

src/azure-cli/azure/cli/command_modules/mysql/_validators.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ def mysql_restore_tier_validator(target_tier, source_tier, sku_info):
105105
def mysql_arguments_validator(db_context, location, tier, sku_name, storage_gb, backup_retention=None, server_name=None,
106106
zone=None, standby_availability_zone=None, high_availability=None, backup_byok_key=None,
107107
public_access=None, version=None, auto_grow=None, replication_role=None, subnet=None,
108-
byok_identity=None, backup_byok_identity=None, byok_key=None, geo_redundant_backup=None,
109-
disable_data_encryption=None, iops=None, auto_io_scaling=None, accelerated_logs=None,
110-
storage_redundancy=None, instance=None, data_source_type=None, mode=None,
111-
data_source_backup_dir=None, data_source_sas_token=None):
108+
byok_identity=None, backup_interval=None, backup_byok_identity=None, byok_key=None,
109+
geo_redundant_backup=None, disable_data_encryption=None, iops=None, auto_io_scaling=None,
110+
accelerated_logs=None, storage_redundancy=None, instance=None, data_source_type=None,
111+
mode=None, data_source_backup_dir=None, data_source_sas_token=None):
112112
validate_server_name(db_context, server_name, 'Microsoft.DBforMySQL/flexibleServers')
113113

114114
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,
132132
mysql_auto_grow_validator(auto_grow, replication_role, high_availability, instance)
133133
_mysql_byok_validator(byok_identity, backup_byok_identity, byok_key, backup_byok_key,
134134
disable_data_encryption, geo_redundant_backup, instance)
135+
_mysql_backup_interval_validator(backup_interval)
135136
_mysql_iops_validator(iops, auto_io_scaling, instance)
136137
mysql_accelerated_logs_validator(accelerated_logs, tier)
137138
storage_redundancy_validator(storage_redundancy, tier)
@@ -302,6 +303,11 @@ def _mysql_byok_validator(byok_identity, backup_byok_identity, byok_key, backup_
302303
"Use the primary server instead.")
303304

304305

306+
def _mysql_backup_interval_validator(backup_interval):
307+
if backup_interval not in [6, 12, 24]:
308+
raise ArgumentUsageError("Incorrect value for --backup-interval. Allowed values: [6, 12, 24]")
309+
310+
305311
def _mysql_iops_validator(iops, auto_io_scaling, instance):
306312
if iops is None:
307313
return

src/azure-cli/azure/cli/command_modules/mysql/custom.py

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ def flexible_server_create(cmd, client,
339339
high_availability=None, zone=None, standby_availability_zone=None,
340340
iops=None, auto_grow=None, auto_scale_iops=None, accelerated_logs=None, storage_redundancy=None,
341341
geo_redundant_backup=None, byok_identity=None, backup_byok_identity=None, byok_key=None, backup_byok_key=None,
342-
maintenance_policy_patch_strategy=None, yes=False):
342+
backup_interval=None, maintenance_policy_patch_strategy=None, yes=False):
343343
# Generate missing parameters
344344
location, resource_group_name, server_name = generate_missing_parameters(cmd, location, resource_group_name, server_name)
345345
db_context = DbContext(
@@ -371,6 +371,7 @@ def flexible_server_create(cmd, client,
371371
version=version,
372372
geo_redundant_backup=geo_redundant_backup,
373373
byok_identity=byok_identity,
374+
backup_interval=backup_interval,
374375
backup_byok_identity=backup_byok_identity,
375376
byok_key=byok_key,
376377
backup_byok_key=backup_byok_key,
@@ -414,7 +415,7 @@ def flexible_server_create(cmd, client,
414415
log_on_disk=accelerated_logs,
415416
storage_redundancy=storage_redundancy)
416417

417-
backup = models.Backup(backup_retention_days=backup_retention, geo_redundant_backup=geo_redundant_backup)
418+
backup = models.Backup(backup_retention_days=backup_retention, backup_interval_hours=backup_interval, geo_redundant_backup=geo_redundant_backup)
418419

419420
sku = models.MySQLServerSku(name=sku_name, tier=tier)
420421

@@ -707,8 +708,8 @@ def flexible_server_import_replica_stop(client, resource_group_name, server_name
707708
def flexible_server_restore(cmd, client, resource_group_name, server_name, source_server, restore_point_in_time=None, zone=None,
708709
no_wait=False, subnet=None, subnet_address_prefix=None, vnet=None, vnet_address_prefix=None,
709710
private_dns_zone_arguments=None, public_access=None, yes=False, sku_name=None, tier=None, database_port=None,
710-
storage_gb=None, auto_grow=None, accelerated_logs=None, storage_redundancy=None, backup_retention=None,
711-
geo_redundant_backup=None, tags=None):
711+
storage_gb=None, auto_grow=None, accelerated_logs=None, faster_restore=None, storage_redundancy=None,
712+
backup_retention=None, geo_redundant_backup=None, tags=None):
712713
provider = 'Microsoft.DBforMySQL'
713714
server_name = server_name.lower()
714715

@@ -761,6 +762,11 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc
761762
else:
762763
mysql_accelerated_logs_validator(accelerated_logs, tier)
763764

765+
if not faster_restore:
766+
auto_io_scaling = source_server_object.storage.auto_io_scaling
767+
else:
768+
auto_io_scaling = _determine_auto_io_scaling_by_faster_restore(faster_restore)
769+
764770
if not storage_redundancy:
765771
storage_redundancy = source_server_object.storage.storage_redundancy
766772
else:
@@ -788,7 +794,7 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc
788794
iops_input=source_server_object.storage.iops, tier=tier, sku_name=sku_name)
789795

790796
storage = models.Storage(storage_size_gb=storage_gb, iops=iops, auto_grow=auto_grow,
791-
auto_io_scaling=source_server_object.storage.auto_io_scaling,
797+
auto_io_scaling=auto_io_scaling,
792798
log_on_disk=accelerated_logs, storage_redundancy=storage_redundancy)
793799

794800
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
13231329
# Custom functions for server replica, will add MySQL part after backend ready in future
13241330
def flexible_replica_create(cmd, client, resource_group_name, source_server, replica_name, location=None, tags=None, sku_name=None,
13251331
private_dns_zone_arguments=None, vnet=None, subnet=None, zone=None, public_access=None, no_wait=False,
1326-
storage_gb=None, iops=None, storage_redundancy=None, geo_redundant_backup=None, backup_retention=None,
1327-
tier=None, database_port=None):
1332+
storage_gb=None, iops=None, storage_redundancy=None, faster_provisioning=None, geo_redundant_backup=None,
1333+
backup_retention=None, tier=None, database_port=None):
13281334
provider = 'Microsoft.DBforMySQL'
13291335
replica_name = replica_name.lower()
13301336

@@ -1369,6 +1375,11 @@ def flexible_replica_create(cmd, client, resource_group_name, source_server, rep
13691375
if not iops:
13701376
iops = source_server_object.storage.iops
13711377

1378+
if not faster_provisioning:
1379+
auto_io_scaling = source_server_object.storage.auto_io_scaling
1380+
else:
1381+
auto_io_scaling = _determine_auto_io_scaling_by_faster_provisioning(faster_provisioning)
1382+
13721383
if not storage_redundancy:
13731384
storage_redundancy = source_server_object.storage.storage_redundancy
13741385
else:
@@ -1379,7 +1390,7 @@ def flexible_replica_create(cmd, client, resource_group_name, source_server, rep
13791390
storage = models.Storage(storage_size_gb=storage_gb,
13801391
iops=iops,
13811392
auto_grow="Enabled",
1382-
auto_io_scaling=source_server_object.storage.auto_io_scaling,
1393+
auto_io_scaling=auto_io_scaling,
13831394
storage_redundancy=storage_redundancy)
13841395

13851396
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):
16571668
return iops
16581669

16591670

1671+
def _determine_auto_io_scaling_by_faster_restore(faster_restore):
1672+
if faster_restore.lower() == 'enabled':
1673+
logger.info("You have selected Faster Restore as Enabled. This will activate Auto scale IOPS configuration "
1674+
"for both the source and the newly restored server to enable faster restore. "
1675+
"You can disable the Auto scale IOPS settings later, if needed.")
1676+
return faster_restore
1677+
1678+
1679+
def _determine_auto_io_scaling_by_faster_provisioning(faster_restore):
1680+
if faster_restore.lower() == 'enabled':
1681+
logger.info("You have selected Faster Provisioning as Enabled. This will activate Auto scale IOPS configuration "
1682+
"for both the source and the newly provisioned replica server to enable faster provisioning. "
1683+
"You can disable the Auto scale IOPS settings later, if needed.")
1684+
return faster_restore
1685+
1686+
16601687
def _determine_acceleratedLogs(accelerated_logs, tier):
16611688
if accelerated_logs is None:
16621689
if tier == "MemoryOptimized":

0 commit comments

Comments
 (0)