Skip to content

Commit e9c22d6

Browse files
committed
Merge branch 'dev1' into user/dev1-adit/rsjobs
2 parents e651099 + 109a74e commit e9c22d6

29 files changed

+947
-103
lines changed

src/ResourceManager/RecoveryServices.Backup/CmdletParameterHelpMessages.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ internal static class Container
3333
internal static class Common
3434
{
3535
public const string Vault = "The Azure Backup vault object which is the parent resource.";
36+
public const string WorkloadType = "Workload type of the resource (for example: AzureVM, WindowsServer).";
37+
public const string BackupManagementType = "Backup Management type of the resource (for example: MAB, DPM).";
38+
}
39+
40+
internal static class Policy
41+
{
42+
public const string Name = "Name of the Policy that is being managed.";
43+
public const string RetentionPolicy = "Retention Policy object for the policy.";
44+
public const string SchedulePolicy = "Schedule Policy object for the policy.";
45+
public const string ProtectionPolicy = "Protection policy object.";
3646
}
3747

3848
internal static class Job

src/ResourceManager/RecoveryServices.Backup/Cmdlets/Container/GetAzureRmRecoveryServicesContainer.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,31 +53,35 @@ public class GetAzureRmRecoveryServicesContainer : RecoveryServicesBackupCmdletB
5353

5454
public override void ExecuteCmdlet()
5555
{
56-
base.ExecuteCmdlet();
56+
ExecutionBlock(() =>
57+
{
58+
base.ExecuteCmdlet();
5759

58-
ProtectionContainerListQueryParams queryParams = new ProtectionContainerListQueryParams();
60+
ProtectionContainerListQueryParams queryParams = new ProtectionContainerListQueryParams();
5961

60-
// 1. Filter by Name
61-
queryParams.FriendlyName = Name;
62+
// 1. Filter by Name
63+
queryParams.FriendlyName = Name;
6264

63-
// 2. Filter by ContainerType
64-
queryParams.ProviderType = HydraHelpers.GetHydraProviderType(ContainerType);
65+
// 2. Filter by ContainerType
66+
queryParams.ProviderType = HydraHelpers.GetHydraProviderType(ContainerType);
6567

66-
// 3. Filter by Status
67-
queryParams.RegistrationStatus = Status.ToString();
68+
// 3. Filter by Status
69+
queryParams.RegistrationStatus = Status.ToString();
6870

69-
var listResponse = HydraAdapter.ListContainers(Vault.Name, Vault.ResouceGroupName, queryParams);
71+
var listResponse = HydraAdapter.ListContainers(Vault.Name, Vault.ResouceGroupName, queryParams);
7072

71-
List<AzureRmRecoveryServicesContainerBase> containerModels = ConversionHelpers.GetContainerModelList(listResponse);
73+
List<AzureRmRecoveryServicesContainerBase> containerModels = ConversionHelpers.GetContainerModelList(listResponse);
7274

73-
// 4. Filter by RG Name
74-
if (ContainerType == Models.ContainerType.AzureVM)
75-
{
76-
containerModels.RemoveAll(containerModel =>
77-
(containerModel as AzureRmRecoveryServicesIaasVmContainer).ResourceGroupName == ResourceGroupName);
78-
}
75+
// NOTE: Should move this to provider?
76+
// 4. Filter by RG Name
77+
if (ContainerType == Models.ContainerType.AzureVM)
78+
{
79+
containerModels = containerModels.Where(containerModel =>
80+
(containerModel as AzureRmRecoveryServicesIaasVmContainer).ResourceGroupName == ResourceGroupName).ToList();
81+
}
7982

80-
WriteObject(containerModels);
83+
WriteObject(containerModels);
84+
});
8185
}
8286
}
8387
}

src/ResourceManager/RecoveryServices.Backup/Cmdlets/ProtectionPolicy/GetAzureRMBackupRetentionPolicyObject.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ public class GetAzureRMBackupRetentionPolicyObject : RecoveryServicesBackupCmdle
3939

