Skip to content

Commit f03dd85

Browse files
author
dragonfly91
committed
Operation tracking in Backup
1 parent 2ac7352 commit f03dd85

File tree

6 files changed

+77
-38
lines changed

6 files changed

+77
-38
lines changed

src/ResourceManager/RecoveryServices.Backup/Cmdlets/Item/BackupAzureRmRecoveryServicesItem.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
1616
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel;
17+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers;
1718
using System;
1819
using System.Collections.Generic;
1920
using System.Linq;
@@ -49,6 +50,8 @@ public override void ExecuteCmdlet()
4950

5051
IPsBackupProvider psBackupProvider = providerManager.GetProviderInstance(Item.WorkloadType, Item.BackupManagementType);
5152
var jobResponse = psBackupProvider.TriggerBackup();
53+
54+
WriteObject(OperationStatusHelper.GetJobFromOperation(jobResponse, HydraAdapter));
5255
}
5356
}
5457
}

src/ResourceManager/RecoveryServices.Backup/Cmdlets/Item/EnableAzureRmRecoveryServicesProtection.cs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -84,31 +84,7 @@ public override void ExecuteCmdlet()
8484
// Track Response and display job details
8585
// -- TBD to move it to common helper and remove hard-coded vaules
8686

87-
var response = OperationStatusHelper.TrackOperationStatus(jobResponse, HydraAdapter);
88-
89-
if (response.OperationStatus.Status == HydraModel.OperationStatusValues.Succeeded)
90-
{
91-
var jobStatusResponse = (HydraModel.OperationStatusJobExtendedInfo)response.OperationStatus.Properties;
92-
string jobId = jobStatusResponse.JobId;
93-
var job = HydraAdapter.GetJob(jobId);
94-
WriteObject(JobConversions.GetPSJob(job));
95-
}
96-
else if(response.OperationStatus.Status == HydraModel.OperationStatusValues.Failed)
97-
{
98-
var jobStatusResponse = (HydraModel.OperationStatusJobExtendedInfo)response.OperationStatus.Properties;
99-
if(jobStatusResponse != null || !string.IsNullOrEmpty(jobStatusResponse.JobId))
100-
{
101-
string jobId = jobStatusResponse.JobId;
102-
var job = HydraAdapter.GetJob(jobId);
103-
WriteObject(JobConversions.GetPSJob(job));
104-
}
105-
106-
var errorMessage = string.Format(Resources.EnableProtectionOperationFailed,
107-
response.OperationStatus.OperationStatusError.Code,
108-
response.OperationStatus.OperationStatusError.Message);
109-
110-
throw new Exception(errorMessage);
111-
}
87+
WriteObject(OperationStatusHelper.GetJobFromOperation(jobResponse, HydraAdapter));
11288
});
11389
}
11490
}

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Helpers/OperationStatusHelper.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using HydraModel = Microsoft.Azure.Management.RecoveryServices.Backup.Models;
2020
using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
2121
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.HydraAdapter;
22+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Properties;
2223

