Skip to content

Commit 1130974

Browse files
committed
LTR Policy Changes
1 parent 766fa9b commit 1130974

File tree

10 files changed

+945
-206
lines changed

10 files changed

+945
-206
lines changed

src/ResourceManager/AzureBackup/Commands.AzureBackup.Test/ScenarioTests/AzureBackupPolicyTests.ps1

Lines changed: 23 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ $Location = "SouthEast Asia"
1919
$PolicyName = "Policy10";
2020
$PolicyId = "c87bbada-6e1b-4db2-b76c-9062d28959a4";
2121
$POName = "iaasvmcontainer;dev01testing;dev01testing"
22-
$WorkloadType = "VM"
22+
$Type = "IaasVM"
2323
$RetentionType = "Days"
24-
$ScheduleRunTimes = "2015-06-13T20:30:00"
25-
$ScheduleRunDays = "Monday"
24+
$BackupTime = "2015-06-13T20:30:00"
25+
$DaysOfWeek = "Monday"
2626
$RetentionDuration = 30
2727
$BackupType = "Full"
2828
$ScheduleType = "Daily"
@@ -40,10 +40,9 @@ function Test-GetAzureBackupProtectionPolicyTests
4040
{
4141
Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null'
4242
Assert-NotNull $protectionPolicy.Name 'Name should not be null'
43-
Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null'
44-
Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null'
45-
Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null'
46-
Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null'
43+
Assert-NotNull $protectionPolicy.Type 'Type should not be null'
44+
Assert-NotNull $protectionPolicy.BackupTime 'BackupTime should not be null'
45+
Assert-NotNull $protectionPolicy.RetentionPolicyList 'RetentionPolicyList should not be null'
4746
Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null'
4847
Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null'
4948
Assert-NotNull $protectionPolicy.Location 'Location should not be null'
@@ -57,10 +56,9 @@ function Test-GetAzureBackupProtectionPolicyByNameTests
5756

5857
Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null'
5958
Assert-NotNull $protectionPolicy.Name 'Name should not be null'
60-
Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null'
61-
Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null'
62-
Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null'
63-
Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null'
59+
Assert-NotNull $protectionPolicy.Type 'Type should not be null'
60+
Assert-NotNull $protectionPolicy.BackupTime 'BackupTime should not be null'
61+
Assert-NotNull $protectionPolicy.RetentionPolicyList 'RetentionPolicyList should not be null'
6462
Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null'
6563
Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null'
6664
Assert-NotNull $protectionPolicy.Location 'Location should not be null'
@@ -70,59 +68,35 @@ function Test-GetAzureBackupProtectionPolicyByNameTests
7068
function Test-NewAzureBackupProtectionPolicyTests
7169
{
7270
$vault = Get-AzureBackupVault -Name $ResourceName;
73-
$protectionPolicy = New-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName -WorkloadType $WorkloadType -BackupType $BackupType -Daily -RetentionType $RetentionType -RetentionDuration $RetentionDuration -ScheduleRunTimes $ScheduleRunTimes
71+
$r1 = New-AzureBackupRetentionPolicyObject -DailyRetention -Retention 20
72+
$r2 = New-AzureBackupRetentionPolicyObject -WeeklyRetention -DaysOfWeek "Monday" -Retention 10
73+
$r = ($r1, $r2)
74+
75+
$protectionPolicy = New-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName -Type $Type -Daily -RetentionPolicies $r -BackupTime $BackupTime
7476

7577
Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null'
7678
Assert-NotNull $protectionPolicy.Name 'Name should not be null'
77-
Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null'
78-
Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null'
79-
Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null'
80-
Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null'
79+
Assert-NotNull $protectionPolicy.Type 'Type should not be null'
80+
Assert-NotNull $protectionPolicy.BackupTime 'BackupTime should not be null'
81+
Assert-NotNull $protectionPolicy.RetentionPolicyList 'RetentionPolicyList should not be null'
8182
Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null'
8283
Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null'
8384
Assert-NotNull $protectionPolicy.Location 'Location should not be null'
8485
}
8586

8687
function Test-SetAzureBackupProtectionPolicyTests
8788
{
88-
$policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy
89-
$policy.InstanceId = $PolicyId
90-
$policy.Name = $PolicyName
91-
$policy.ResourceGroupName = $ResourceGroupName
92-
$policy.ResourceName = $ResourceName
93-
$policy.Location = $Location
94-
$policy.WorkloadType = $WorkloadType
95-
$policy.RetentionType = $RetentionType
96-
$policy.ScheduleRunTimes = $ScheduleRunTimes
97-
$policy.ScheduleType = $ScheduleType
89+
$vault = Get-AzureBackupVault -Name $ResourceName;
90+
$protectionPolicy = Get-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName
9891
$policyNewName = "policy09_new"
9992

100-
$protectionPolicy = Set-AzureBackupProtectionPolicy -ProtectionPolicy $policy -NewName $policyNewName
101-
102-
Assert-NotNull $protectionPolicy.InstanceId 'InstanceId should not be null'
103-
Assert-NotNull $protectionPolicy.Name 'Name should not be null'
104-
Assert-NotNull $protectionPolicy.WorkloadType 'WorkloadType should not be null'
105-
Assert-NotNull $protectionPolicy.BackupType 'BackupType should not be null'
106-
Assert-NotNull $protectionPolicy.ScheduleRunTimes 'ScheduleRunTimes should not be null'
107-
Assert-NotNull $protectionPolicy.RetentionDuration 'RetentionDuration should not be null'
108-
Assert-NotNull $protectionPolicy.ResourceGroupName 'ResourceGroupName should not be null'
109-
Assert-NotNull $protectionPolicy.ResourceName 'ResourceName should not be null'
110-
Assert-NotNull $protectionPolicy.Location 'Location should not be null'
93+
Set-AzureBackupProtectionPolicy -ProtectionPolicy $protectionPolicy -NewName $policyNewName
11194
}
11295

11396
function Test-RemoveAzureBackupProtectionPolicyTests
11497
{
115-
$policyNewName = "policy09_new"
116-
$policy = New-Object Microsoft.Azure.Commands.AzureBackup.Models.AzureBackupProtectionPolicy
117-
$policy.InstanceId = $PolicyId
118-
$policy.Name = $policyNewName
119-
$policy.ResourceGroupName = $ResourceGroupName
120-
$policy.ResourceName = $ResourceName
121-
$policy.Location = $Location
122-
$policy.WorkloadType = $WorkloadType
123-
$policy.RetentionType = $RetentionType
124-
$policy.ScheduleRunTimes = $ScheduleRunTimes
125-
$policy.ScheduleType = $ScheduleType
98+
$vault = Get-AzureBackupVault -Name $ResourceName;
99+
$protectionPolicy = Get-AzureBackupProtectionPolicy -vault $vault -Name $PolicyName
126100

127-
Remove-AzureBackupProtectionPolicy -ProtectionPolicy $policy
101+
Remove-AzureBackupProtectionPolicy -ProtectionPolicy $protectionPolicy
128102
}

src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupClientAdapter/PolicyAdapter.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,51 +37,51 @@ public partial class AzureBackupClientAdapter
3737
/// </summary>
3838
/// <param name="name"></param>
3939
/// <returns></returns>
40-
public ProtectionPolicyInfo GetProtectionPolicyByName(string name)
40+
public CSMProtectionPolicyResponse GetProtectionPolicyByName(string name)
4141
{
4242
var policyList = ListProtectionPolicies();
43-
4443
var filteredList = policyList.Where(x => x.Name.Equals(name, System.StringComparison.InvariantCultureIgnoreCase));
45-
return filteredList.FirstOrDefault();
44+
return filteredList.FirstOrDefault();
4645
}
4746

4847
/// <summary>
4948
/// Gets all policies in the vault
5049
/// </summary>
5150
/// <returns></returns>
52-
public IEnumerable<ProtectionPolicyInfo> ListProtectionPolicies()
53-
{
54-
var listResponse = AzureBackupClient.ProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result;
55-
return listResponse.ProtectionPolicies.Objects;
51+
public IList<CSMProtectionPolicyResponse> ListProtectionPolicies()
52+
{
53+
var listResponse = AzureBackupClient.CSMProtectionPolicy.ListAsync(GetCustomRequestHeaders(), CmdletCancellationToken).Result;
54+
return listResponse.CSMProtectionPolicyListResponse.Value;
5655
}
5756

5857
/// <summary>
5958
/// Add protection policy
6059
/// </summary>
60+
/// <param name="policyName"></param>
6161
/// <param name="request"></param>
62-
public void AddProtectionPolicy(AddProtectionPolicyRequest request)
62+
public void AddProtectionPolicy(string policyName, CSMAddProtectionPolicyRequest request)
6363
{
64-
AzureBackupClient.ProtectionPolicy.AddAsync(request, GetCustomRequestHeaders(), CmdletCancellationToken).Wait();
64+
AzureBackupClient.CSMProtectionPolicy.AddAsync(policyName, request, GetCustomRequestHeaders(), CmdletCancellationToken).Wait();
6565
}
6666

6767
/// <summary>
6868
/// Delete protection policy
6969
/// </summary>
70-
/// <param name="policyId"></param>
71-
public void DeleteProtectionPolicy(string policyId)
70+
/// <param name="policyName"></param>
71+
public void DeleteProtectionPolicy(string policyName)
7272
{
73-
AzureBackupClient.ProtectionPolicy.DeleteAsync(policyId, GetCustomRequestHeaders(), CmdletCancellationToken).Wait();
73+
AzureBackupClient.CSMProtectionPolicy.DeleteAsync(policyName, GetCustomRequestHeaders(), CmdletCancellationToken).Wait();
7474
}
7575

7676
/// <summary>
7777
/// Update specified protection policy
7878
/// </summary>
79-
/// <param name="policyId"></param>
79+
/// <param name="policyName"></param>
8080
/// <param name="request"></param>
81-
public Guid UpdateProtectionPolicy(string policyId, UpdateProtectionPolicyRequest request)
81+
public Guid UpdateProtectionPolicy(string policyName, CSMUpdateProtectionPolicyRequest request)
8282
{
83-
var response = AzureBackupClient.ProtectionPolicy.UpdateAsync(policyId, request, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
84-
return response.OperationId;
83+
var response = AzureBackupClient.CSMProtectionPolicy.UpdateAsync(policyName, request, GetCustomRequestHeaders(), CmdletCancellationToken).Result;
84+
return response.OperationId;
8585
}
8686

8787
/// <summary>

src/ResourceManager/AzureBackup/Commands.AzureBackup/AzureBackupCmdletHelpMessage.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,18 @@ internal static class AzureBackupCmdletHelpMessage
8080
public const string ServiceName = "Cloud service name of Azure VM to be register";
8181
public const string RGName = "Resource Group name of Azure VM to be register";
8282
public const string AzureBackupContainerToUnregister = "Azure Backup Container tobe unregister.";
83+
84+
public const string RetentionPolicyList = "List of Retention Policies to be associated with protection policy.";
85+
public const string DailyRetention = "Switch param for Daily Retention";
86+
public const string WeeklyRetention = "Switch param for Daily Retention";
87+
public const string MonthlyRetentionInDailyFormat = "Switch param for MonthlyRetentionInDailyFormat";
88+
public const string MonthlyRetentionInWeeklyFormat = "Switch param for MonthlyRetentionInWeeklyFormat";
89+
public const string YearlyRetentionInDailyFormat = "Switch param for YearlyRetentionInDailyFormat";
90+
public const string YearlyRetentionInWeeklyFormat = "Switch param for YearlyRetentionInWeeklyFormat";
91+
public const string DaysOfWeek = "List of Days of Week";
92+
public const string DaysOfMonth = "List of Days of Month";
93+
public const string WeekNumber = "List of Week Numbers of the month";
94+
public const string MonthsOfYear = "List of Months of the year";
95+
public const string Retention = "Retntion duration value";
8396
}
8497
}

src/ResourceManager/AzureBackup/Commands.AzureBackup/Cmdlets/ProtectionPolicy/NewAzureBackupProtectionPolicy.cs

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -38,34 +38,26 @@ public class NewAzureBackupProtectionPolicy : AzureBackupVaultCmdletBase
3838
public string Name { get; set; }
3939

4040
[Parameter(Position = 2, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WorkloadType, ValueFromPipelineByPropertyName = true)]
41-
[ValidateSet("VM", IgnoreCase = true)]
42-
public string WorkloadType { get; set; }
41+
[ValidateSet("IaasVM", IgnoreCase = true)]
42+
public string Type { get; set; }
4343

44-
[Parameter(Position = 3, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.BackupType, ValueFromPipelineByPropertyName = true)]
45-
[ValidateSet("Full", IgnoreCase = true)]
46-
public string BackupType { get; set; }
47-
48-
[Parameter(ParameterSetName = DailyScheduleParamSet, Position = 4, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.DailyScheduleType)]
44+
[Parameter(ParameterSetName = DailyScheduleParamSet, Position = 3, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.DailyScheduleType)]
4945
public SwitchParameter Daily { get; set; }
5046

51-
[Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 5, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WeeklyScheduleType)]
47+
[Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 4, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.WeeklyScheduleType)]
5248
public SwitchParameter Weekly { get; set; }
5349

