Skip to content

Commit 79315c2

Browse files
hiagaisra-fel
andauthored
[RecoveryServices.Backup] [Ignite] Added new cmdlet for reregistration feature (#28628)
Co-authored-by: Yeming Liu <[email protected]>
1 parent e476553 commit 79315c2

File tree

14 files changed

+3349
-27
lines changed

14 files changed

+3349
-27
lines changed

src/RecoveryServices/RecoveryServices.Backup.Providers/Providers/AzureFilesPsBackupProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1061,7 +1061,7 @@ private RestAzureNS.AzureOperationResponse<ProtectedItemResource> EnableOrModify
10611061
PolicyBase policy = ProviderData.ContainsKey(ItemParams.Policy) ?
10621062
(PolicyBase)ProviderData[ItemParams.Policy] : null;
10631063

1064-
ItemBase itemBase = (ItemBase)ProviderData[ItemParams.Item];
1064+
ItemBase itemBase = ProviderData.ContainsKey(ItemParams.Item) ? (ItemBase)ProviderData[ItemParams.Item] : null;
10651065

10661066
AzureFileShareItem item = (AzureFileShareItem)ProviderData[ItemParams.Item];
10671067

src/RecoveryServices/RecoveryServices.Backup.Providers/Providers/AzureWorkloadPsBackupProvider.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -991,13 +991,19 @@ public void RegisterContainer()
991991

992992
List<ProtectableContainerResource> unregisteredVmContainers =
993993
GetUnRegisteredVmContainers(vaultName, vaultResourceGroupName);
994+
995+
Logger.Instance.WriteDebug("containerName: "+ containerName + ", vmResourceGroupName: " + vmResourceGroupName
996+
+ ", unregisteredVMContainers.Count: " + unregisteredVmContainers?.Count);
997+
994998
ProtectableContainerResource unregisteredVmContainer = unregisteredVmContainers.Find(
995999
vmContainer => {
9961000
string[] containerNameSplit = vmContainer.Name.Split(';');
9971001
int containerNameSplitLen = containerNameSplit.Length;
998-
bool vmNameMatch = string.Compare(containerNameSplit[containerNameSplitLen - 1], containerName, true) == 0;
1002+
bool vmNameMatch = string.Compare(containerNameSplit[containerNameSplitLen - 1], containerName.Split(';').Last(), true) == 0;
9991003
bool rgNameMatch = string.Compare(containerNameSplit[containerNameSplitLen - 2], vmResourceGroupName, true) == 0;
1000-
1004+
1005+
Logger.Instance.WriteDebug("Unregistered Container Name: " + vmContainer.Name + ", vmNameMatch: " + vmNameMatch + ", rgNameMatch: " + rgNameMatch);
1006+
10011007
return vmNameMatch && rgNameMatch;
10021008
});
10031009

src/RecoveryServices/RecoveryServices.Backup.Providers/Providers/IaasVmPsBackupProvider.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,17 @@ public RestAzureNS.AzureOperationResponse<ProtectedItemResource> EnableProtectio
7474
string vaultName = (string)ProviderData[VaultParams.VaultName];
7575
string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName];
7676
string azureVMName = (string)ProviderData[ItemParams.ItemName];
77-
string azureVMCloudServiceName = (string)ProviderData[ItemParams.AzureVMCloudServiceName];
77+
string azureVMCloudServiceName = ProviderData.ContainsKey(ItemParams.AzureVMCloudServiceName) ? (string)ProviderData[ItemParams.AzureVMCloudServiceName] : null;
7878
string azureVMResourceGroupName = (string)ProviderData[ItemParams.AzureVMResourceGroupName];
7979
string parameterSetName = (string)ProviderData[ItemParams.ParameterSetName];
80-
string[] inclusionDisksList = (string[])ProviderData[ItemParams.InclusionDisksList];
81-
string[] exclusionDisksList = (string[])ProviderData[ItemParams.ExclusionDisksList];
82-
SwitchParameter resetDiskExclusionSetting = (SwitchParameter)ProviderData[ItemParams.ResetExclusionSettings];
83-
bool excludeAllDataDisks = (bool)ProviderData[ItemParams.ExcludeAllDataDisks];
80+
string[] inclusionDisksList = ProviderData.ContainsKey(ItemParams.InclusionDisksList) ? (string[])ProviderData[ItemParams.InclusionDisksList] : null;
81+
string[] exclusionDisksList = ProviderData.ContainsKey(ItemParams.ExclusionDisksList) ? (string[])ProviderData[ItemParams.ExclusionDisksList] : null;
82+
SwitchParameter resetDiskExclusionSetting = ProviderData.ContainsKey(ItemParams.ResetExclusionSettings) ? (SwitchParameter)ProviderData[ItemParams.ResetExclusionSettings] : new SwitchParameter(false);
83+
bool excludeAllDataDisks = ProviderData.ContainsKey(ItemParams.ExcludeAllDataDisks) ? (bool)ProviderData[ItemParams.ExcludeAllDataDisks] : false;
8484
PolicyBase policy = (PolicyBase)ProviderData[ItemParams.Policy];
85-
ItemBase itemBase = (ItemBase)ProviderData[ItemParams.Item];
86-
AzureVmItem item = (AzureVmItem)ProviderData[ItemParams.Item];
87-
85+
ItemBase itemBase = ProviderData.ContainsKey(ItemParams.Item) ? (ItemBase)ProviderData[ItemParams.Item] : null;
86+
AzureVmItem item = ProviderData.ContainsKey(ItemParams.Item) ? (AzureVmItem)ProviderData[ItemParams.Item] : null;
87+
8888
string auxiliaryAccessToken = ProviderData.ContainsKey(ResourceGuardParams.Token) ? (string)ProviderData[ResourceGuardParams.Token] : null;
8989
bool isMUAOperation = ProviderData.ContainsKey(ResourceGuardParams.IsMUAOperation) ? (bool)ProviderData[ResourceGuardParams.IsMUAOperation] : false;
9090