2324
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers
2425
{
@@ -37,5 +38,39 @@ public static BackUpOperationStatusResponse TrackOperationStatus(BaseRecoverySer
3738

3839
return response;
3940
}
41+
42+
public static CmdletModel.AzureRmRecoveryServicesJobBase GetJobFromOperation(HydraModel.BaseRecoveryServicesJobResponse jobResponse, HydraAdapter hydraAdapter)
43+
{
44+
var response = OperationStatusHelper.TrackOperationStatus(jobResponse, hydraAdapter);
45+
46+
if (response.OperationStatus.Status == HydraModel.OperationStatusValues.Succeeded)
47+
{
48+
var jobStatusResponse = (HydraModel.OperationStatusJobExtendedInfo)response.OperationStatus.Properties;
49+
string jobId = jobStatusResponse.JobId;
50+
var job = hydraAdapter.GetJob(jobId);
51+
return JobConversions.GetPSJob(job);
52+
}
53+
else if (response.OperationStatus.Status == HydraModel.OperationStatusValues.Failed)
54+
{
55+
var jobStatusResponse = (HydraModel.OperationStatusJobExtendedInfo)response.OperationStatus.Properties;
56+
if (jobStatusResponse != null || !string.IsNullOrEmpty(jobStatusResponse.JobId))
57+
{
58+
string jobId = jobStatusResponse.JobId;
59+
var job = hydraAdapter.GetJob(jobId);
60+
return JobConversions.GetPSJob(job);
61+
}
62+
63+
var errorMessage = string.Format(Resources.EnableProtectionOperationFailed,
64+
response.OperationStatus.OperationStatusError.Code,
65+
response.OperationStatus.OperationStatusError.Message);
66+
67+
throw new Exception(errorMessage);
68+
}
69+
70+
var jobStatusResponse1 = (HydraModel.OperationStatusJobExtendedInfo)response.OperationStatus.Properties;
71+
string jobId1 = jobStatusResponse1.JobId;
72+
var job1 = hydraAdapter.GetJob(jobId1);
73+
return JobConversions.GetPSJob(job1);
74+
}
4075
}
4176
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public enum ItemParams
7070
Container,
7171
ProtectionStatus,
7272
Status,
73-
DeleteBackupData
73+
DeleteBackupData,
7474
ExpiryDate,
7575
}
7676
}

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Models/CommonModels/Utils.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,18 @@ public class IdUtils
6262
{
6363
static readonly Regex ResourceGroupRegex = new Regex(@"/Subscriptions/(?<subscriptionsId>.+)/resourceGroups/(?<resourceGroupName>.+)/providers/(?<providersName>.+)/vaults/(?<BackupVaultName>.+)/backupFabrics/(?<BackupFabricName>.+)/protectionContainers/(?<containersName>.+)", RegexOptions.Compiled);
6464
const string NameDelimiter = ";";
65+
const string IdDelimiter = "/";
66+
67+
public class IdNames
68+
{
69+
public const string SubscriptionId = "Subscriptions";
70+
public const string ResourceGroup = "resourceGroups";
71+
public const string Provider = "providers";
72+
public const string Vault = "vaults";
73+
public const string BackupFabric = "backupFabrics";
74+
public const string ProtectionContainerName = "protectionContainers";
75+
public const string ProtectedItemName = "protectedItems";
76+
}
6577

6678
public static string GetResourceGroupName(string id)
6779
{
@@ -89,6 +101,19 @@ public static string GetResourceGroupName(string id)
89101

90102
return null;
91103
}
104+
105+
public static string GetValueByName(string id, string idName)
106+
{
107+
var parts = id.Split(IdDelimiter.ToArray(), StringSplitOptions.RemoveEmptyEntries)
108+
.Select((x, i) => new { Index = i, Value = x })
109+
.GroupBy(x => x.Index % 2)
110+
.ToList();
111+
112+
var dict = parts[0].ToList().Zip(parts[1].ToList(), (k, v) => new { k, v })
113+
.ToDictionary(x => x.k.Value, x => x.v.Value);
114+
115+
return dict[idName];
116+
}
92117
}
93118

94119
public class EnumUtils

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public BaseRecoveryServicesJobResponse EnableProtection()
6464
AzureRmRecoveryServicesIaasVmItem item = (AzureRmRecoveryServicesIaasVmItem)
6565
ProviderData.ProviderParameters[ItemParams.Item];
6666
// do validations
67-
67+
6868

6969
string containerUri = "";
7070
string protectedItemUri = "";
@@ -89,7 +89,7 @@ public BaseRecoveryServicesJobResponse EnableProtection()
8989
ValidateAzureVMWorkloadType(item.WorkloadType, policy.WorkloadType);
9090
ValidateAzureVMModifyProtectionRequest(itemBase, policy);
9191

92-
isComputeAzureVM = IsComputeAzureVM(item.VirtualMachineId);
92+
isComputeAzureVM = IsComputeAzureVM(item.VirtualMachineId);
9393