54-
[Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)]
55-
public DateTime ScheduleRunTimes { get; set; }
56-
57-
[Parameter(Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionType, ValueFromPipelineByPropertyName = true)]
58-
[ValidateSet("Days", "Weeks", IgnoreCase = true)]
59-
public string RetentionType { get; set; }
50+
[Parameter(Position = 5, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunTimes, ValueFromPipelineByPropertyName = true)]
51+
public DateTime BackupTime { get; set; }
6052

61-
[Parameter(Position = 8, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RententionDuration, ValueFromPipelineByPropertyName = true)]
62-
public int RetentionDuration { get; set; }
63-
64-
[Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 9, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)]
65-
[Parameter(ParameterSetName = NoScheduleParamSet, Position = 9, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)]
53+
[Parameter(ParameterSetName = WeeklyScheduleParamSet, Position = 7, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)]
54+
[Parameter(ParameterSetName = NoScheduleParamSet, Position = 7, Mandatory = false, HelpMessage = AzureBackupCmdletHelpMessage.ScheduleRunDays, ValueFromPipelineByPropertyName = true)]
6655
[AllowEmptyCollection]
6756
[ValidateSet("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", IgnoreCase = true)]
68-
public string[] ScheduleRunDays { get; set; }
57+
public string[] DaysOfWeek { get; set; }
58+
59+
[Parameter(Position = 6, Mandatory = true, HelpMessage = AzureBackupCmdletHelpMessage.RetentionPolicyList)]
60+
public AzureBackupRetentionPolicy[] RetentionPolicies { get; set; }
6961

