@@ -1200,4 +1200,150 @@ function Test-VMSSReplication {
1200
1200
# Get recovery vm and verify
1201
1201
$recvm = get-azVm - ResourceGroupName $recRgName - Name $vmName
1202
1202
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
1203
1349
}
0 commit comments