Skip to content

Commit 9fb02d3

Browse files
authored
Merge pull request Azure#11359 from MabOneSdk/users/sarath/modify-policy
Added support for retry policy update for failed items
2 parents 7699fdc + 477a972 commit 9fb02d3

File tree

8 files changed

+347
-142
lines changed

8 files changed

+347
-142
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ public enum PolicyParams
9494
RetentionPolicy,
9595
ProtectionPolicy,
9696
ResourceGroupName,
97-
ResourceName
97+
ResourceName,
98+
FixForInconsistentItems
9899
}
99100

100101
public enum ItemParams

src/RecoveryServices/RecoveryServices.Backup.Providers/Providers/AzureWorkloadPsBackupProvider.cs

Lines changed: 51 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,8 @@ private RestAzureNS.AzureOperationResponse<ProtectionPolicyResource> CreateorMod
483483
ProviderData.ContainsKey(PolicyParams.ProtectionPolicy) ?
484484
(PolicyBase)ProviderData[PolicyParams.ProtectionPolicy] :
485485
null;
486+
bool fixForInconsistentItems = ProviderData.ContainsKey(PolicyParams.FixForInconsistentItems) ?
487+
(bool)ProviderData[PolicyParams.FixForInconsistentItems] : false;
486488
ProtectionPolicyResource serviceClientRequest = new ProtectionPolicyResource();
487489

488490
if (policy != null)
@@ -494,44 +496,58 @@ private RestAzureNS.AzureOperationResponse<ProtectionPolicyResource> CreateorMod
494496
// RetentionPolicy and SchedulePolicy both should not be empty
495497
if (retentionPolicy == null && schedulePolicy == null)
496498
{
497-
throw new ArgumentException(Resources.BothRetentionAndSchedulePoliciesEmpty);
498-
}
499-
500-
// validate RetentionPolicy and SchedulePolicy
501-
if (schedulePolicy != null)
502-
{
503-
AzureWorkloadProviderHelper.ValidateSQLSchedulePolicy(schedulePolicy);
504-
AzureWorkloadProviderHelper.GetUpdatedSchedulePolicy(policy, (SQLSchedulePolicy)schedulePolicy);
505-
Logger.Instance.WriteDebug("Validation of Schedule policy is successful");
499+
if (fixForInconsistentItems == false)
500+
{
501+
throw new ArgumentException(Resources.BothRetentionAndSchedulePoliciesEmpty);
502+
}
503+
AzureVmWorkloadProtectionPolicy azureVmWorkloadModifyPolicy = new AzureVmWorkloadProtectionPolicy();
504+
azureVmWorkloadModifyPolicy.Settings = new Settings("UTC",
505+
((AzureVmWorkloadPolicy)policy).IsCompression,
506+
((AzureVmWorkloadPolicy)policy).IsCompression);
507+
azureVmWorkloadModifyPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(policy.WorkloadType.ToString());
508+
azureVmWorkloadModifyPolicy.SubProtectionPolicy = new List<SubProtectionPolicy>();
509+
azureVmWorkloadModifyPolicy.SubProtectionPolicy = PolicyHelpers.GetServiceClientSubProtectionPolicy((AzureVmWorkloadPolicy)policy);
510+
azureVmWorkloadModifyPolicy.MakePolicyConsistent = true;
511+
serviceClientRequest.Properties = azureVmWorkloadModifyPolicy;
506512
}
507-
if (retentionPolicy != null)
513+
else
508514
{
509-
AzureWorkloadProviderHelper.ValidateSQLRetentionPolicy(retentionPolicy);
510-
AzureWorkloadProviderHelper.GetUpdatedRetentionPolicy(policy, (SQLRetentionPolicy)retentionPolicy);
511-
Logger.Instance.WriteDebug("Validation of Retention policy is successful");
512-
}
513-
514-
// copy the backupSchedule time to retentionPolicy after converting to UTC
515-
AzureWorkloadProviderHelper.CopyScheduleTimeToRetentionTimes(
516-
(CmdletModel.LongTermRetentionPolicy)((AzureVmWorkloadPolicy)policy).FullBackupRetentionPolicy,
517-
(CmdletModel.SimpleSchedulePolicy)((AzureVmWorkloadPolicy)policy).FullBackupSchedulePolicy);
518-
Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful");
519-
520-
// Now validate both RetentionPolicy and SchedulePolicy matches or not
521-
PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy(
522-
(CmdletModel.LongTermRetentionPolicy)((AzureVmWorkloadPolicy)policy).FullBackupRetentionPolicy,
523-
(CmdletModel.SimpleSchedulePolicy)((AzureVmWorkloadPolicy)policy).FullBackupSchedulePolicy);
524-
Logger.Instance.WriteDebug("Validation of Retention policy with Schedule policy is successful");
515+
// validate RetentionPolicy and SchedulePolicy
516+
if (schedulePolicy != null)
517+
{
518+
AzureWorkloadProviderHelper.ValidateSQLSchedulePolicy(schedulePolicy);
519+
AzureWorkloadProviderHelper.GetUpdatedSchedulePolicy(policy, (SQLSchedulePolicy)schedulePolicy);
520+
Logger.Instance.WriteDebug("Validation of Schedule policy is successful");
521+
}
522+
if (retentionPolicy != null)
523+
{
524+
AzureWorkloadProviderHelper.ValidateSQLRetentionPolicy(retentionPolicy);
525+
AzureWorkloadProviderHelper.GetUpdatedRetentionPolicy(policy, (SQLRetentionPolicy)retentionPolicy);
526+
Logger.Instance.WriteDebug("Validation of Retention policy is successful");
527+
}
525528

