Skip to content

Commit

Permalink
Azure Site Recovery - RCM multi appliance support (#15757)
Browse files Browse the repository at this point in the history
* RCM multi appliance support

* added missing changes

* fixed md file online version
  • Loading branch information
pradheepm authored Aug 30, 2021
1 parent e96af04 commit e8eabf2
Show file tree
Hide file tree
Showing 128 changed files with 202,502 additions and 458,780 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices" Version="4.3.1-preview" />
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices.Backup" Version="4.1.9-preview" />
<PackageReference Include="Microsoft.Azure.Management.Storage" Version="14.3.0" />
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices.SiteRecovery" Version="2.1.4-preview" />
<PackageReference Include="Microsoft.Azure.Management.RecoveryServices.SiteRecovery" Version="2.1.5-preview" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,5 +126,12 @@ public void TestV2ARCMRecoveryPlan()
{
this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMRecoveryPlan");
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void TestV2ARCMSwitchAppliance()
{
this.RunPowerShellTest(_logger, Constants.NewModel, "Test-V2ARCMSwitchAppliance");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,37 @@
########################## Site Recovery Tests #############################

# Inputs
$vaultRg = "vmwaresrcrg"
$vaultName = "v2aRcm-pwsh-test"
$primaryFabricName = "v2aRcm-pwsh-testreplicationfabric"
$primaryContainerName = "v2aRcm-pwsh-test0afareplicationcontainer"
$vaultRg = "V2A-ECY"
$vaultName = "Rcm-Vault-150"
$primaryFabricName = "Rcm-Vault-150-vmwarefabric"
$primaryContainerName = "Rcm-Vault-4678replicationcontainer"
$policyName = "v2aRcm-pwsh-testpolicy"
$failbackPolicyName = "appconsistency-policy-failback"
$primaryContainerMappingName = "v2aRcm-pwsh-testmapping"
$recoveryContainerMappingName = "appconsistency-failback-containerpairing"

$vmName = "V2ARCM-Pwsh-Vm"
$recoveryVmName = "V2ARCM-Pwsh-Vm"
$updateRecoveryVmName = "v2aRcm-ps-vm"
$vmName = "Rcm-W2K16-153"
$recoveryVmName = "Rcm-W2K16-153"
$updateRecoveryVmName = "Rcm-W2K16-1531"
$tfoVmName = "Rcm-W2K19-152"
$foVmName = $tfoVmName
$reprotectVmName = $foVmName
$failbackVmName = $reprotectVmName

$switchAppVmName = "Rcm-Ub18-154"
$TargetApplianceName = "Rcm-App-151"
$CredentialsToAccessVm = "LinCreds"

$recoveryPlanName = "v2arcm-pwsh-rp"
$credentialsName = "windows-creds"
$recoveryAzureNetworkId = "/subscriptions/7c943c1b-5122-4097-90c8-861411bdd574/resourceGroups/vmwaretargetrg/providers/Microsoft.Network/virtualNetworks/v2arcm-vnet"
$testNetworkId = "/subscriptions/7c943c1b-5122-4097-90c8-861411bdd574/resourceGroups/vmwaretargetrg/providers/Microsoft.Network/virtualNetworks/v2arcm-vnet"
$recoveryAzureSubnetName = "default"
$testSubnetName = "default"
$recoveryResourceGroupId = "/subscriptions/7c943c1b-5122-4097-90c8-861411bdd574/resourceGroups/vmwaretargetrg"
$logStorageAccountId = "/subscriptions/7c943c1b-5122-4097-90c8-861411bdd574/resourceGroups/vmwaretargetrg/providers/Microsoft.Storage/storageAccounts/v2arcmpwshsa"
$recoveryBootDiagnosticsStorageAccountId = "/subscriptions/7c943c1b-5122-4097-90c8-861411bdd574/resourceGroups/vmwaretargetrg/providers/Microsoft.Storage/storageAccounts/v2arcmpwshsa"
$dataStoreName = "datastore1 (1)"
$credentialsName = "WinCreds"
$recoveryAzureNetworkId = "/subscriptions/b364ed8d-4279-4bf8-8fd1-56f8fa0ae05c/resourceGroups/V2A-ECY/providers/Microsoft.Network/virtualNetworks/v2aecynw"
$testNetworkId = "/subscriptions/b364ed8d-4279-4bf8-8fd1-56f8fa0ae05c/resourceGroups/V2A-ECY/providers/Microsoft.Network/virtualNetworks/v2aecynw"
$recoveryAzureSubnetName = "Subnet1"
$testSubnetName = "Subnet1"
$recoveryResourceGroupId = "/subscriptions/b364ed8d-4279-4bf8-8fd1-56f8fa0ae05c/resourceGroups/V2A-ECY"
$logStorageAccountId = "/subscriptions/b364ed8d-4279-4bf8-8fd1-56f8fa0ae05c/resourceGroups/V2A-ECY/providers/Microsoft.Storage/storageAccounts/v2aecystor"
$recoveryBootDiagnosticsStorageAccountId = "/subscriptions/b364ed8d-4279-4bf8-8fd1-56f8fa0ae05c/resourceGroups/V2A-ECY/providers/Microsoft.Storage/storageAccounts/v2aecystor"
$dataStoreName = "SharedDS-84-85"

<#
.SYNOPSIS
Expand Down Expand Up @@ -255,7 +264,7 @@ function Test-V2ARCMUpdateProtection {
Assert-NotNull($RPI.providerSpecificDetails)

# Update protected item .
$job = Set-AzRecoveryServicesAsrReplicationProtectedItem -InputObject $RPI -Name $updateRecoveryVmName -Size Standard_D1
$job = Set-AzRecoveryServicesAsrReplicationProtectedItem -InputObject $RPI -Name $updateRecoveryVmName -Size Standard_B2s
WaitForJobCompletion -JobId $Job.Name

# Get protected item.
Expand Down Expand Up @@ -285,7 +294,7 @@ function Test-V2ARCMTestFailover {
Assert-true { $Container.name -eq $primaryContainerName }

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $vmName
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $tfoVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

Expand Down Expand Up @@ -319,7 +328,7 @@ function Test-V2ARCMFailover {
Assert-true { $Container.name -eq $primaryContainerName }

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $vmName
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $foVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

Expand Down Expand Up @@ -349,7 +358,7 @@ function Test-V2ARCMCommit {
Assert-true { $Container.name -eq $primaryContainerName }

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $vmName
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $foVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

Expand Down Expand Up @@ -383,19 +392,19 @@ function Test-V2ARCMReprotect {

# Get mapping.
$FailbackMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $Container `
-Name $recoveryContainerMappingName
-Name $recoveryContainerMappingName
Assert-NotNull($FailbackMapping)

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $vmName
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $reprotectVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

# Reprotect.
$Job = Update-AzRecoveryServicesAsrProtectionDirection -ReplicateAzureToVMware -ProtectionContainerMapping $FailbackMapping `
-ReplicationProtectedItem $RPI -Direction RecoveryToPrimary `
-ApplianceName $Fabric.FabricSpecificDetails.ProcessServers[0].Name -Fabric $Fabric `
-LogStorageAccountId $logStorageAccountId -DatastoreName $dataStoreName
-LogStorageAccountId $logStorageAccountId -DatastoreName $dataStoreName
}

<#
Expand All @@ -419,14 +428,13 @@ function Test-V2ARCMFailback {
Assert-true { $Container.name -eq $primaryContainerName }

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $recoveryVmName
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $failbackVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

# Failback.
$Job = Start-AzRecoveryServicesAsrPlannedFailoverJob -ReplicationProtectedItem $RPI -Direction RecoveryToPrimary `
-RecoveryTag RecoveryTagApplicationConsistent
WaitForJobCompletion -JobId $Job.Name
}

<#
Expand All @@ -450,13 +458,12 @@ function Test-V2ARCMCancelFailover {
Assert-true { $Container.name -eq $primaryContainerName }

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $recoveryVmName
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $failbackVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

# Cancel failover.
$Job = Start-ASRCancelFailover -ReplicationProtectedItem $RPI
WaitForJobCompletion -JobId $Job.Name
$Job = Start-ASRCancelFailover -ReplicationProtectedItem $RPI
}

<#
Expand All @@ -480,7 +487,7 @@ function Test-V2ARCMRecoveryPlan {
Assert-true { $Container.name -eq $primaryContainerName }

# Get protected item
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -Name $vmName
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $vmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

Expand All @@ -498,6 +505,42 @@ function Test-V2ARCMRecoveryPlan {
WaitForJobCompletion -JobId $Job.Name
}

<#
.SYNOPSIS
Site Recovery V2A RCM switch appliance Test.
#>
function Test-V2ARCMSwitchAppliance {

# Set vault context.
$Vault = Get-AzRecoveryServicesVault -ResourceGroupName $vaultRg -Name $vaultName
Set-ASRVaultContext -Vault $Vault

# Get fabric.
$Fabric = Get-AzRecoveryServicesAsrFabric -Name $primaryFabricName
Assert-NotNull($Fabric)
Assert-true { $Fabric.name -eq $primaryFabricName }

# Get container.
$Container = Get-AzRecoveryServicesAsrProtectionContainer -Name $primaryContainerName -Fabric $Fabric
Assert-NotNull($Container)
Assert-true { $Container.name -eq $primaryContainerName }

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $switchAppVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)

# Cancel failover.
$Job = Start-ASRSwitchAppliance -Fabric $Fabric -ReplicationProtectedItem $RPI -TargetApplianceName $TargetApplianceName # -CredentialsToAccessVm $CredentialsToAccessVm
WaitForJobCompletion -JobId $Job.Name

# Get protected item.
$RPI = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $Container -FriendlyName $switchAppVmName
Assert-NotNull($RPI)
Assert-NotNull($RPI.providerSpecificDetails)
Assert-true { $RPI.providerSpecificDetails.ProcessServerName -eq $TargetApplianceName }
}

<#
.SYNOPSIS
Wait for job completion.
Expand Down
Loading

0 comments on commit e8eabf2

Please sign in to comment.