Skip to content

Commit b2a1f92

Browse files
authored
Merge pull request #6819 from MabOneSdk/users/sisi/managed-disk
Added TargetResourceGroupName parameter to Restore-AzureRmRecoveryServicesBackupItem
2 parents 7b3b86a + f9be898 commit b2a1f92

File tree

13 files changed

+210587
-277432
lines changed

13 files changed

+210587
-277432
lines changed

src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Helpers/Conversions/RecoveryPointConversions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ public static List<RecoveryPointBase> GetPSAzureRecoveryPoints(
8383
EncryptionEnabled = recPoint.IsSourceVMEncrypted.HasValue ?
8484
recPoint.IsSourceVMEncrypted.Value : false,
8585
IlrSessionActive = isInstantILRSessionActive,
86+
IsManagedVirtualMachine = recPoint.IsManagedVirtualMachine.HasValue ?
87+
recPoint.IsManagedVirtualMachine.Value : false,
8688
OriginalSAEnabled = recPoint.OriginalStorageAccountOption.HasValue ?
8789
recPoint.OriginalStorageAccountOption.Value : false,
8890
};

src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/AzureVmModels/AzureVmRecoveryPoint.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ public class AzureVmRecoveryPoint : RecoveryPointBase
5858
/// </summary>
5959
public bool IlrSessionActive { get; set; }
6060

61+
/// <summary>
62+
/// Identifies if the virtual machine has a managed disks.
63+
/// </summary>
64+
public bool IsManagedVirtualMachine { get; set; }
65+
6166
/// <summary>
6267
/// Required details for recovering an encrypted VM.
6368
/// Applicable only when the EncryptionEnabled flag is true.

src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/CmdletParamEnums.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public enum RestoreBackupItemParams
5353
StorageAccountId,
5454
StorageAccountLocation,
5555
StorageAccountType,
56+
TargetResourceGroupName,
5657
OsaOption
5758
}
5859

src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Models/Properties/Resources.Designer.cs

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,13 +262,17 @@ public RestAzureNS.AzureOperationResponse TriggerRestore()
262262
ProviderData[RestoreBackupItemParams.StorageAccountLocation].ToString();
263263
string storageAccountType =
264264
ProviderData[RestoreBackupItemParams.StorageAccountType].ToString();
265+
string targetResourceGroupName =
266+
ProviderData.ContainsKey(RestoreBackupItemParams.TargetResourceGroupName) ?
267+
ProviderData[RestoreBackupItemParams.TargetResourceGroupName].ToString() : null;
265268
bool osaOption = (bool)ProviderData[RestoreBackupItemParams.OsaOption];
266269

267270
var response = ServiceClientAdapter.RestoreDisk(
268271
rp,
269272
storageAccountId,
270273
storageAccountLocation,
271274
storageAccountType,
275+
targetResourceGroupName,
272276
osaOption,
273277
vaultName: vaultName,
274278
resourceGroupName: resourceGroupName,

src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.ServiceClientAdapter/BMSAPIs/RestoreDiskAPIs.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public RestAzureNS.AzureOperationResponse RestoreDisk(
3737
string storageAccountId,
3838
string storageAccountLocation,
3939
string storageAccountType,
40+
string targetResourceGroupName,
4041
bool osaOption,
4142
string vaultName = null,
4243
string resourceGroupName = null,
@@ -64,6 +65,11 @@ public RestAzureNS.AzureOperationResponse RestoreDisk(
6465
throw new Exception(string.Format(Resources.RestoreDiskStorageTypeError, vmType));
6566
}
6667

68+
if (targetResourceGroupName != null && rp.IsManagedVirtualMachine == false)
69+
{
70+
Logger.Instance.WriteWarning(Resources.UnManagedBackupVmWarning);
71+
}
72+
6773
IaasVMRestoreRequest restoreRequest = new IaasVMRestoreRequest()
6874
{
6975
CreateNewCloudService = false,
@@ -72,6 +78,8 @@ public RestAzureNS.AzureOperationResponse RestoreDisk(
7278
Region = vaultLocation,
7379
StorageAccountId = storageAccountId,
7480
SourceResourceId = rp.SourceResourceId,
81+
TargetResourceGroupId = targetResourceGroupName ??
82+
"/subscriptions/" + BmsAdapter.Client.SubscriptionId + "/resourceGroups/" + targetResourceGroupName,
7583
OriginalStorageAccountOption = useOsa,
7684
};
7785

src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Test/ScenarioTests/IaasVm/Common.ps1

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,14 @@ function Get-RandomSuffix(
4848
}
4949

5050
function Create-ResourceGroup(
51-
[string] $location)
51+
[string] $location,
52+
[int] $nick = -1)
5253
{
5354
$name = "PSTestRG" + @(Get-RandomSuffix)
55+
if($nick -gt -1)
56+
{
57+
$name += $nick
58+
}
5459

5560
$resourceGroup = Get-AzureRmResourceGroup -Name $name -ErrorAction Ignore
5661

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ function Test-AzureVMFullRestore
235235
{
236236
$location = Get-ResourceGroupLocation
237237
$resourceGroupName = Create-ResourceGroup $location
238+
$targetResourceGroupName = Create-ResourceGroup $location 1
238239

239240
try
240241
{
@@ -245,7 +246,7 @@ function Test-AzureVMFullRestore
245246
$item = Enable-Protection $vault $vm
246247
$backupJob = Backup-Item $vault $item
247248
$rp = Get-RecoveryPoint $vault $item $backupJob
248-
249+
249250
Assert-ThrowsContains { Restore-AzureRmRecoveryServicesBackupItem `
250251
-VaultId $vault.ID `
251252
-VaultLocation $vault.Location `
@@ -255,20 +256,32 @@ function Test-AzureVMFullRestore
255256
-UseOriginalStorageAccount } `
256257
"This recovery point doesn’t have the capability to restore disks to their original storage account. Re-run the restore command without the UseOriginalStorageAccountForDisks parameter.";
257258

258-
$restoreJob = Restore-AzureRmRecoveryServicesBackupItem `
259+
$restoreJob1 = Restore-AzureRmRecoveryServicesBackupItem `
259260
-VaultId $vault.ID `
260261
-VaultLocation $vault.Location `
261262
-RecoveryPoint $rp `
262263
-StorageAccountName $saName `
263264
-StorageAccountResourceGroupName $resourceGroupName | `
264265
Wait-AzureRmRecoveryServicesBackupJob -VaultId $vault.ID
265266

266-
Assert-True { $restoreJob.Status -eq "Completed" }
267+
Assert-True { $restoreJob1.Status -eq "Completed" }
268+
269+
$restoreJob2 = Restore-AzureRmRecoveryServicesBackupItem `
270+
-VaultId $vault.ID `
271+
-VaultLocation $vault.Location `
272+
-RecoveryPoint $rp `
273+
-StorageAccountName $saName `
274+
-StorageAccountResourceGroupName $resourceGroupName `
275+
-TargetResourceGroupName $targetResourceGroupName | `
276+
Wait-AzureRmRecoveryServicesBackupJob -VaultId $vault.ID
277+
278+
Assert-True { $restoreJob2.Status -eq "Completed" }
267279
}
268280
finally
269281
{
270282
# Cleanup
271283
Cleanup-ResourceGroup $resourceGroupName
284+
Cleanup-ResourceGroup $targetResourceGroupName
272285
}
273286
}
274287

0 commit comments

Comments
 (0)