Skip to content

Commit 33374d9

Browse files
[ASR][A2A] Adding support for capacity reservation in Azure Site Recovery (Azure#16243)
* caapcity reservation changes * Tests * Added change log * Test update * update * update Co-authored-by: subashchandra31 <[email protected]>
1 parent eed22b0 commit 33374d9

File tree

124 files changed

+1566318
-1544615
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+1566318
-1544615
lines changed

src/RecoveryServices/RecoveryServices.SiteRecovery.Test/RecoveryServices.SiteRecovery.Test.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<PsModuleName>RecoveryServices.SiteRecovery</PsModuleName>
@@ -16,7 +16,7 @@
1616
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices" Version="4.3.2-preview" />
1717
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices.Backup" Version="4.2.0-preview" />
1818
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.3.0" />
19-
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices.SiteRecovery" Version="2.1.5-preview" />
19+
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices.SiteRecovery" Version="2.1.6-preview" />
2020
</ItemGroup>
2121

2222
<ItemGroup>

src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/A2ATestsHelper.ps1

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,23 @@ function createAzureVmInProximityPlacementgroup{
196196
return $vm.Id
197197
}
198198

199+
function createAzureVmForCRG{
200+
param([string]$primaryLocation)
201+
202+
$VMLocalAdminUser = "adminUser"
203+
$PasswordString = $(Get-RandomSuffix 12)
204+
$Password=$PasswordString| ConvertTo-SecureString -Force -AsPlainText
205+
$VMLocalAdminSecurePassword = $Password
206+
$VMLocation = getPrimaryLocation
207+
$VMName = getAzureVmName
208+
$domain = "domain"+ $seed
209+
$password=$VMLocalAdminSecurePassword|ConvertTo-SecureString -AsPlainText -Force
210+
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $password);
211+
$vm = New-AzVM -Name $VMName -Credential $Credential -location $VMLocation -Image RHEL -DomainNameLabel $domain -Size "Standard_Ds1_v2"
212+
return $vm.Id
213+
}
214+
215+
199216
function createAzureVmInAvailabilityZone{
200217
param([string]$primaryLocation)
201218

src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATests.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,5 +124,12 @@ public void A2AVMSSReplication()
124124
{
125125
this.RunPowerShellTest(_logger, Constants.NewModel, "Test-VMSSReplication");
126126
}
127+
128+
[Fact]
129+
[Trait(Category.AcceptanceType, Category.CheckIn)]
130+
public void A2ACRGReplication()
131+
{
132+
this.RunPowerShellTest(_logger, Constants.NewModel, "Test-CRGReplication");
133+
}
127134
}
128-
}
135+
}

