Skip to content

Commit aaae0fa

Browse files
committed
Merge pull request AzureRT#188 from MabOneSdk/dev1-sudreddy
Base skeletons for policy cmdlets and coversion helpers
2 parents 2769841 + 91ead53 commit aaae0fa

File tree

11 files changed

+221
-33
lines changed

11 files changed

+221
-33
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
}

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: 6 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>

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

Lines changed: 62 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,66 @@ 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+
policyModel = new AzureRmRecoveryServicesIaasVmPolicy();
71+
AzureRmRecoveryServicesIaasVmPolicy iaasPolicyModel = policyModel as AzureRmRecoveryServicesIaasVmPolicy;
72+
iaasPolicyModel.WorkloadType = WorkloadType.AzureVM;
73+
iaasPolicyModel.BackupManagementType = BackupManagementType.AzureVM;
74+
iaasPolicyModel.RetentionPolicy = PolicyHelpers.GetPSLongTermRetentionPolicy((LongTermRetentionPolicy)
75+
((AzureIaaSVMProtectionPolicy)hydraResponse.Properties).RetentionPolicy);
76+
iaasPolicyModel.SchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicyPolicy((SimpleSchedulePolicy)
77+
((AzureIaaSVMProtectionPolicy)hydraResponse.Properties).SchedulePolicy);
78+
}
79+
else
80+
{
81+
// TBD - trace warning message, ignore and return
82+
// we will enter this case when service supports new workload and customer
83+
// still using old version of powershell
84+
return null;
85+
}
86+
87+
policyModel.Name = hydraResponse.Name;
88+
89+
return policyModel;
90+
}
91+
92+
public static List<AzureRmRecoveryServicesPolicyBase> GetPolicyModelList(ProtectionPolicyListResponse hydraListResponse)
93+
{
94+
if(hydraListResponse == null || hydraListResponse.ItemList == null ||
95+
hydraListResponse.ItemList.Value == null || hydraListResponse.ItemList.Value.Count == 0)
96+
{
97+
return null;
98+
}
99+
100+
List<AzureRmRecoveryServicesPolicyBase> policyModels = new List<AzureRmRecoveryServicesPolicyBase>();
101+
AzureRmRecoveryServicesPolicyBase policyModel = null;
102+
103+
foreach(ProtectionPolicyResource resource in hydraListResponse.ItemList.Value)
104+
{
105+
policyModel = GetPolicyModel(resource);
106+
if(policyModel != null)
107+
{
108+
policyModels.Add(policyModel);
109+
}
110+
}
111+
112+
return policyModels;
113+
}
114+
115+
#endregion
54116
}
55117
}

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,56 @@ namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers
2525
public partial class PolicyHelpers
2626
{
2727
#region HydraToPSObject conversions
28+
29+
#region public
2830
public static AzureRmRecoveryServicesLongTermRetentionPolicy GetPSLongTermRetentionPolicy(
2931
LongTermRetentionPolicy hydraRetPolicy)
32+
{
33+
AzureRmRecoveryServicesLongTermRetentionPolicy ltrPolicy = new AzureRmRecoveryServicesLongTermRetentionPolicy();
34+
35+
// TBD
36+
37+
return ltrPolicy;
38+
}
39+
40+
public static AzureRmRecoveryServicesLongTermRetentionPolicy GetPSSimpleRetentionPolicy(
41+
SimpleRetentionPolicy hydraRetPolicy)
3042
{
3143
throw new NotImplementedException();
3244
}
45+
#endregion
46+
47+
#region private
48+
49+
// TBD
50+
51+
#endregion
3352

3453
#endregion
3554

3655
#region PStoHydraObject conversions
3756
public static LongTermRetentionPolicy GetHydraLongTermRetentionPolicy(
3857
AzureRmRecoveryServicesLongTermRetentionPolicy psRetPolicy)
58+
{
59+
LongTermRetentionPolicy hydraRetPolicy = new LongTermRetentionPolicy();
60+
61+
// TBD
62+
63+
return hydraRetPolicy;
64+
}
65+
66+
public static SimpleRetentionPolicy GetHydraSimpleRetentionPolicy(
67+
AzureRmRecoveryServicesSimpleSchedulePolicy psRetPolicy)
3968
{
4069
throw new NotImplementedException();
4170
}
4271

72+
#region private
73+
74+
// TBD
75+
76+
#endregion
77+
4378
#endregion
4479
}
4580
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public class AzureRmRecoveryServicesRecoveryPointBase : AzureRmRecoveryServicesO
152152

153153
public class AzureRmRecoveryServicesPolicyBase : AzureRmRecoveryServicesObjectBase
154154
{
155-
public string PolicyName { get; set; }
155+
public string Name { get; set; }
156156

157157
public BackupManagementType BackupManagementType { get; set; }
158158

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,14 @@ public enum ContainerParams
3030
ResourceGroupName,
3131
Status,
3232
}
33+
34+
public enum PolicyParams
35+
{
36+
WorkloadType,
37+
BackupManagementType,
38+
PolicyName,
39+
SchedulePolicy,
40+
RetentionPolicy,
41+
ProtectionPolicy
42+
}
3343
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public enum ContainerType
2929

3030
public enum BackupManagementType
3131
{
32+
AzureVM
3233
}
3334

3435
public enum WorkloadType

0 commit comments

Comments
 (0)