Skip to content

Commit e2fc2ab

Browse files
authored
[SQL] az sql failover-group create: Add support for multiple partner failover groups (#31782)
1 parent 09cf3c9 commit e2fc2ab

File tree

4 files changed

+10200
-5
lines changed

4 files changed

+10200
-5
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
DatabaseCapabilitiesAdditionalDetails,
5959
ElasticPoolCapabilitiesAdditionalDetails,
6060
FailoverPolicyType,
61+
FailoverReadOnlyEndpointPolicy,
6162
ResourceIdType,
6263
ServicePrincipalType,
6364
SqlServerMinimalTlsVersionType,
@@ -1720,6 +1721,11 @@ def _configure_security_policy_storage_params(arg_ctx):
17201721
arg_type=try_planned_before_forced_failover_param_type)
17211722
c.argument('secondary_type', help="Databases secondary type on partner server",
17221723
arg_type=get_enum_type(FailoverGroupDatabasesSecondaryType))
1724+
c.argument('partner_server_ids', nargs='+',
1725+
help="The list of partner server resource id's of the Failover Group")
1726+
c.argument('ro_failover_policy', help="The policy of the read only endpoint of the Failover Group",
1727+
arg_type=get_enum_type(FailoverReadOnlyEndpointPolicy))
1728+
c.argument('ro_endpoint_target', help="The resource id of the read only endpoint target server")
17231729

17241730
###############################################
17251731
# sql instance pool #

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

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ def _get_database_identity(
573573
def _failover_group_update_common(
574574
instance,
575575
failover_policy=None,
576-
grace_period=None,):
576+
grace_period=None):
577577
'''
578578
Updates the failover group grace period and failover policy. Common logic for both Sterling and Managed Instance
579579
'''
@@ -642,6 +642,11 @@ class FailoverPolicyType(Enum):
642642
manual = 'Manual'
643643

644644

645+
class FailoverReadOnlyEndpointPolicy(Enum):
646+
enabled = 'Enabled'
647+
disabled = 'Disabled'
648+
649+
645650
class FailoverGroupDatabasesSecondaryType(Enum):
646651
geo = 'Geo'
647652
standby = 'Standby'
@@ -6509,7 +6514,10 @@ def failover_group_create(
65096514
partner_resource_group=None,
65106515
failover_policy=FailoverPolicyType.manual.value,
65116516
grace_period=1,
6512-
add_db=None):
6517+
add_db=None,
6518+
partner_server_ids=None,
6519+
ro_failover_policy=FailoverReadOnlyEndpointPolicy.disabled.value,
6520+
ro_endpoint_target=None):
65136521
'''
65146522
Creates a failover group.
65156523
'''
@@ -6542,14 +6550,24 @@ def failover_group_create(
65426550
add_db,
65436551
[])
65446552

6553+
if partner_server_ids is not None:
6554+
print(partner_server_ids)
6555+
partner_servers = [PartnerInfo(id=p) for p in partner_server_ids]
6556+
else:
6557+
partner_servers = [partner_server]
6558+
6559+
if ro_endpoint_target is None:
6560+
ro_endpoint_target = partner_server_id
6561+
65456562
failover_group_params = FailoverGroup(
6546-
partner_servers=[partner_server],
6563+
partner_servers=partner_servers,
65476564
databases=databases,
65486565
read_write_endpoint=FailoverGroupReadWriteEndpoint(
65496566
failover_policy=failover_policy,
65506567
failover_with_data_loss_grace_period_minutes=grace_period),
65516568
read_only_endpoint=FailoverGroupReadOnlyEndpoint(
6552-
failover_policy="Disabled")
6569+
failover_policy=ro_failover_policy,
6570+
target_server=ro_endpoint_target)
65536571
)
65546572

65556573
if secondary_type is not None:
@@ -6571,7 +6589,10 @@ def failover_group_update(
65716589
failover_policy=None,
65726590
grace_period=None,
65736591
add_db=None,
6574-
remove_db=None):
6592+
remove_db=None,
6593+
ro_endpoint_target=None,
6594+
ro_failover_policy=None,
6595+
partner_server_ids=None):
65756596
'''
65766597
Updates the failover group.
65776598
'''
@@ -6599,6 +6620,13 @@ def failover_group_update(
65996620
if secondary_type is not None:
66006621
instance.secondary_type = secondary_type
66016622

6623+
if partner_server_ids is not None:
6624+
instance.partner_servers = [PartnerInfo(id=p) for p in partner_server_ids]
6625+
6626+
instance.read_only_endpoint = FailoverGroupReadOnlyEndpoint(
6627+
failover_policy=ro_failover_policy if ro_failover_policy is not None else instance.read_only_endpoint.failover_policy,
6628+
target_server=ro_endpoint_target if ro_endpoint_target is not None else instance.read_only_endpoint.target_server)
6629+
66026630
return instance
66036631

66046632

0 commit comments

Comments
 (0)