src/RecoveryServices/RecoveryServices.SiteRecovery.Test/ScenarioTests/A2A/AsrA2ATests.ps1

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,4 +1200,150 @@ function Test-VMSSReplication {
12001200
#Get recovery vm and verify
12011201
$recvm = get-azVm -ResourceGroupName $recRgName -Name $vmName
12021202
Assert-NotNull($recvm.virtualmachinescaleset.Id);
1203+
}
1204+
1205+
1206+
<#
1207+
.SYNOPSIS
1208+
Test CRG replication new parametersets
1209+
#>
1210+
1211+
function Test-CRGReplication {
1212+
param([string] $seed = '2048')
1213+
$primaryPolicyName = getPrimaryPolicy
1214+
$recoveryPolicyName = getRecoveryPolicy
1215+
1216+
$primaryContainerMappingName = getPrimaryContainerMapping
1217+
$recoveryContainerMappingName = getRecoveryContainerMapping
1218+
1219+
$primaryContainerName = getPrimaryContainer
1220+
$recoveryContainerName = getRecoveryContainer
1221+
$vaultRgLocation = getVaultRgLocation
1222+
$vaultName = getVaultName
1223+
$vaultLocation = "centraluseuap"
1224+
$vaultRg = getVaultRg
1225+
$primaryLocation = getPrimaryLocation
1226+
$recoveryLocation = "centraluseuap"
1227+
$primaryFabricName = getPrimaryFabric
1228+
$recoveryFabricName = getRecoveryFabric
1229+
$RecoveryReplicaDiskAccountType = "Premium_LRS"
1230+
$RecoveryTargetDiskAccountType = "Premium_LRS"
1231+
$policyName = getPrimaryPolicy
1232+
$mappingName = getPrimaryContainerMapping
1233+
$recMappingName = getRecoveryContainerMapping
1234+
$primaryNetMapping = getPrimaryNetworkMapping
1235+
$recoveryNetMapping = getRecoveryNetworkMapping
1236+
$recoveryCRGName1 = "crg-a2a-pwsh-1-" + $seed;
1237+
$recoveryCRGName2 = "crg-a2a-pwsh-2-" + $seed;
1238+
$primaryCRGName = "crg-a2a-pwsh-p-" + $seed;
1239+
1240+
# Create recovery side resources
1241+
$recRgName = getRecoveryResourceGroupName
1242+
New-AzResourceGroup -name $recRgName -location $recoveryLocation -force
1243+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1244+
$RecoveryAzureNetworkId = createRecoveryNetworkId
1245+
$index = $RecoveryAzureNetworkId.IndexOf("/providers/")
1246+
$recRg = $RecoveryAzureNetworkId.Substring(0, $index)
1247+
1248+
# Create CRG
1249+
New-AzCapacityReservationGroup -ResourceGroupName $recRgName -Location $recoveryLocation -Name $recoveryCRGName1
1250+
New-AzCapacityReservationGroup -ResourceGroupName $recRgName -Location $recoveryLocation -Name $recoveryCRGName2
1251+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1252+
New-AzCapacityReservation -ResourceGroupName $recRgName -Location $recoveryLocation -ReservationGroupName $recoveryCRGName1 -Name "cr-a2a-pwsh" -Sku "Standard_Ds1_v2" -CapacityToReserve 1
1253+
New-AzCapacityReservation -ResourceGroupName $recRgName -Location $recoveryLocation -ReservationGroupName $recoveryCRGName2 -Name "cr-a2a-pwsh" -Sku "Standard_Ds1_v2" -CapacityToReserve 1
1254+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1255+
$recCRG1 = Get-AzCapacityReservationGroup -ResourceGroupName $recRgName -Name $recoveryCRGName1 -InstanceView
1256+
$recCRG2 = Get-AzCapacityReservationGroup -ResourceGroupName $recRgName -Name $recoveryCRGName2 -InstanceView
1257+
1258+
# Create primary side resources
1259+
$vmName = getAzureVmName
1260+
New-AzResourceGroup -name $vmName -location $primaryLocation -force
1261+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1262+
$logStg = createCacheStorageAccount
1263+
$recLogStg = createRecoveryCacheStorageAccount
1264+
1265+
$v2VmId = createAzureVmForCRG
1266+
$vm = get-azVm -ResourceGroupName $vmName -Name $vmName
1267+
$vhdid = $vm.StorageProfile.OSDisk.ManagedDisk.Id
1268+
$index = $vm.Id.IndexOf("/providers/")
1269+
$Rg = $vm.Id.Substring(0, $index)
1270+
$PrimaryAzureNetworkId = $Rg + "/providers/Microsoft.Network/virtualNetworks/" + $vmName
1271+
1272+
# Vault creation
1273+
New-AzResourceGroup -name $vaultRg -location $vaultRgLocation -force
1274+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1275+
New-AzRecoveryServicesVault -ResourceGroupName $vaultRg -Name $vaultName -Location $vaultLocation
1276+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1277+
$Vault = Get-AzRecoveryServicesVault -ResourceGroupName $vaultRg -Name $vaultName
1278+
Set-ASRVaultContext -Vault $Vault
1279+
1280+
# Fabric creation
1281+
$fabJob = New-AzRecoveryServicesAsrFabric -Azure -Name $primaryFabricName -Location $primaryLocation
1282+
WaitForJobCompletion -JobId $fabJob.Name
1283+
$fab = Get-AzRecoveryServicesAsrFabric -Name $primaryFabricName
1284+
Assert-true { $fab.name -eq $primaryFabricName }
1285+
Assert-AreEqual $fab.FabricSpecificDetails.Location $primaryLocation
1286+
1287+
$fabJob = New-AzRecoveryServicesAsrFabric -Azure -Name $recoveryFabricName -Location $recoveryLocation
1288+
WaitForJobCompletion -JobId $fabJob.Name
1289+
$fab = Get-AzRecoveryServicesAsrFabric -Name $recoveryFabricName
1290+
Assert-true { $fab.name -eq $recoveryFabricName }
1291+
Assert-AreEqual $fab.FabricSpecificDetails.Location $recoveryLocation
1292+
$pf = get-asrFabric -Name $primaryFabricName
1293+
$rf = get-asrFabric -Name $recoveryFabricName
1294+
1295+
# Container creation
1296+
$job = New-AzRecoveryServicesAsrProtectionContainer -Name $primaryContainerName -Fabric $pf
1297+
WaitForJobCompletion -JobId $Job.Name
1298+
$pc = Get-asrProtectionContainer -name $primaryContainerName -Fabric $pf
1299+
Assert-NotNull($pc)
1300+
$job = New-AzRecoveryServicesAsrProtectionContainer -Name $recoveryContainerName -Fabric $rf
1301+
WaitForJobCompletion -JobId $Job.Name
1302+
$rc = Get-asrProtectionContainer -name $recoveryContainerName -Fabric $rf
1303+
Assert-NotNull($rc)
1304+
1305+
# Create policy and mapping
1306+
$job = New-AzRecoveryServicesAsrPolicy -Name $policyName -RecoveryPointRetentionInHours 12 -AzureToAzure
1307+
WaitForJobCompletion -JobId $job.Name
1308+
$policy = Get-AzRecoveryServicesAsrPolicy -Name $policyName
1309+
$job = New-AzRecoveryServicesAsrProtectionContainerMapping -Name $mappingName -Policy $policy -PrimaryProtectionContainer $pc -RecoveryProtectionContainer $rc
1310+
WaitForJobCompletion -JobId $job.Name
1311+
$mapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -Name $mappingName -ProtectionContainer $pc
1312+
1313+
# Network mapping
1314+
$job = New-AzRecoveryServicesAsrNetworkMapping -AzureToAzure -Name $primaryNetMapping -PrimaryFabric $pf -PrimaryAzureNetworkId $PrimaryAzureNetworkId -RecoveryFabric $rf -RecoveryAzureNetworkId $RecoveryAzureNetworkId
1315+
WaitForJobCompletion -JobId $job.Name
1316+
1317+
# Reverse container mapping
1318+
$job = New-AzRecoveryServicesAsrProtectionContainerMapping -Name $recMappingName -Policy $policy -PrimaryProtectionContainer $rc -RecoveryProtectionContainer $pc
1319+
WaitForJobCompletion -JobId $job.Name
1320+
$revMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -Name $recMappingName -ProtectionContainer $rc
1321+
1322+
# Reverse network mapping
1323+
$job = New-AzRecoveryServicesAsrNetworkMapping -AzureToAzure -Name $recoveryNetMapping -PrimaryFabric $rf -PrimaryAzureNetworkId $RecoveryAzureNetworkId -RecoveryFabric $pf -RecoveryAzureNetworkId $PrimaryAzureNetworkId
1324+
WaitForJobCompletion -JobId $job.Name
1325+
1326+
# Enable replication
1327+
$v = New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -managed -LogStorageAccountId $logStg `
1328+
-DiskId $vhdid -RecoveryResourceGroupId $recRg -RecoveryReplicaDiskAccountType $RecoveryReplicaDiskAccountType `
1329+
-RecoveryTargetDiskAccountType $RecoveryTargetDiskAccountType
1330+
$enableDRjob = New-AzRecoveryServicesAsrReplicationProtectedItem -AzureToAzure -AzureVmId $vm.Id -Name $vmName -ProtectionContainerMapping $mapping -RecoveryResourceGroupId $recRg -AzureToAzureDiskReplicationConfiguration $v -RecoveryCapacityReservationGroupId $recCRG1.Id
1331+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1332+
[Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities]::Wait(20 * 1000)
1333+
WaitForJobCompletion -JobId $enableDRjob.Name
1334+
WaitForIRCompletion -affectedObjectId $enableDRjob.TargetObjectId
1335+
1336+
# Validate CRG in replicated vm properties
1337+
$pe = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $pc -Name $vmName
1338+
Assert-NotNull($pe.providerSpecificDetails.RecoveryCapacityReservationGroupId)
1339+
1340+
# Update Vm properties
1341+
$updateDRjob = Set-AzRecoveryServicesAsrReplicationProtectedItem -InputObject $pe -RecoveryCapacityReservationGroupId $recCRG2.Id
1342+
WaitForJobCompletion -JobId $updateDRjob.Name
1343+
$pe = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $pc -Name $vmName
1344+
Assert-NotNull($pe.providerSpecificDetails.RecoveryCapacityReservationGroupId)
1345+
1346+
# Failover
1347+
$failoverjob = Start-AzRecoveryServicesAsrUnPlannedFailoverJob -ReplicationProtectedItem $pe -Direction PrimaryToRecovery -PerformSourceSideAction
1348+
WaitForJobCompletion -JobId $failoverjob.Name
12031349
}

0 commit comments

Comments
 (0)