3232from ._validators import mysql_arguments_validator , mysql_auto_grow_validator , mysql_georedundant_backup_validator , mysql_restore_tier_validator , mysql_accelerated_logs_validator , \
3333 mysql_retention_validator , mysql_sku_name_validator , mysql_storage_validator , validate_mysql_replica , validate_server_name , \
3434 validate_mysql_tier_update , validate_and_format_restore_point_in_time , validate_public_access_server , mysql_import_single_server_ready_validator , \
35- mysql_import_version_validator , mysql_import_storage_validator , validate_and_format_maintenance_start_time
35+ mysql_import_version_validator , mysql_import_storage_validator , validate_and_format_maintenance_start_time , storage_redundancy_validator
3636
3737logger = get_logger (__name__ )
3838DELEGATION_SERVICE_NAME = "Microsoft.DBforMySQL/flexibleServers"
@@ -337,8 +337,8 @@ def flexible_server_create(cmd, client,
337337 subnet = None , subnet_address_prefix = None , vnet = None , vnet_address_prefix = None ,
338338 private_dns_zone_arguments = None , public_access = None ,
339339 high_availability = None , zone = None , standby_availability_zone = None ,
340- iops = None , auto_grow = None , auto_scale_iops = None , accelerated_logs = None , geo_redundant_backup = None ,
341- byok_identity = None , backup_byok_identity = None , byok_key = None , backup_byok_key = None ,
340+ iops = None , auto_grow = None , auto_scale_iops = None , accelerated_logs = None , storage_redundancy = None ,
341+ geo_redundant_backup = None , byok_identity = None , backup_byok_identity = None , byok_key = None , backup_byok_key = None ,
342342 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 )
@@ -376,6 +376,7 @@ def flexible_server_create(cmd, client,
376376 backup_byok_key = backup_byok_key ,
377377 auto_io_scaling = auto_scale_iops ,
378378 accelerated_logs = accelerated_logs ,
379+ storage_redundancy = storage_redundancy ,
379380 iops = iops )
380381 list_skus_info = get_mysql_list_skus_info (db_context .cmd , location )
381382 iops_info = list_skus_info ['iops_info' ]
@@ -404,11 +405,14 @@ def flexible_server_create(cmd, client,
404405
405406 accelerated_logs = _determine_acceleratedLogs (accelerated_logs , tier )
406407
408+ storage_redundancy = _determine_storage_redundancy (storage_redundancy , tier )
409+
407410 storage = models .Storage (storage_size_gb = storage_gb ,
408411 iops = iops ,
409412 auto_grow = auto_grow ,
410413 auto_io_scaling = auto_scale_iops ,
411- log_on_disk = accelerated_logs )
414+ log_on_disk = accelerated_logs ,
415+ storage_redundancy = storage_redundancy )
412416
413417 backup = models .Backup (backup_retention_days = backup_retention , geo_redundant_backup = geo_redundant_backup )
414418
@@ -703,7 +707,8 @@ def flexible_server_import_replica_stop(client, resource_group_name, server_name
703707def flexible_server_restore (cmd , client , resource_group_name , server_name , source_server , restore_point_in_time = None , zone = None ,
704708 no_wait = False , subnet = None , subnet_address_prefix = None , vnet = None , vnet_address_prefix = None ,
705709 private_dns_zone_arguments = None , public_access = None , yes = False , sku_name = None , tier = None , database_port = None ,
706- storage_gb = None , auto_grow = None , accelerated_logs = None , backup_retention = None , geo_redundant_backup = None , tags = None ):
710+ storage_gb = None , auto_grow = None , accelerated_logs = None , storage_redundancy = None , backup_retention = None ,
711+ geo_redundant_backup = None , tags = None ):
707712 provider = 'Microsoft.DBforMySQL'
708713 server_name = server_name .lower ()
709714
@@ -756,6 +761,11 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc
756761 else :
757762 mysql_accelerated_logs_validator (accelerated_logs , tier )
758763
764+ if not storage_redundancy :
765+ storage_redundancy = source_server_object .storage .storage_redundancy
766+ else :
767+ storage_redundancy_validator (storage_redundancy , tier )
768+
759769 if not backup_retention :
760770 backup_retention = source_server_object .backup .backup_retention_days
761771 else :
@@ -779,7 +789,7 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc
779789
780790 storage = models .Storage (storage_size_gb = storage_gb , iops = iops , auto_grow = auto_grow ,
781791 auto_io_scaling = source_server_object .storage .auto_io_scaling ,
782- log_on_disk = accelerated_logs )
792+ log_on_disk = accelerated_logs , storage_redundancy = storage_redundancy )
783793
784794 backup = models .Backup (backup_retention_days = backup_retention , geo_redundant_backup = geo_redundant_backup )
785795
@@ -842,7 +852,8 @@ def flexible_server_restore(cmd, client, resource_group_name, server_name, sourc
842852def flexible_server_georestore (cmd , client , resource_group_name , server_name , source_server , location , zone = None , no_wait = False ,
843853 subnet = None , subnet_address_prefix = None , vnet = None , vnet_address_prefix = None , tags = None ,
844854 private_dns_zone_arguments = None , public_access = None , yes = False , sku_name = None , tier = None ,
845- storage_gb = None , auto_grow = None , accelerated_logs = None , backup_retention = None , geo_redundant_backup = None ):
855+ storage_gb = None , auto_grow = None , accelerated_logs = None , storage_redundancy = None ,
856+ backup_retention = None , geo_redundant_backup = None ):
846857 provider = 'Microsoft.DBforMySQL'
847858 server_name = server_name .lower ()
848859
@@ -889,6 +900,11 @@ def flexible_server_georestore(cmd, client, resource_group_name, server_name, so
889900 else :
890901 mysql_accelerated_logs_validator (accelerated_logs , tier )
891902
903+ if not storage_redundancy :
904+ storage_redundancy = source_server_object .storage .storage_redundancy
905+ else :
906+ storage_redundancy_validator (storage_redundancy , tier )
907+
892908 if not backup_retention :
893909 backup_retention = source_server_object .backup .backup_retention_days
894910 else :
@@ -915,7 +931,7 @@ def flexible_server_georestore(cmd, client, resource_group_name, server_name, so
915931
916932 storage = models .Storage (storage_size_gb = storage_gb , iops = iops , auto_grow = auto_grow ,
917933 auto_io_scaling = source_server_object .storage .auto_io_scaling ,
918- log_on_disk = accelerated_logs )
934+ log_on_disk = accelerated_logs , storage_redundancy = storage_redundancy )
919935
920936 backup = models .Backup (backup_retention_days = backup_retention , geo_redundant_backup = geo_redundant_backup )
921937
@@ -1311,7 +1327,8 @@ def flexible_parameter_update_batch(client, server_name, resource_group_name, so
13111327# Custom functions for server replica, will add MySQL part after backend ready in future
13121328def flexible_replica_create (cmd , client , resource_group_name , source_server , replica_name , location = None , tags = None , sku_name = None ,
13131329 private_dns_zone_arguments = None , vnet = None , subnet = None , zone = None , public_access = None , no_wait = False ,
1314- storage_gb = None , iops = None , geo_redundant_backup = None , backup_retention = None , tier = None , database_port = None ):
1330+ storage_gb = None , iops = None , storage_redundancy = None , geo_redundant_backup = None , backup_retention = None ,
1331+ tier = None , database_port = None ):
13151332 provider = 'Microsoft.DBforMySQL'
13161333 replica_name = replica_name .lower ()
13171334
@@ -1356,12 +1373,18 @@ def flexible_replica_create(cmd, client, resource_group_name, source_server, rep
13561373 if not iops :
13571374 iops = source_server_object .storage .iops
13581375
1376+ if not storage_redundancy :
1377+ storage_redundancy = source_server_object .storage .storage_redundancy
1378+ else :
1379+ storage_redundancy_validator (storage_redundancy , tier )
1380+
13591381 identity , data_encryption = get_identity_and_data_encryption (source_server_object )
13601382
13611383 storage = models .Storage (storage_size_gb = storage_gb ,
13621384 iops = iops ,
13631385 auto_grow = "Enabled" ,
1364- auto_io_scaling = source_server_object .storage .auto_io_scaling )
1386+ auto_io_scaling = source_server_object .storage .auto_io_scaling ,
1387+ storage_redundancy = storage_redundancy )
13651388
13661389 backup = models .Backup (backup_retention_days = backup_retention , geo_redundant_backup = geo_redundant_backup )
13671390
@@ -1649,6 +1672,15 @@ def _determine_acceleratedLogs(accelerated_logs, tier):
16491672 return accelerated_logs
16501673
16511674
1675+ def _determine_storage_redundancy (storage_redundancy , tier ):
1676+ if storage_redundancy is None :
1677+ if tier == "MemoryOptimized" :
1678+ storage_redundancy = "ZoneRedundancy"
1679+ else :
1680+ storage_redundancy = "LocalRedundancy"
1681+ return storage_redundancy
1682+
1683+
16521684def get_free_iops (storage_in_mb , iops_info , tier , sku_name ):
16531685 free_iops = MINIMUM_IOPS + (storage_in_mb // 1024 ) * 3
16541686 max_supported_iops = iops_info [tier ][sku_name ] # free iops cannot exceed maximum supported iops for the sku
0 commit comments