Skip to content

Commit 36511b6

Browse files
committed
Policy cmdlets for mercury
1 parent c437ebe commit 36511b6

File tree

21 files changed

+1444
-87
lines changed

21 files changed

+1444
-87
lines changed

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

Lines changed: 132 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public static PolicyBase GetPolicyModelForAzureSql(ServiceClientModel.Protection
190190
ServiceClientModel.SimpleRetentionPolicy azureSqlRetentionPolicy =
191191
(ServiceClientModel.SimpleRetentionPolicy)azureSqlPolicy.RetentionPolicy;
192192
sqlPolicyModel.RetentionPolicy =
193-
PolicyHelpers.GetPSSimpleRetentionPolicy(azureSqlRetentionPolicy, null);
193+
PolicyHelpers.GetPSSimpleRetentionPolicy(azureSqlRetentionPolicy, null, "AzureSql");
194194
return policyModel;
195195
}
196196

@@ -236,6 +236,85 @@ public static PolicyBase GetPolicyModelForAzureFileShare(ServiceClientModel.Prot
236236
return policyModel;
237237
}
238238

239+
public static PolicyBase GetPolicyModelForAzureVmWorkload(ServiceClientModel.ProtectionPolicyResource serviceClientResponse,
240+
PolicyBase policyModel)
241+
{
242+
ServiceClientModel.AzureVmWorkloadProtectionPolicy azureVmWorkloadPolicy =
243+
(ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties;
244+
245+
foreach (var policy in azureVmWorkloadPolicy.SubProtectionPolicy)
246+
{
247+
if (string.Compare(policy.PolicyType, "Full") == 0)
248+
{
249+
if (policy.SchedulePolicy.GetType() !=
250+
typeof(ServiceClientModel.SimpleSchedulePolicy))
251+
{
252+
Logger.Instance.WriteDebug("Unknown Schedule object received: " +
253+
policy.SchedulePolicy.GetType());
254+
Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning);
255+
return null;
256+
}
257+
if (policy.RetentionPolicy.GetType() !=
258+
typeof(ServiceClientModel.LongTermRetentionPolicy))
259+
{
260+
Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " +
261+
policy.RetentionPolicy.GetType());
262+
Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning);
263+
return null;
264+
}
265+
}
266+
else if (string.Compare(policy.PolicyType, "Differential") == 0)
267+
{
268+
if (policy.SchedulePolicy.GetType() !=
269+
typeof(ServiceClientModel.SimpleSchedulePolicy))
270+
{
271+
Logger.Instance.WriteDebug("Unknown Schedule object received: " +
272+
policy.SchedulePolicy.GetType());
273+
Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning);
274+
return null;
275+
}
276+
if (policy.RetentionPolicy.GetType() !=
277+
typeof(ServiceClientModel.SimpleRetentionPolicy))
278+
{
279+
Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " +
280+
policy.RetentionPolicy.GetType());
281+
Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning);
282+
return null;
283+
}
284+
}
285+
else if (string.Compare(policy.PolicyType, "Log") == 0)
286+
{
287+
if (policy.SchedulePolicy.GetType() !=
288+
typeof(ServiceClientModel.LogSchedulePolicy))
289+
{
290+
Logger.Instance.WriteDebug("Unknown Schedule object received: " +
291+
policy.SchedulePolicy.GetType());
292+
Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning);
293+
return null;
294+
}
295+
if (policy.RetentionPolicy.GetType() !=
296+
typeof(ServiceClientModel.SimpleRetentionPolicy))
297+
{
298+
Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " +
299+
policy.RetentionPolicy.GetType());
300+
Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning);
301+
return null;
302+
}
303+
}
304+
}
305+
306+
policyModel = new AzureVmWorkloadPolicy();
307+
AzureVmWorkloadPolicy azureVmWorkloadPolicyModel = policyModel as AzureVmWorkloadPolicy;
308+
azureVmWorkloadPolicyModel.WorkloadType = WorkloadType.MSSQL;
309+
azureVmWorkloadPolicyModel.BackupManagementType = BackupManagementType.AzureWorkload;
310+
azureVmWorkloadPolicyModel.IsCompression =
311+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.IsCompression;
312+
GetPSSubProtectionPolicy(azureVmWorkloadPolicyModel, serviceClientResponse,
313+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone);
314+
315+
return policyModel;
316+
}
317+
239318
/// <summary>
240319
/// Helper function to convert ps backup policy model from service response.
241320
/// </summary>
@@ -263,6 +342,11 @@ public static PolicyBase GetPolicyModel(ServiceClientModel.ProtectionPolicyResou
263342
{
264343
policyModel = GetPolicyModelForAzureFileShare(serviceClientResponse, policyModel);
265344
}
345+
else if (serviceClientResponse.Properties.GetType() ==
346+
typeof(ServiceClientModel.AzureVmWorkloadProtectionPolicy))
347+
{
348+
policyModel = GetPolicyModelForAzureVmWorkload(serviceClientResponse, policyModel);
349+
}
266350
else
267351
{
268352
// we will enter this case when service supports new workload and customer
@@ -431,6 +515,53 @@ public static List<ItemBase> GetItemModelList(IEnumerable<ServiceClientModel.Pro
431515

432516
return itemModels;
433517
}
518+
519+
public static SettingsBase GetPSPolicySetting(ServiceClientModel.Settings policySettings)
520+
{
521+
SettingsBase settings = new SettingsBase();
522+
settings.IsCompression = policySettings.IsCompression;
523+
settings.Issqlcompression = policySettings.Issqlcompression;
524+
settings.TimeZone = policySettings.TimeZone;
525+
526+
return settings;
527+
}
528+
529+
public static void GetPSSubProtectionPolicy(AzureVmWorkloadPolicy azureVmWorkloadPolicyModel,
530+
ServiceClientModel.ProtectionPolicyResource serviceClientResponse, string timeZone)
531+
{
532+
foreach (var subProtectionPolicy in
533+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).SubProtectionPolicy)
534+
{
535+
if (string.Compare(subProtectionPolicy.PolicyType, "Full") == 0)
536+
{
537+
azureVmWorkloadPolicyModel.FullBackupSchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicy(
538+
(ServiceClientModel.SimpleSchedulePolicy)subProtectionPolicy.SchedulePolicy,
539+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone);
540+
541+
azureVmWorkloadPolicyModel.FullBackupRetentionPolicy = PolicyHelpers.GetPSLongTermRetentionPolicy(
542+
(ServiceClientModel.LongTermRetentionPolicy)subProtectionPolicy.RetentionPolicy,
543+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone);
544+
}
545+
else if (string.Compare(subProtectionPolicy.PolicyType, "Differential") == 0)
546+
{
547+
azureVmWorkloadPolicyModel.DifferentialBackupSchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicy(
548+
(ServiceClientModel.SimpleSchedulePolicy)subProtectionPolicy.SchedulePolicy,
549+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone);
550+
azureVmWorkloadPolicyModel.DifferentialBackupRetentionPolicy = PolicyHelpers.GetPSSimpleRetentionPolicy(
551+
(ServiceClientModel.SimpleRetentionPolicy)subProtectionPolicy.RetentionPolicy,
552+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone, "AzureWorkload");
553+
}
554+
else if (string.Compare(subProtectionPolicy.PolicyType, "Log") == 0)
555+
{
556+
azureVmWorkloadPolicyModel.LogBackupSchedulePolicy = PolicyHelpers.GetPSLogSchedulePolicy((ServiceClientModel.LogSchedulePolicy)
557+
subProtectionPolicy.SchedulePolicy,
558+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone);
559+
azureVmWorkloadPolicyModel.LogBackupRetentionPolicy = PolicyHelpers.GetPSSimpleRetentionPolicy((ServiceClientModel.SimpleRetentionPolicy)
560+
subProtectionPolicy.RetentionPolicy,
561+
((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone, "AzureWorkload");
562+
}
563+
}
564+
}
434565
#endregion
435566
}
436567
}

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

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@
1212
// limitations under the License.
1313
// ----------------------------------------------------------------------------------
1414

15+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
16+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Properties;
1517
using System;
1618
using System.Collections.Generic;
1719
using System.Linq;
18-
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
19-
using Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers;
20-
using Microsoft.Azure.Commands.RecoveryServices.Backup.Properties;
2120
using ServiceClientModel = Microsoft.Azure.Management.RecoveryServices.Backup.Models;
2221

2322
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers
@@ -75,7 +74,7 @@ public static LongTermRetentionPolicy GetPSLongTermRetentionPolicy(
7574
}
7675

7776
public static SimpleRetentionPolicy GetPSSimpleRetentionPolicy(
78-
ServiceClientModel.SimpleRetentionPolicy hydraRetPolicy, string timeZone)
77+
ServiceClientModel.SimpleRetentionPolicy hydraRetPolicy, string timeZone, string provider)
7978
{
8079
if (hydraRetPolicy == null)
8180
{
@@ -92,7 +91,24 @@ public static SimpleRetentionPolicy GetPSSimpleRetentionPolicy(
9291
(int)hydraRetPolicy.RetentionDuration.Count : default(int);
9392
}
9493

95-
simplePolicy.Validate();
94+
if (string.Compare(provider, "AzureSql") == 0)
95+
{
96+
int weeklyLimit = PolicyConstants.MaxAllowedRetentionDurationCountWeeklySql;
97+
int monthlyLimit = PolicyConstants.MaxAllowedRetentionDurationCountMonthlySql;
98+
int yearlyLimit = PolicyConstants.MaxAllowedRetentionDurationCountYearlySql;
99+
100+
if ((simplePolicy.RetentionDurationType == RetentionDurationType.Days) ||
101+
(simplePolicy.RetentionDurationType == RetentionDurationType.Weeks &&
102+
(simplePolicy.RetentionCount <= 0 || simplePolicy.RetentionCount > weeklyLimit)) ||
103+
(simplePolicy.RetentionDurationType == RetentionDurationType.Months &&
104+
(simplePolicy.RetentionCount <= 0 || simplePolicy.RetentionCount > monthlyLimit)) ||
105+
(simplePolicy.RetentionDurationType == RetentionDurationType.Years &&
106+
(simplePolicy.RetentionCount <= 0 || simplePolicy.RetentionCount > yearlyLimit)))
107+
{
108+
throw new ArgumentException(Resources.AllowedSqlRetentionRange);
109+
}
110+
}
111+
96112
return simplePolicy;
97113
}
98114

src/RecoveryServices/RecoveryServices.Backup.Helpers/Conversions/SchedulePolicyConversions.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,26 @@ public static SimpleSchedulePolicy GetPSSimpleSchedulePolicy(
5454
return psPolicy;
5555
}
5656

57+
// <summary>
58+
/// Helper function to convert ps log schedule policy from service response.
59+
/// </summary>
60+
public static LogSchedulePolicy GetPSLogSchedulePolicy(
61+
ServiceClientModel.LogSchedulePolicy serviceClientPolicy, string timeZone)
62+
{
63+
if (serviceClientPolicy == null)
64+
{
65+
return null;
66+
}
67+
68+
LogSchedulePolicy psPolicy = new LogSchedulePolicy();
69+
psPolicy.ScheduleFrequencyInMins = serviceClientPolicy.ScheduleFrequencyInMins;
70+
71+
// safe side validation
72+
psPolicy.Validate();
73+
74+
return psPolicy;
75+
}
76+
5777
#endregion
5878

5979
#region PStoServiceClientObject conversions
@@ -117,6 +137,19 @@ public static ServiceClientModel.SimpleSchedulePolicy GetServiceClientSimpleSche
117137
return serviceClientPolicy;
118138
}
119139