@@ -327,7 +327,7 @@ public RestAzureNS.AzureOperationResponse<ProtectedItemResource> DisableProtecti
327327
{
328328
string vaultName = (string)ProviderData[VaultParams.VaultName];
329329
string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName];
330-
bool deleteBackupData = (bool)ProviderData[ItemParams.DeleteBackupData];
330+
bool deleteBackupData = ProviderData.ContainsKey(ItemParams.DeleteBackupData) ? (bool)ProviderData[ItemParams.DeleteBackupData] : false;
331331

332332
ItemBase itemBase = (ItemBase)ProviderData[ItemParams.Item];
333333

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,5 +351,17 @@ public void TestAzureRestoreWithCVMOsDiskEncryptionSetId()
351351
"Test-AzureRestoreWithCVMOsDiskEncryptionSetId"
352352
);
353353
}
354+
355+
[Fact]
356+
[Trait(Category.AcceptanceType, Category.CheckIn)]
357+
[Trait(TestConstants.Workload, TestConstants.AzureVM)]
358+
public void TestAzureVMRedoProtection()
359+
{
360+
TestRunner.RunTestScript(
361+
$"Import-Module {_IaasVmcommonModule.AsAbsoluteLocation()}",
362+
$"Import-Module {_IaasVmtestModule.AsAbsoluteLocation()}",
363+
"Test-AzureVMRedoProtection"
364+
);
365+
}
354366
}
355367
}

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/IaasVm/ItemTests.ps1

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,40 @@
1212
# limitations under the License.
1313
# ----------------------------------------------------------------------------------
1414

15+
function Test-AzureVMRedoProtection
16+
{
17+
$resourceGroupName = "hiagarg"
18+
$vaultName = "hiagaVault"
19+
$targetVaultName = "hiagaVault2"
20+
$vmContainerSuffix = "hiaga-adhoc-vm"
21+
$policyName = "DefaultPolicy"
22+
23+
try
24+
{
25+
# Step 1: Move protection from hiagaVault to hiagaVault2
26+
$vault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $vaultName
27+
$items = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM -VaultId $vault.ID | Where-Object { $_.ContainerName.EndsWith($vmContainerSuffix) }
28+
$targetVault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $targetVaultName
29+
$policy = Get-AzRecoveryServicesBackupProtectionPolicy -Name $policyName -VaultId $targetVault.ID
30+
31+
$redoJob = Redo-AzRecoveryServicesBackupProtection -Item $items[-1] -TargetVaultId $targetVault.ID -TargetPolicy $policy -VaultId $vault.ID -Force -Confirm:$false
32+
Assert-True { $redoJob.Status -eq "Completed" }
33+
34+
# Step 2: Reverse - move protection back to hiagaVault
35+
$vault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $targetVaultName
36+
$targetVault = Get-AzRecoveryServicesVault -ResourceGroupName $resourceGroupName -Name $vaultName
37+
$policy = Get-AzRecoveryServicesBackupProtectionPolicy -Name $policyName -VaultId $targetVault.ID
38+
$items = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM -VaultId $vault.ID | Where-Object { $_.ContainerName.EndsWith($vmContainerSuffix) }
39+
40+
$redoJob = Redo-AzRecoveryServicesBackupProtection -Item $items[-1] -TargetVaultId $targetVault.ID -TargetPolicy $policy -VaultId $vault.ID -Force -Confirm:$false
41+
Assert-True { $redoJob.Status -eq "Completed" }
42+
}
43+
finally
44+
{
45+
# Optional cleanup if needed
46+
}
47+
}
48+
1549
function Test-AzurePERestore
1650
{
1751
$subId = "f2edfd5d-5496-4683-b94f-b3588c579009"

0 commit comments

Comments
 (0)