@@ -924,4 +924,154 @@ function Test-RecoveryPlanReplication {
924
924
# Failover
925
925
$failoverjob = Start-AzRecoveryServicesAsrUnPlannedFailoverJob - RecoveryPlan $RecoveryPlan - Direction PrimaryToRecovery - PerformSourceSideAction
926
926
WaitForJobCompletion - JobId $failoverjob.Name
927
+ }
928
+
929
+ <#
930
+ . SYNOPSIS
931
+ Test VMSS replication new parametersets
932
+ #>
933
+
934
+ function Test-VMSSReplication {
935
+ param ([string ] $seed = ' 1227' )
936
+ $primaryPolicyName = getPrimaryPolicy
937
+ $recoveryPolicyName = getRecoveryPolicy
938
+
939
+ $primaryContainerMappingName = getPrimaryContainerMapping
940
+ $recoveryContainerMappingName = getRecoveryContainerMapping
941
+
942
+ $primaryContainerName = getPrimaryContainer
943
+ $recoveryContainerName = getRecoveryContainer
944
+ $vaultRgLocation = getVaultRgLocation
945
+ $vaultName = getVaultName
946
+ $vaultLocation = getVaultLocation
947
+ $vaultRg = getVaultRg
948
+ $primaryLocation = getPrimaryLocation
949
+ $recoveryLocation = getRecoveryLocation
950
+ $primaryFabricName = getPrimaryFabric
951
+ $recoveryFabricName = getRecoveryFabric
952
+ $RecoveryReplicaDiskAccountType = " Premium_LRS"
953
+ $RecoveryTargetDiskAccountType = " Premium_LRS"
954
+ $policyName = getPrimaryPolicy
955
+ $mappingName = getPrimaryContainerMapping
956
+ $recMappingName = getRecoveryContainerMapping
957
+ $primaryNetMapping = getPrimaryNetworkMapping
958
+ $recoveryNetMapping = getRecoveryNetworkMapping
959
+
960
+ # create recovery side resources
961
+ $recRgName = getRecoveryResourceGroupName
962
+ New-AzResourceGroup - name $recRgName - location $recoveryLocation - force
963
+ [Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities ]::Wait(20 * 1000 )
964
+ $RecoveryAzureNetworkId = createRecoveryNetworkId
965
+ $index = $RecoveryAzureNetworkId.IndexOf (" /providers/" )
966
+ $recRg = $RecoveryAzureNetworkId.Substring (0 , $index )
967
+ # create virtual Machine scale set
968
+ $vmssConfig = New-AzVmssConfig - Location $recoveryLocation - PlatformFaultDomainCount 1 - SinglePlacementGroup 0
969
+ $recVmss = new-azvmss - resourcegroupname $recRgName - vmscalesetname ' vmss-asr' - virtualmachinescaleset $vmssConfig
970
+ $recVmss1 = new-azvmss - resourcegroupname $recRgName - vmscalesetname ' vmss1-asr' - virtualmachinescaleset $vmssConfig
971
+
972
+ # create primary
973
+ $vmName = getAzureVmName
974
+ New-AzResourceGroup - name $vmName - location $primaryLocation - force
975
+ [Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities ]::Wait(20 * 1000 )
976
+ $logStg = createCacheStorageAccount
977
+ $recLogStg = createRecoveryCacheStorageAccount
978
+
979
+ $v2VmId = createAzureVm
980
+ $vm = get-azVm - ResourceGroupName $vmName - Name $vmName
981
+ $vhdid = $vm.StorageProfile.OSDisk.ManagedDisk.Id
982
+ $index = $vm.Id.IndexOf (" /providers/" )
983
+ $Rg = $vm.Id.Substring (0 , $index )
984
+ $PrimaryAzureNetworkId = $Rg + " /providers/Microsoft.Network/virtualNetworks/" + $vmName
985
+
986
+ # vault Creation
987
+ New-AzResourceGroup - name $vaultRg - location $vaultRgLocation - force
988
+ [Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities ]::Wait(20 * 1000 )
989
+ New-AzRecoveryServicesVault - ResourceGroupName $vaultRg - Name $vaultName - Location $vaultLocation
990
+ [Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities ]::Wait(20 * 1000 )
991
+ $Vault = Get-AzRecoveryServicesVault - ResourceGroupName $vaultRg - Name $vaultName
992
+ Set-ASRVaultContext - Vault $Vault
993
+
994
+ # fabric Creation
995
+ $fabJob = New-AzRecoveryServicesAsrFabric - Azure - Name $primaryFabricName - Location $primaryLocation
996
+ WaitForJobCompletion - JobId $fabJob.Name
997
+ $fab = Get-AzRecoveryServicesAsrFabric - Name $primaryFabricName
998
+ Assert-true { $fab.name -eq $primaryFabricName }
999
+ Assert-AreEqual $fab.FabricSpecificDetails.Location $primaryLocation
1000
+
1001
+ $fabJob = New-AzRecoveryServicesAsrFabric - Azure - Name $recoveryFabricName - Location $recoveryLocation
1002
+ WaitForJobCompletion - JobId $fabJob.Name
1003
+ $fab = Get-AzRecoveryServicesAsrFabric - Name $recoveryFabricName
1004
+ Assert-true { $fab.name -eq $recoveryFabricName }
1005
+ Assert-AreEqual $fab.FabricSpecificDetails.Location $recoveryLocation
1006
+ $pf = get-asrFabric - Name $primaryFabricName
1007
+ $rf = get-asrFabric - Name $recoveryFabricName
1008
+
1009
+ # Container creation
1010
+ $job = New-AzRecoveryServicesAsrProtectionContainer - Name $primaryContainerName - Fabric $pf
1011
+ WaitForJobCompletion - JobId $Job.Name
1012
+ $pc = Get-asrProtectionContainer - name $primaryContainerName - Fabric $pf
1013
+ Assert-NotNull ($pc )
1014
+ $job = New-AzRecoveryServicesAsrProtectionContainer - Name $recoveryContainerName - Fabric $rf
1015
+ WaitForJobCompletion - JobId $Job.Name
1016
+ $rc = Get-asrProtectionContainer - name $recoveryContainerName - Fabric $rf
1017
+ Assert-NotNull ($rc )
1018
+
1019
+ # create policy and mapping
1020
+ $job = New-AzRecoveryServicesAsrPolicy - Name $policyName - RecoveryPointRetentionInHours 12 - AzureToAzure
1021
+ WaitForJobCompletion - JobId $job.Name
1022
+ $policy = Get-AzRecoveryServicesAsrPolicy - Name $policyName
1023
+ $job = New-AzRecoveryServicesAsrProtectionContainerMapping - Name $mappingName - Policy $policy - PrimaryProtectionContainer $pc - RecoveryProtectionContainer $rc
1024
+ WaitForJobCompletion - JobId $job.Name
1025
+ $mapping = Get-AzRecoveryServicesAsrProtectionContainerMapping - Name $mappingName - ProtectionContainer $pc
1026
+
1027
+ # network mapping
1028
+ $job = New-AzRecoveryServicesAsrNetworkMapping - AzureToAzure - Name $primaryNetMapping - PrimaryFabric $pf - PrimaryAzureNetworkId $PrimaryAzureNetworkId - RecoveryFabric $rf - RecoveryAzureNetworkId $RecoveryAzureNetworkId
1029
+ WaitForJobCompletion - JobId $job.Name
1030
+
1031
+ # Reverse Conatiner mapping
1032
+ $job = New-AzRecoveryServicesAsrProtectionContainerMapping - Name $recMappingName - Policy $policy - PrimaryProtectionContainer $rc - RecoveryProtectionContainer $pc
1033
+ WaitForJobCompletion - JobId $job.Name
1034
+ $revMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping - Name $recMappingName - ProtectionContainer $rc
1035
+
1036
+ # Reverse network mapping
1037
+ $job = New-AzRecoveryServicesAsrNetworkMapping - AzureToAzure - Name $recoveryNetMapping - PrimaryFabric $rf - PrimaryAzureNetworkId $RecoveryAzureNetworkId - RecoveryFabric $pf - RecoveryAzureNetworkId $PrimaryAzureNetworkId
1038
+ WaitForJobCompletion - JobId $job.Name
1039
+
1040
+ # enable Replication
1041
+ $v = New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig - managed - LogStorageAccountId $logStg `
1042
+ - DiskId $vhdid - RecoveryResourceGroupId $recRg - RecoveryReplicaDiskAccountType $RecoveryReplicaDiskAccountType `
1043
+ - RecoveryTargetDiskAccountType $RecoveryTargetDiskAccountType
1044
+ $enableDRjob = New-AzRecoveryServicesAsrReplicationProtectedItem - AzureToAzure - AzureVmId $vm.Id - Name $vmName - ProtectionContainerMapping $mapping - RecoveryResourceGroupId $recRg - AzureToAzureDiskReplicationConfiguration $v - RecoveryVirtualMachineScaleSetId $recVmss.Id
1045
+ WaitForJobCompletion - JobId $enableDRjob.Name
1046
+ WaitForIRCompletion - affectedObjectId $enableDRjob.TargetObjectId
1047
+
1048
+ # Validate vmss Set in replicated vm properties
1049
+ $pe = Get-AzRecoveryServicesAsrReplicationProtectedItem - ProtectionContainer $pc - Name $vmName
1050
+ Assert-NotNull ($pe.providerSpecificDetails.RecoveryVirtualMachineScaleSetId )
1051
+
1052
+ # Update Vmpropertie
1053
+ $updateDRjob = Set-AzRecoveryServicesAsrReplicationProtectedItem - InputObject $pe - RecoveryVirtualMachineScaleSetId $recVmss1.Id
1054
+ WaitForJobCompletion - JobId $updateDRjob.Name
1055
+ $pe = Get-AzRecoveryServicesAsrReplicationProtectedItem - ProtectionContainer $pc - Name $vmName
1056
+ Assert-NotNull ($pe.providerSpecificDetails.RecoveryVirtualMachineScaleSetId )
1057
+
1058
+ # Failover
1059
+ $failoverjob = Start-AzRecoveryServicesAsrUnPlannedFailoverJob - ReplicationProtectedItem $pe - Direction PrimaryToRecovery - PerformSourceSideAction
1060
+ WaitForJobCompletion - JobId $failoverjob.Name
1061
+ # Get recovery vm and verify
1062
+ $recvm = get-azVm - ResourceGroupName $recRgName - Name $vmName
1063
+ Assert-NotNull ($recvm.virtualmachinescaleset.Id );
1064
+
1065
+ # Switch replication
1066
+ $vm = get-azVm - ResourceGroupName $vmName - Name $vmName
1067
+ $vhdid = $recvm.StorageProfile.OSDisk.ManagedDisk.Id
1068
+ $v = New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig - managed - LogStorageAccountId $recLogStg `
1069
+ - DiskId $vhdid - RecoveryResourceGroupId $Rg - RecoveryReplicaDiskAccountType $RecoveryReplicaDiskAccountType `
1070
+ - RecoveryTargetDiskAccountType $RecoveryTargetDiskAccountType
1071
+ [Microsoft.Rest.ClientRuntime.Azure.TestFramework.TestUtilities ]::Wait(600 * 1000 )
1072
+ $Switchjob = Update-AzureRmRecoveryServicesAsrProtectionDirection - AzureToAzure - ProtectionContainerMapping $revMapping [0 ] - RecoveryResourceGroupId $Rg - ReplicationProtectedItem $pe - RecoveryVirtualMachineScaleSetId $vm.virtualmachinescaleset.Id - AzureToAzureDiskReplicationConfiguration $v
1073
+ WaitForJobCompletion - JobId $Switchjob.Name
1074
+
1075
+ $pe = Get-AzRecoveryServicesAsrReplicationProtectedItem - ProtectionContainer $rc - Name $vmName
1076
+ Assert-NotNull ($pe.providerSpecificDetails.RecoveryVirtualMachineScaleSetId )
927
1077
}
0 commit comments