526-
// construct Service Client policy request
527-
AzureVmWorkloadProtectionPolicy azureVmWorkloadProtectionPolicy = new AzureVmWorkloadProtectionPolicy();
528-
azureVmWorkloadProtectionPolicy.Settings = new Settings("UTC",
529-
((AzureVmWorkloadPolicy)policy).IsCompression,
530-
((AzureVmWorkloadPolicy)policy).IsCompression);
531-
azureVmWorkloadProtectionPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(policy.WorkloadType.ToString());
532-
azureVmWorkloadProtectionPolicy.SubProtectionPolicy = new List<SubProtectionPolicy>();
533-
azureVmWorkloadProtectionPolicy.SubProtectionPolicy = PolicyHelpers.GetServiceClientSubProtectionPolicy((AzureVmWorkloadPolicy)policy);
534-
serviceClientRequest.Properties = azureVmWorkloadProtectionPolicy;
529+
// copy the backupSchedule time to retentionPolicy after converting to UTC
530+
AzureWorkloadProviderHelper.CopyScheduleTimeToRetentionTimes(
531+
(CmdletModel.LongTermRetentionPolicy)((AzureVmWorkloadPolicy)policy).FullBackupRetentionPolicy,
532+
(CmdletModel.SimpleSchedulePolicy)((AzureVmWorkloadPolicy)policy).FullBackupSchedulePolicy);
533+
Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful");
534+
535+
// Now validate both RetentionPolicy and SchedulePolicy matches or not
536+
PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy(
537+
(CmdletModel.LongTermRetentionPolicy)((AzureVmWorkloadPolicy)policy).FullBackupRetentionPolicy,
538+
(CmdletModel.SimpleSchedulePolicy)((AzureVmWorkloadPolicy)policy).FullBackupSchedulePolicy);
539+
Logger.Instance.WriteDebug("Validation of Retention policy with Schedule policy is successful");
540+
541+
// construct Service Client policy request
542+
AzureVmWorkloadProtectionPolicy azureVmWorkloadProtectionPolicy = new AzureVmWorkloadProtectionPolicy();
543+
azureVmWorkloadProtectionPolicy.Settings = new Settings("UTC",
544+
((AzureVmWorkloadPolicy)policy).IsCompression,
545+
((AzureVmWorkloadPolicy)policy).IsCompression);
546+
azureVmWorkloadProtectionPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(policy.WorkloadType.ToString());
547+
azureVmWorkloadProtectionPolicy.SubProtectionPolicy = new List<SubProtectionPolicy>();
548+
azureVmWorkloadProtectionPolicy.SubProtectionPolicy = PolicyHelpers.GetServiceClientSubProtectionPolicy((AzureVmWorkloadPolicy)policy);
549+
serviceClientRequest.Properties = azureVmWorkloadProtectionPolicy;
550+
}
535551
}
536552
else
537553
{

src/RecoveryServices/RecoveryServices.Backup.Test/ScenarioTests/AzureWorkload/PolicyTests.ps1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ function Test-AzureVmWorkloadPolicy
7070
Assert-AreEqual $schedulePolicy.IsDifferentialBackupEnabled $true
7171
Assert-AreEqual $schedulePolicy.IsLogBackupEnabled $true
7272

73+
# Fix Policy Update for failed items
74+
Set-AzRecoveryServicesBackupProtectionPolicy `
75+
-VaultId $vault.ID `
76+
-FixForInconsistentItems `
77+
-Policy $policy
78+
7379
# Delete policy
7480
Remove-AzRecoveryServicesBackupProtectionPolicy `
7581
-VaultId $vault.ID `

0 commit comments

Comments
 (0)