140+
public static ServiceClientModel.LogSchedulePolicy GetServiceClientLogSchedulePolicy(
141+
LogSchedulePolicy psPolicy)
142+
{
143+
if (psPolicy == null)
144+
{
145+
return null;
146+
}
147+
148+
ServiceClientModel.LogSchedulePolicy serviceClientPolicy = new ServiceClientModel.LogSchedulePolicy();
149+
serviceClientPolicy.ScheduleFrequencyInMins = psPolicy.ScheduleFrequencyInMins;
150+
return serviceClientPolicy;
151+
}
152+
120153
// <summary>
121154
/// Helper function to get nullable date time list from date time list.
122155
/// </summary>
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// ----------------------------------------------------------------------------------
2+
//
3+
// Copyright Microsoft Corporation
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
// ----------------------------------------------------------------------------------
14+
15+
using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
16+
using System.Collections.Generic;
17+
using ServiceClientModel = Microsoft.Azure.Management.RecoveryServices.Backup.Models;
18+
using CmdletModel = Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;
19+
20+
namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers
21+
{
22+
/// <summary>
23+
/// Backup policy conversion helper
24+
/// </summary>
25+
public partial class PolicyHelpers
26+
{
27+
public static List<ServiceClientModel.SubProtectionPolicy> GetServiceClientSubProtectionPolicy(
28+
SQLRetentionPolicy retentionPolicy,
29+
SQLSchedulePolicy schedulePolicy)
30+
{
31+
List<ServiceClientModel.SubProtectionPolicy> subProtectionPolicy =
32+
new List<ServiceClientModel.SubProtectionPolicy>();
33+
if (schedulePolicy.FullBackupSchedulePolicy != null &&
34+
retentionPolicy.FullBackupRetentionPolicy != null)
35+
{
36+
subProtectionPolicy.Add(new ServiceClientModel.SubProtectionPolicy("Full",
37+
GetServiceClientSimpleSchedulePolicy(schedulePolicy.FullBackupSchedulePolicy),
38+
GetServiceClientLongTermRetentionPolicy(retentionPolicy.FullBackupRetentionPolicy)));
39+
}
40+
if (schedulePolicy.DifferentialBackupSchedulePolicy != null &&
41+
retentionPolicy.DifferentialBackupRetentionPolicy != null &&
42+
schedulePolicy.IsDifferentialBackupEnabled)
43+
{
44+
subProtectionPolicy.Add(new ServiceClientModel.SubProtectionPolicy("Differential",
45+
GetServiceClientSimpleSchedulePolicy(schedulePolicy.DifferentialBackupSchedulePolicy),
46+
GetServiceClientSimpleRetentionPolicy(retentionPolicy.DifferentialBackupRetentionPolicy)));
47+
}
48+
if (schedulePolicy.LogBackupSchedulePolicy != null &&
49+
retentionPolicy.LogBackupRetentionPolicy != null &&
50+
schedulePolicy.IsLogBackupEnabled)
51+
{
52+
subProtectionPolicy.Add(new ServiceClientModel.SubProtectionPolicy("Log",
53+
GetServiceClientLogSchedulePolicy(schedulePolicy.LogBackupSchedulePolicy),
54+
GetServiceClientSimpleRetentionPolicy(retentionPolicy.LogBackupRetentionPolicy)));
55+
}
56+
return subProtectionPolicy;
57+
}
58+
59+
public static List<ServiceClientModel.SubProtectionPolicy> GetServiceClientSubProtectionPolicy(
60+
AzureVmWorkloadPolicy policy)
61+
{
62+
List<ServiceClientModel.SubProtectionPolicy> subProtectionPolicy =
63+
new List<ServiceClientModel.SubProtectionPolicy>();
64+
if (policy.FullBackupSchedulePolicy != null &&
65+
policy.FullBackupRetentionPolicy != null)
66+
{
67+
subProtectionPolicy.Add(new ServiceClientModel.SubProtectionPolicy("Full",
68+
GetServiceClientSimpleSchedulePolicy((SimpleSchedulePolicy)policy.FullBackupSchedulePolicy),
69+
GetServiceClientLongTermRetentionPolicy((LongTermRetentionPolicy)policy.FullBackupRetentionPolicy)));
70+
}
71+
if (policy.DifferentialBackupSchedulePolicy != null &&
72+
policy.DifferentialBackupRetentionPolicy != null &&
73+
policy.IsDifferentialBackupEnabled)
74+
{
75+
subProtectionPolicy.Add(new ServiceClientModel.SubProtectionPolicy("Differential",
76+
GetServiceClientSimpleSchedulePolicy((SimpleSchedulePolicy)policy.DifferentialBackupSchedulePolicy),
77+
GetServiceClientSimpleRetentionPolicy((SimpleRetentionPolicy)policy.DifferentialBackupRetentionPolicy)));
78+
}
79+
if (policy.LogBackupSchedulePolicy != null &&
80+
policy.LogBackupRetentionPolicy != null &&
81+
policy.IsLogBackupEnabled)
82+
{
83+
subProtectionPolicy.Add(new ServiceClientModel.SubProtectionPolicy("Log",
84+
GetServiceClientLogSchedulePolicy((LogSchedulePolicy)policy.LogBackupSchedulePolicy),
85+
GetServiceClientSimpleRetentionPolicy((SimpleRetentionPolicy)policy.LogBackupRetentionPolicy)));
86+
}
87+
return subProtectionPolicy;
88+
}
89+
}
90+
}

0 commit comments

Comments
 (0)