4040
public override void ExecuteCmdlet()
4141
{
42-
base.ExecuteCmdlet();
42+
ExecutionBlock(() =>
43+
{
44+
base.ExecuteCmdlet();
45+
});
4346
}
4447
}
4548
}

src/ResourceManager/RecoveryServices.Backup/Cmdlets/ProtectionPolicy/GetAzureRMBackupSchedulePolicyObject.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ public class GetAzureRMBackupSchedulePolicyObject : RecoveryServicesBackupCmdlet
3939

4040
public override void ExecuteCmdlet()
4141
{
42-
base.ExecuteCmdlet();
42+
ExecutionBlock(() =>
43+
{
44+
base.ExecuteCmdlet();
45+
});
4346
}
4447
}
4548
}

src/ResourceManager/RecoveryServices.Backup/Cmdlets/ProtectionPolicy/GetAzureRmRecoveryServicesPolicy.cs

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,52 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets
2626
/// <summary>
2727
/// Get list of protection policies
2828
/// </summary>
29-
[Cmdlet(VerbsCommon.Get, "AzureRmRecoveryServicesProtectionPolicy"), OutputType(typeof(AzureRmRecoveryServicesPolicyBase), typeof(List<AzureRmRecoveryServicesPolicyBase>))]
29+
[Cmdlet(VerbsCommon.Get, "AzureRmRecoveryServicesProtectionPolicy", DefaultParameterSetName = NoParamSet), OutputType(typeof(AzureRmRecoveryServicesPolicyBase), typeof(List<AzureRmRecoveryServicesPolicyBase>))]
3030
public class GetAzureRmRecoveryServicesProtectionPolicy : RecoveryServicesBackupCmdletBase
3131
{
32-
[Parameter(Mandatory = true, HelpMessage = "")]
32+
protected const string PolicyNameParamSet = "PolicyNameParamSet";
33+
protected const string WorkloadParamSet = "WorkloadParamSet";
34+
protected const string NoParamSet = "NoParamSet";
35+
protected const string WorkloadBackupMangementTypeParamSet = "WorkloadBackupManagementTypeParamSet";
36+
37+
[Parameter(ParameterSetName = PolicyNameParamSet, Mandatory = true, HelpMessage = ParamHelpMsg.Policy.Name)]
3338
[ValidateNotNullOrEmpty]
3439
public string Name { get; set; }
3540

41+
[Parameter(ParameterSetName = WorkloadParamSet, Mandatory = true, HelpMessage = ParamHelpMsg.Common.WorkloadType)]
42+
[Parameter(ParameterSetName = WorkloadBackupMangementTypeParamSet, Mandatory = true, HelpMessage = ParamHelpMsg.Common.WorkloadType)]
43+
[ValidateNotNullOrEmpty]
44+
public WorkloadType WorkloadType { get; set; }
45+
46+
[Parameter(ParameterSetName = WorkloadBackupMangementTypeParamSet, Mandatory = false, HelpMessage = ParamHelpMsg.Common.BackupManagementType)]
47+
[ValidateNotNullOrEmpty]
48+
public BackupManagementType BackupManagementType { get; set; }
49+
3650
public override void ExecuteCmdlet()
3751
{
52+
// TBD section below
53+
3854
base.ExecuteCmdlet();
3955

40-
PsBackupProviderManager providerManager = new PsBackupProviderManager(new Dictionary<System.Enum, object>()
41-
{
42-
{ContainerParams.Name, Name},
43-
}, HydraAdapter);
56+
switch(this.ParameterSetName)
57+
{
58+
case PolicyNameParamSet:
59+
break;
60+
61+
case WorkloadParamSet:
62+
break;
63+
64+
case WorkloadBackupMangementTypeParamSet:
65+
break;
66+
67+
case NoParamSet:
68+
break;
69+
70+
default:
71+
break;
72+
}
4473

45-
IPsBackupProvider psBackupProvider = providerManager.GetProviderInstance(ContainerType.AzureVM);
74+
// TBD
4675
}
4776
}
4877
}