7062
public override void ExecuteCmdlet()
7163
{
@@ -77,24 +69,33 @@ public override void ExecuteCmdlet()
7769
ProtectionPolicyHelpers.ValidateProtectionPolicyName(Name);
7870
AzureBackupClient.CheckProtectionPolicyNameAvailability(this.Name);
7971

80-
var ScheduleType = ProtectionPolicyHelpers.GetScheduleType(ScheduleRunDays, this.ParameterSetName,
72+
var ScheduleType = ProtectionPolicyHelpers.GetScheduleType(DaysOfWeek, this.ParameterSetName,
8173
DailyScheduleParamSet, WeeklyScheduleParamSet);
8274

83-
var backupSchedule = ProtectionPolicyHelpers.FillBackupSchedule(BackupType, ScheduleType, ScheduleRunTimes,
84-
RetentionType, RetentionDuration, ScheduleRunDays);
75+
var backupSchedule = ProtectionPolicyHelpers.FillCSMBackupSchedule(ScheduleType, BackupTime,
76+
DaysOfWeek);
77+
78+
ProtectionPolicyHelpers.ValidateRetentionPolicy(RetentionPolicies, backupSchedule);
8579

86-
var addProtectionPolicyRequest = new AddProtectionPolicyRequest();
87-
addProtectionPolicyRequest.PolicyName = this.Name;
88-
addProtectionPolicyRequest.Schedule = backupSchedule;
89-
addProtectionPolicyRequest.WorkloadType = Enum.Parse(typeof(WorkloadType), this.WorkloadType, true).ToString();
80+
AzureBackupProtectionPolicy protectionPolicy = new AzureBackupProtectionPolicy();
81+
82+
var addCSMProtectionPolicyRequest = new CSMAddProtectionPolicyRequest();
83+
addCSMProtectionPolicyRequest.PolicyName = this.Name;
84+
addCSMProtectionPolicyRequest.Properties = new CSMAddProtectionPolicyRequestProperties();
85+
addCSMProtectionPolicyRequest.Properties.PolicyName = this.Name;
86+
addCSMProtectionPolicyRequest.Properties.BackupSchedule = backupSchedule;
87+
addCSMProtectionPolicyRequest.Properties.WorkloadType = Enum.Parse(typeof(WorkloadType), this.Type, true).ToString();
9088

91-
AzureBackupClient.AddProtectionPolicy(addProtectionPolicyRequest);
89+
addCSMProtectionPolicyRequest.Properties.LtrRetentionPolicy = ProtectionPolicyHelpers.ConvertToCSMRetentionPolicyObject(RetentionPolicies, backupSchedule);
90+
91+
AzureBackupClient.AddProtectionPolicy(this.Name, addCSMProtectionPolicyRequest);
9292
WriteDebug("Protection policy created successfully");
9393

9494
var policyInfo = AzureBackupClient.GetProtectionPolicyByName(Name);
9595
WriteObject(ProtectionPolicyHelpers.GetCmdletPolicy(Vault, policyInfo));
9696
});
9797
}
9898
}
99+
99100
}
100101

0 commit comments

Comments
 (0)