9494
string containerType = HydraHelpers.GetHydraContainerType(item.ContainerType);
9595
string vmType = HydraHelpers.GetHydraWorkloadType(item.WorkloadType);
@@ -190,17 +190,17 @@ public BaseRecoveryServicesJobResponse TriggerBackup()
190190
AzureRmRecoveryServicesItemBase item = (AzureRmRecoveryServicesItemBase)ProviderData.ProviderParameters[ItemParams.Item];
191191
DateTime expiryDate = (DateTime)ProviderData.ProviderParameters[ItemParams.ExpiryDate];
192192
AzureRmRecoveryServicesIaasVmItem iaasVmItem = item as AzureRmRecoveryServicesIaasVmItem;
193-
194-
return HydraAdapter.TriggerBackup(item.ContainerName, iaasVmItem.Name);
193+
return HydraAdapter.TriggerBackup(IdUtils.GetValueByName(iaasVmItem.Id, IdUtils.IdNames.ProtectionContainerName),
194+
IdUtils.GetValueByName(iaasVmItem.Id, IdUtils.IdNames.ProtectedItemName));
195195
}
196196

197197
public BaseRecoveryServicesJobResponse TriggerRestore()
198198
{
199-
AzureRmRecoveryServicesIaasVmRecoveryPoint rp = ProviderData.ProviderParameters[RestoreBackupItemParams.RecoveryPoint]
199+
AzureRmRecoveryServicesIaasVmRecoveryPoint rp = ProviderData.ProviderParameters[RestoreBackupItemParams.RecoveryPoint]
200200
as AzureRmRecoveryServicesIaasVmRecoveryPoint;
201201
string storageId = ProviderData.ProviderParameters[RestoreBackupItemParams.StorageAccountId].ToString();
202202

203-
if(rp == null)
203+
if (rp == null)
204204
{
205205
throw new InvalidCastException("Cant convert input to AzureRmRecoveryServicesIaasVmRecoveryPoint");
206206
}
@@ -291,7 +291,7 @@ public ProtectionPolicyResponse CreatePolicy()
291291
CopyScheduleTimeToRetentionTimes((AzureRmRecoveryServicesLongTermRetentionPolicy)retentionPolicy,
292292
(AzureRmRecoveryServicesSimpleSchedulePolicy)schedulePolicy);
293293
Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful");
294-
294+
295295
// Now validate both RetentionPolicy and SchedulePolicy together
296296
PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy(
297297
(AzureRmRecoveryServicesLongTermRetentionPolicy)retentionPolicy,
@@ -386,7 +386,7 @@ public ProtectionPolicyResponse ModifyPolicy()
386386
};
387387

388388
return HydraAdapter.CreateOrUpdateProtectionPolicy(policy.Name,
389-
hydraRequest);
389+
hydraRequest);
390390
}
391391

392392
public List<AzureRmRecoveryServicesContainerBase> ListProtectionContainers()
@@ -496,7 +496,7 @@ public List<AzureRmRecoveryServicesItemBase> ListProtectedItems()
496496
}
497497

498498
return itemModels;
499-
}
499+
}
500500

501501
public AzureRmRecoveryServicesSchedulePolicyBase GetDefaultSchedulePolicyObject()
502502
{
@@ -673,11 +673,11 @@ private void ValidateAzureVMEnableProtectionRequest(string vmName, string rgName
673673
AzureRmRecoveryServicesPolicyBase policy)
674674
{
675675
ValidateAzureVMProtectionPolicy(policy);
676-
if(string.IsNullOrEmpty(vmName))
676+
if (string.IsNullOrEmpty(vmName))
677677
{
678678
throw new ArgumentException(string.Format(Resources.InvalidAzureVMName));
679679
}
680-
if(string.IsNullOrEmpty(rgName) && string.IsNullOrEmpty(serviceName))
680+
if (string.IsNullOrEmpty(rgName) && string.IsNullOrEmpty(serviceName))
681681
{
682682
throw new ArgumentException(string.Format(Resources.BothCloudServiceNameAndResourceGroupNameShouldNotEmpty));
683683
}
@@ -711,7 +711,7 @@ private void ValidateAzureVMDisableProtectionRequest(AzureRmRecoveryServicesItem
711711
private bool IsComputeAzureVM(string virtualMachineId)
712712
{
713713
bool isComputeAzureVM = true;
714-
if(virtualMachineId.IndexOf(classicComputeAzureVMVersion, StringComparison.InvariantCultureIgnoreCase) >=0)
714+
if (virtualMachineId.IndexOf(classicComputeAzureVMVersion, StringComparison.InvariantCultureIgnoreCase) >= 0)
715715
{
716716
isComputeAzureVM = false;
717717
}

0 commit comments

Comments
 (0)