src/ResourceManager/RecoveryServices.Backup/Cmdlets/ProtectionPolicy/NewAzureRmRecoveryServicesPolicy.cs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
using System.Threading.Tasks;
1919
using System.Collections.Generic;
2020
using System.Management.Automation;
21+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers;
22+
using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
2123
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
2224
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel;
2325

@@ -29,23 +31,23 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets
2931
[Cmdlet(VerbsCommon.New, "AzureRmRecoveryServicesProtectionPolicy"), OutputType(typeof(AzureRmRecoveryServicesPolicyBase))]
3032
public class NewAzureRmRecoveryServicesProtectionPolicy : RecoveryServicesBackupCmdletBase
3133
{
32-
[Parameter(Mandatory = true, HelpMessage = "")]
34+
[Parameter(Mandatory = true, HelpMessage = ParamHelpMsg.Policy.Name)]
3335
[ValidateNotNullOrEmpty]
3436
public string Name { get; set; }
3537

36-
[Parameter(Mandatory = true, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
38+
[Parameter(Mandatory = true, HelpMessage = ParamHelpMsg.Common.WorkloadType, ValueFromPipelineByPropertyName = true)]
3739
[ValidateNotNullOrEmpty]
3840
public WorkloadType WorkloadType { get; set; }
3941

40-
[Parameter(Mandatory = false, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
42+
[Parameter(Mandatory = false, HelpMessage = ParamHelpMsg.Common.BackupManagementType, ValueFromPipelineByPropertyName = true)]
4143
[ValidateNotNullOrEmpty]
4244
public BackupManagementType BackupManagementType { get; set; }
4345

44-
[Parameter(Mandatory = false, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
46+
[Parameter(Mandatory = false, HelpMessage = ParamHelpMsg.Policy.RetentionPolicy, ValueFromPipelineByPropertyName = true)]
4547
[ValidateNotNullOrEmpty]
4648
public AzureRmRecoveryServicesRetentionPolicyBase RetentionPolicy { get; set; }
4749

48-
[Parameter(Mandatory = false, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
50+
[Parameter(Mandatory = false, HelpMessage = ParamHelpMsg.Policy.SchedulePolicy, ValueFromPipelineByPropertyName = true)]
4951
[ValidateNotNullOrEmpty]
5052
public AzureRmRecoveryServicesSchedulePolicyBase SchedulePolicy { get; set; }
5153

@@ -55,10 +57,21 @@ public override void ExecuteCmdlet()
5557

5658
PsBackupProviderManager providerManager = new PsBackupProviderManager(new Dictionary<System.Enum, object>()
5759
{
58-
{ContainerParams.Name, Name},
60+
{PolicyParams.PolicyName, Name},
61+
{PolicyParams.WorkloadType, WorkloadType},
62+
{PolicyParams.BackupManagementType, BackupManagementType},
63+
{PolicyParams.RetentionPolicy, RetentionPolicy},
64+
{PolicyParams.SchedulePolicy, SchedulePolicy},
5965
}, HydraAdapter);
6066

61-
IPsBackupProvider psBackupProvider = providerManager.GetProviderInstance(ContainerType.AzureVM);
67+
IPsBackupProvider psBackupProvider = providerManager.GetProviderInstance(WorkloadType, BackupManagementType);
68+
psBackupProvider.CreatePolicy();
69+
70+
// now get the created policy and return
71+
ProtectionPolicyResponse policy = psBackupProvider.GetPolicy();
72+
73+
// now convert hydraPolicy to PSObject
74+
WriteObject(ConversionHelpers.GetPolicyModel(policy.Item));
6275
}
6376
}
6477
}

src/ResourceManager/RecoveryServices.Backup/Cmdlets/ProtectionPolicy/SetAzureRmRecoveryServicesPolicy.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
using System.Threading.Tasks;
1919
using System.Collections.Generic;
2020
using System.Management.Automation;
21+
using Microsoft.Azure.Management.RecoveryServices.Backup.Models;
22+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers;
2123
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
2224
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel;
2325

@@ -29,36 +31,38 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets
2931
[Cmdlet(VerbsCommon.Set, "AzureRmRecoveryServicesProtectionPolicy")]
3032
public class SetAzureRmRecoveryServicesProtectionPolicy : RecoveryServicesBackupCmdletBase
3133
{
32-
[Parameter(Mandatory = true, HelpMessage = "")]
33-
[ValidateNotNullOrEmpty]
34-
public string Name { get; set; }
35-
36-
[Parameter(Mandatory = true, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
37-
[ValidateNotNullOrEmpty]
38-
public WorkloadType WorkloadType { get; set; }
39-
40-
[Parameter(Mandatory = false, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
41-
[ValidateNotNullOrEmpty]
42-
public BackupManagementType BackupManagementType { get; set; }
43-
44-
[Parameter(Mandatory = false, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
34+
[Parameter(Mandatory = false, HelpMessage = ParamHelpMsg.Policy.RetentionPolicy)]
4535
[ValidateNotNullOrEmpty]
4636
public AzureRmRecoveryServicesRetentionPolicyBase RetentionPolicy { get; set; }
4737

48-
[Parameter(Mandatory = false, HelpMessage = "", ValueFromPipelineByPropertyName = true)]
38+
[Parameter(Mandatory = false, HelpMessage = ParamHelpMsg.Policy.SchedulePolicy)]
4939
[ValidateNotNullOrEmpty]
5040
public AzureRmRecoveryServicesSchedulePolicyBase SchedulePolicy { get; set; }
5141

42+
[Parameter(Mandatory = true, HelpMessage = ParamHelpMsg.Policy.ProtectionPolicy, ValueFromPipeline=true)]
43+
[ValidateNotNullOrEmpty]
44+
public AzureRmRecoveryServicesPolicyBase Policy { get; set; }
45+
5246
public override void ExecuteCmdlet()
5347
{
5448
base.ExecuteCmdlet();
5549

5650
PsBackupProviderManager providerManager = new PsBackupProviderManager(new Dictionary<System.Enum, object>()
57-
{
58-
{ContainerParams.Name, Name},
51+
{
52+
{PolicyParams.ProtectionPolicy, Policy},
53+
{PolicyParams.RetentionPolicy, RetentionPolicy},
54+
{PolicyParams.SchedulePolicy, SchedulePolicy},
5955
}, HydraAdapter);
6056

61-
IPsBackupProvider psBackupProvider = providerManager.GetProviderInstance(ContainerType.AzureVM);
57+
IPsBackupProvider psBackupProvider = providerManager.GetProviderInstance(Policy.WorkloadType,
58+
Policy.BackupManagementType);
59+
psBackupProvider.ModifyPolicy();
60+
61+
// now get the created policy and return
62+
ProtectionPolicyResponse policy = psBackupProvider.GetPolicy();
63+
64+
// now convert hydraPolicy to PSObject
65+
WriteObject(ConversionHelpers.GetPolicyModel(policy.Item));
6266
}
6367
}
6468
}

src/ResourceManager/RecoveryServices.Backup/Commands.RecoveryServices.Backup.Helpers/Commands.RecoveryServices.Backup.Helpers.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@
3030
<WarningLevel>4</WarningLevel>
3131
</PropertyGroup>
3232
<ItemGroup>
33+
<Reference Include="Hyak.Common">
34+
<HintPath>..\..\..\packages\Hyak.Common.1.0.3\lib\net45\Hyak.Common.dll</HintPath>
35+
</Reference>
36+
<Reference Include="Microsoft.Azure.Common">
37+
<HintPath>..\..\..\packages\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.dll</HintPath>
38+
</Reference>
3339
<Reference Include="Microsoft.Azure.Management.RecoveryServicesBackupManagement">
3440
<HintPath>..\Commands.RecoveryServices.Backup.HydraAdapter\Resources\Microsoft.Azure.Management.RecoveryServicesBackupManagement.dll</HintPath>
3541
</Reference>
@@ -44,6 +50,7 @@
4450
</ItemGroup>
4551
<ItemGroup>
4652
<Compile Include="Conversions\JobConversions.cs" />
53+
<Compile Include="Utils.cs" />
4754
<Compile Include="Validations\PolicyValidations.cs" />
4855
<Compile Include="Conversions\SchedulePolicyConversions.cs" />
4956
<Compile Include="Conversions\RetentionPolicyConversions.cs" />

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

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers
2424
{
2525
public class ConversionHelpers
2626
{
27+
#region containers
2728
public static AzureRmRecoveryServicesContainerBase GetContainerModel(ProtectionContainerResource protectionContainer)
2829
{
2930
AzureRmRecoveryServicesContainerBase containerModel = null;
@@ -51,5 +52,80 @@ public static List<AzureRmRecoveryServicesContainerBase> GetContainerModelList(I
5152

5253
return containerModels;
5354
}
55+
56+
#endregion
57+
58+
#region policy
59+
public static AzureRmRecoveryServicesPolicyBase GetPolicyModel(ProtectionPolicyResource hydraResponse)
60+
{
61+
AzureRmRecoveryServicesPolicyBase policyModel = null;
62+
63+
if(hydraResponse == null || hydraResponse.Properties == null)
64+
{
65+
throw new ArgumentException("Empty policy Hydra response");
66+
}
67+
68+
if (hydraResponse.Properties.GetType() == typeof(AzureIaaSVMProtectionPolicy))
69+
{
70+
if(((AzureIaaSVMProtectionPolicy)hydraResponse.Properties).RetentionPolicy.GetType() !=
71+
typeof(LongTermRetentionPolicy))
72+
{
73+
// unsupported by old powershell - trace warning and return null
74+
return null;
75+
}
76+
77+
if (((AzureIaaSVMProtectionPolicy)hydraResponse.Properties).SchedulePolicy.GetType() !=
78+
typeof(SimpleSchedulePolicy))
79+
{
80+
// unsupported by old powershell - trace warning and return null
81+
return null;
82+
}
83+
84+
policyModel = new AzureRmRecoveryServicesIaasVmPolicy();
85+
AzureRmRecoveryServicesIaasVmPolicy iaasPolicyModel = policyModel as AzureRmRecoveryServicesIaasVmPolicy;
86+
iaasPolicyModel.WorkloadType = WorkloadType.AzureVM;
87+
iaasPolicyModel.BackupManagementType = BackupManagementType.AzureVM;
88+
iaasPolicyModel.RetentionPolicy = PolicyHelpers.GetPSLongTermRetentionPolicy((LongTermRetentionPolicy)
89+
((AzureIaaSVMProtectionPolicy)hydraResponse.Properties).RetentionPolicy);
90+
iaasPolicyModel.SchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicyPolicy((SimpleSchedulePolicy)
91+
((AzureIaaSVMProtectionPolicy)hydraResponse.Properties).SchedulePolicy);
92+
}
93+
else
94+
{
95+
// TBD - trace warning message, ignore and return
96+
// we will enter this case when service supports new workload and customer
97+
// still using old version of powershell
98+
return null;
99+
}
100+
101+
policyModel.Name = hydraResponse.Name;
102+
103+
return policyModel;
104+
}
105+
106+
public static List<AzureRmRecoveryServicesPolicyBase> GetPolicyModelList(ProtectionPolicyListResponse hydraListResponse)
107+
{
108+
if(hydraListResponse == null || hydraListResponse.ItemList == null ||
109+
hydraListResponse.ItemList.Value == null || hydraListResponse.ItemList.Value.Count == 0)
110+
{
111+
return null;
112+
}
113+
114+
List<AzureRmRecoveryServicesPolicyBase> policyModels = new List<AzureRmRecoveryServicesPolicyBase>();
115+
AzureRmRecoveryServicesPolicyBase policyModel = null;
116+
117+
foreach(ProtectionPolicyResource resource in hydraListResponse.ItemList.Value)
118+
{
119+
policyModel = GetPolicyModel(resource);
120+
if(policyModel != null)
121+
{
122+
policyModels.Add(policyModel);
123+
}
124+
}
125+
126+
return policyModels;
127+
}
128+
129+
#endregion
54130
}
55131
}

0 commit comments

Comments
 (0)