/// <summary> /// Helper function to convert ps backup policy model for AzureSql from service response. /// </summary> public static PolicyBase GetPolicyModelForAzureSql(ServiceClientModel.ProtectionPolicyResource serviceClientResponse, PolicyBase policyModel) { ServiceClientModel.AzureSqlProtectionPolicy azureSqlPolicy = (ServiceClientModel.AzureSqlProtectionPolicy)serviceClientResponse.Properties; if (azureSqlPolicy.RetentionPolicy.GetType() != typeof(ServiceClientModel.SimpleRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + azureSqlPolicy.RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } policyModel = new AzureSqlPolicy(); AzureSqlPolicy sqlPolicyModel = policyModel as AzureSqlPolicy; sqlPolicyModel.WorkloadType = WorkloadType.AzureSQLDatabase; sqlPolicyModel.BackupManagementType = BackupManagementType.AzureSQL; ServiceClientModel.SimpleRetentionPolicy azureSqlRetentionPolicy = (ServiceClientModel.SimpleRetentionPolicy)azureSqlPolicy.RetentionPolicy; sqlPolicyModel.RetentionPolicy = PolicyHelpers.GetPSSimpleRetentionPolicy(azureSqlRetentionPolicy, null, "AzureSql"); return(policyModel); }
/// <summary> /// Helper function to convert ps backup policy model for AzureVM from service response. /// </summary> public static PolicyBase GetPolicyModelForAzureIaaSVM(ServiceClientModel.ProtectionPolicyResource serviceClientResponse, PolicyBase policyModel) { if (((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy.GetType() != typeof(ServiceClientModel.LongTermRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } if (((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy.GetType() != typeof(ServiceClientModel.SimpleSchedulePolicy)) { Logger.Instance.WriteDebug("Unknown SchedulePolicy object received: " + ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } policyModel = new AzureVmPolicy(); AzureVmPolicy iaasPolicyModel = policyModel as AzureVmPolicy; iaasPolicyModel.WorkloadType = WorkloadType.AzureVM; iaasPolicyModel.BackupManagementType = BackupManagementType.AzureVM; iaasPolicyModel.RetentionPolicy = PolicyHelpers.GetPSLongTermRetentionPolicy((ServiceClientModel.LongTermRetentionPolicy) ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy, ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).TimeZone); iaasPolicyModel.SchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicy((ServiceClientModel.SimpleSchedulePolicy) ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy, ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).TimeZone); return(policyModel); }
/// <summary> /// Helper function to convert ps backup policy list model from service response. /// </summary> public static List <PolicyBase> GetPolicyModelList( List <ServiceClientModel.ProtectionPolicyResource> serviceClientListResponse) { if (serviceClientListResponse == null && serviceClientListResponse.Count == 0) { Logger.Instance.WriteDebug("Received empty list of policies from service"); return(null); } List <PolicyBase> policyModels = new List <PolicyBase>(); PolicyBase policyModel = null; foreach (ServiceClientModel.ProtectionPolicyResource resource in serviceClientListResponse) { policyModel = GetPolicyModel(resource); if (policyModel != null) { policyModels.Add(policyModel); } } Logger.Instance.WriteDebug("Total policies in list: " + policyModels.Count); return(policyModels); }
private void ValidateAzureFilesModifyProtectionRequest(ItemBase itemBase, PolicyBase policy) { if (itemBase == null || itemBase.GetType() != typeof(AzureFileShareItem)) { throw new ArgumentException(string.Format(Resources.InvalidProtectionPolicyException, typeof(AzureFileShareItem).ToString())); } }
/// <summary> /// Helper function to convert ps backup policy model from service response. /// </summary> public static PolicyBase GetPolicyModel(ServiceClientModel.ProtectionPolicyResource serviceClientResponse) { PolicyBase policyModel = null; if (serviceClientResponse == null || serviceClientResponse.Properties == null) { Logger.Instance.WriteDebug("Policy Service Client response is Null/Empty"); throw new ArgumentException(Resources.EmptyServiceClientResponseException); } if (serviceClientResponse.Properties.GetType() == typeof(ServiceClientModel.AzureIaaSVMProtectionPolicy)) { if (((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy.GetType() != typeof(ServiceClientModel.LongTermRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } if (((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy.GetType() != typeof(ServiceClientModel.SimpleSchedulePolicy)) { Logger.Instance.WriteDebug("Unknown SchedulePolicy object received: " + ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } policyModel = new AzureVmPolicy(); AzureVmPolicy iaasPolicyModel = policyModel as AzureVmPolicy; iaasPolicyModel.WorkloadType = Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.WorkloadType.AzureVM; iaasPolicyModel.BackupManagementType = Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.BackupManagementType.AzureVM; iaasPolicyModel.RetentionPolicy = PolicyHelpers.GetPSLongTermRetentionPolicy((ServiceClientModel.LongTermRetentionPolicy) ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy); iaasPolicyModel.SchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicy((ServiceClientModel.SimpleSchedulePolicy) ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy); } else { // we will enter this case when service supports new workload and customer // still using old version of azure powershell. Trace warning message, ignore and return Logger.Instance.WriteDebug("Unknown Policy object received: " + serviceClientResponse.Properties.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } policyModel.Name = serviceClientResponse.Name; policyModel.Id = serviceClientResponse.Id; return(policyModel); }
public ICanvas UninstallEditPolicy(PolicyBase policy) { if (policy == null) { return(this); } policy.OnUninstall(this); _policies.Remove(policy); return(this); }
private void ValidateAzureVMProtectionPolicy(PolicyBase policy) { if (policy == null || policy.GetType() != typeof(AzureVmPolicy)) { throw new ArgumentException(string.Format(Resources.InvalidProtectionPolicyException, typeof(AzureVmPolicy).ToString())); } ValidateAzureVMWorkloadType(policy.WorkloadType); // call validation policy.Validate(); }
private void ValidateAzureVMModifyProtectionRequest(ItemBase itemBase, PolicyBase policy) { if (itemBase == null || itemBase.GetType() != typeof(AzureVmItem)) { throw new ArgumentException(string.Format(Resources.InvalidProtectionPolicyException, typeof(AzureVmItem).ToString())); } if (string.IsNullOrEmpty(((AzureVmItem)itemBase).VirtualMachineId)) { throw new ArgumentException(Resources.VirtualMachineIdIsEmptyOrNull); } }
private void ValidateAzureFilesModifyProtectionRequest(ItemBase itemBase, PolicyBase policy) { if (itemBase == null || itemBase.GetType() != typeof(AzureFileShareItem)) { throw new ArgumentException(string.Format(Resources.InvalidProtectionPolicyException, typeof(AzureFileShareItem).ToString())); } if (string.IsNullOrEmpty(((AzureFileShareItem)itemBase).ParentContainerFabricId)) { throw new ArgumentException(Resources.ParentContainerFabricIdIsEmptyOrNull); } }
public Figure InstallEditPolicy(PolicyBase policyBase) { if (policyBase is SelectionFeedbackPolicy) { var installedPolicy = _policies.OfType <SelectionFeedbackPolicy>().FirstOrDefault(); installedPolicy?.OnUninstall(this); } policyBase.OnInstall(this); _policies.Add(policyBase); return(this); }
private void ValidateAzureVMEnableProtectionRequest(string vmName, string serviceName, string rgName, PolicyBase policy) { if (string.IsNullOrEmpty(vmName)) { throw new ArgumentException(string.Format(Resources.InvalidAzureVMName)); } if (string.IsNullOrEmpty(rgName) && string.IsNullOrEmpty(serviceName)) { throw new ArgumentException( string.Format(Resources.BothCloudServiceNameAndResourceGroupNameShouldNotEmpty) ); } }
/// <summary> /// Helper function to convert ps backup policy model for AzureVM from service response. /// </summary> public static PolicyBase GetPolicyModelForAzureIaaSVM(ServiceClientModel.ProtectionPolicyResource serviceClientResponse, PolicyBase policyModel) { string backupManagementType = Management.RecoveryServices.Backup.Models.BackupManagementType.AzureIaasVM; if (((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy.GetType() != typeof(ServiceClientModel.LongTermRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } if (((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy.GetType() != typeof(ServiceClientModel.SimpleSchedulePolicy)) { Logger.Instance.WriteDebug("Unknown SchedulePolicy object received: " + ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } policyModel = new AzureVmPolicy(); AzureVmPolicy iaasPolicyModel = policyModel as AzureVmPolicy; iaasPolicyModel.WorkloadType = WorkloadType.AzureVM; iaasPolicyModel.BackupManagementType = BackupManagementType.AzureVM; iaasPolicyModel.SnapshotRetentionInDays = ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse. Properties).InstantRpRetentionRangeInDays; iaasPolicyModel.ProtectedItemsCount = ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse. Properties).ProtectedItemsCount; iaasPolicyModel.RetentionPolicy = PolicyHelpers.GetPSLongTermRetentionPolicy((ServiceClientModel.LongTermRetentionPolicy) ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy, ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).TimeZone, backupManagementType); iaasPolicyModel.SchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicy((ServiceClientModel.SimpleSchedulePolicy) ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy, ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).TimeZone); iaasPolicyModel.AzureBackupRGName = ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).InstantRPDetails.AzureBackupRGNamePrefix; iaasPolicyModel.AzureBackupRGNameSuffix = ((ServiceClientModel.AzureIaaSVMProtectionPolicy)serviceClientResponse.Properties).InstantRPDetails.AzureBackupRGNameSuffix; return(policyModel); }
/// <summary> /// Helper function to convert ps backup policy model from service response. /// </summary> public static PolicyBase GetPolicyModel(ServiceClientModel.ProtectionPolicyResource serviceClientResponse) { PolicyBase policyModel = null; if (serviceClientResponse == null || serviceClientResponse.Properties == null) { Logger.Instance.WriteDebug("Policy Service Client response is Null/Empty"); throw new ArgumentException(Resources.EmptyServiceClientResponseException); } if (serviceClientResponse.Properties.GetType() == typeof(ServiceClientModel.AzureIaaSVMProtectionPolicy)) { policyModel = GetPolicyModelForAzureIaaSVM(serviceClientResponse, policyModel); } else if (serviceClientResponse.Properties.GetType() == typeof(ServiceClientModel.AzureSqlProtectionPolicy)) { policyModel = GetPolicyModelForAzureSql(serviceClientResponse, policyModel); } else if (serviceClientResponse.Properties.GetType() == typeof(ServiceClientModel.AzureFileShareProtectionPolicy)) { policyModel = GetPolicyModelForAzureFileShare(serviceClientResponse, policyModel); } else if (serviceClientResponse.Properties.GetType() == typeof(ServiceClientModel.AzureVmWorkloadProtectionPolicy)) { policyModel = GetPolicyModelForAzureVmWorkload(serviceClientResponse, policyModel); } else { // we will enter this case when service supports new workload and customer // still using old version of azure powershell. Trace warning message, ignore and return Logger.Instance.WriteDebug("Unknown Policy object received: " + serviceClientResponse.Properties.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } policyModel.Name = serviceClientResponse.Name; policyModel.Id = serviceClientResponse.Id; return(policyModel); }
/// <summary> /// Helper function to convert ps backup policy model for Azure FileShare from service response. /// </summary> public static PolicyBase GetPolicyModelForAzureFileShare(ServiceClientModel.ProtectionPolicyResource serviceClientResponse, PolicyBase policyModel) { string backupManagementType = Management.RecoveryServices.Backup.Models.BackupManagementType.AzureStorage; ServiceClientModel.AzureFileShareProtectionPolicy azureFileSharePolicy = (ServiceClientModel.AzureFileShareProtectionPolicy)serviceClientResponse.Properties; if (azureFileSharePolicy.RetentionPolicy.GetType() != typeof(ServiceClientModel.LongTermRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + azureFileSharePolicy.RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } if (azureFileSharePolicy.SchedulePolicy.GetType() != typeof(ServiceClientModel.SimpleSchedulePolicy)) { Logger.Instance.WriteDebug("Unknown SchedulePolicy object received: " + azureFileSharePolicy.SchedulePolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } policyModel = new AzureFileSharePolicy(); AzureFileSharePolicy fileSharePolicyModel = policyModel as AzureFileSharePolicy; fileSharePolicyModel.WorkloadType = WorkloadType.AzureFiles; fileSharePolicyModel.BackupManagementType = BackupManagementType.AzureStorage; fileSharePolicyModel.RetentionPolicy = PolicyHelpers.GetPSLongTermRetentionPolicy((ServiceClientModel.LongTermRetentionPolicy)((ServiceClientModel.AzureFileShareProtectionPolicy)serviceClientResponse.Properties).RetentionPolicy, ((ServiceClientModel.AzureFileShareProtectionPolicy)serviceClientResponse.Properties).TimeZone, backupManagementType); fileSharePolicyModel.SchedulePolicy = PolicyHelpers.GetPSSimpleSchedulePolicy((ServiceClientModel.SimpleSchedulePolicy) ((ServiceClientModel.AzureFileShareProtectionPolicy)serviceClientResponse.Properties).SchedulePolicy, ((ServiceClientModel.AzureFileShareProtectionPolicy)serviceClientResponse.Properties).TimeZone); fileSharePolicyModel.ProtectedItemsCount = ((ServiceClientModel.AzureFileShareProtectionPolicy)serviceClientResponse. Properties).ProtectedItemsCount; return(policyModel); }
/// <summary> /// Modifies policy using the provider data /// </summary> /// <returns>Modified policy object as returned by the service</returns> public RestAzureNS.AzureOperationResponse <ProtectionPolicyResource> ModifyPolicy() { string vaultName = (string)ProviderData[VaultParams.VaultName]; string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; RetentionPolicyBase retentionPolicy = ProviderData.ContainsKey(PolicyParams.RetentionPolicy) ? (RetentionPolicyBase)ProviderData[PolicyParams.RetentionPolicy] : null; PolicyBase policy = ProviderData.ContainsKey(PolicyParams.ProtectionPolicy) ? (PolicyBase)ProviderData[PolicyParams.ProtectionPolicy] : null; // RetentionPolicy if (retentionPolicy == null) { throw new ArgumentException(Resources.RetentionPolicyEmptyInAzureSql); } else { ValidateAzureSqlRetentionPolicy(retentionPolicy); ((AzureSqlPolicy)policy).RetentionPolicy = retentionPolicy; Logger.Instance.WriteDebug("Validation of Retention policy is successful"); } CmdletModel.SimpleRetentionPolicy sqlRetentionPolicy = (CmdletModel.SimpleRetentionPolicy)((AzureSqlPolicy)policy).RetentionPolicy; ProtectionPolicyResource protectionPolicyResource = new ProtectionPolicyResource() { Properties = new AzureSqlProtectionPolicy() { RetentionPolicy = PolicyHelpers.GetServiceClientSimpleRetentionPolicy(sqlRetentionPolicy) } }; return(ServiceClientAdapter.CreateOrUpdateProtectionPolicy( policy.Name, protectionPolicyResource, vaultName: vaultName, resourceGroupName: resourceGroupName)); }
/// <summary> /// Modifies policy using the provider data /// </summary> /// <returns>Modified policy object as returned by the service</returns> public ProtectionPolicyResponse ModifyPolicy() { RetentionPolicyBase retentionPolicy = ProviderData.ContainsKey(PolicyParams.RetentionPolicy) ? (RetentionPolicyBase)ProviderData[PolicyParams.RetentionPolicy] : null; PolicyBase policy = ProviderData.ContainsKey(PolicyParams.ProtectionPolicy) ? (PolicyBase)ProviderData[PolicyParams.ProtectionPolicy] : null; // RetentionPolicy if (retentionPolicy == null) { throw new ArgumentException(Resources.RetentionPolicyEmptyInAzureSql); } else { ValidateAzureSqlRetentionPolicy(retentionPolicy); ((AzureSqlPolicy)policy).RetentionPolicy = retentionPolicy; Logger.Instance.WriteDebug("Validation of Retention policy is successful"); } CmdletModel.SimpleRetentionPolicy sqlRetentionPolicy = (CmdletModel.SimpleRetentionPolicy)((AzureSqlPolicy)policy).RetentionPolicy; ProtectionPolicyRequest hydraRequest = new ProtectionPolicyRequest() { Item = new ProtectionPolicyResource() { Properties = new AzureSqlProtectionPolicy() { RetentionPolicy = PolicyHelpers.GetServiceClientSimpleRetentionPolicy(sqlRetentionPolicy) } } }; return(ServiceClientAdapter.CreateOrUpdateProtectionPolicy(policy.Name, hydraRequest)); }
public ICanvas InstallEditPolicy(PolicyBase policy) { //If selection policy changes, unselect all figures first. if (policy is SelectionPolicy) { foreach (var figure in Selection.All) { figure.Unselect(); } //Remove old SelectionPolicy. There can be only one. _policies.Remove(policy); } //Todo: Zoom policy etc. //Install the given policy policy.OnInstall(this); _policies.Add(policy); return(this); }
/// <summary> /// Modifies policy using the provider data /// </summary> /// <returns>Modified policy object as returned by the service</returns> public ProtectionPolicyResponse ModifyPolicy() { RetentionPolicyBase retentionPolicy = ProviderData.ContainsKey(PolicyParams.RetentionPolicy) ? (RetentionPolicyBase)ProviderData[PolicyParams.RetentionPolicy] : null; SchedulePolicyBase schedulePolicy = ProviderData.ContainsKey(PolicyParams.SchedulePolicy) ? (SchedulePolicyBase)ProviderData[PolicyParams.SchedulePolicy] : null; PolicyBase policy = ProviderData.ContainsKey(PolicyParams.ProtectionPolicy) ? (PolicyBase)ProviderData[PolicyParams.ProtectionPolicy] : null; // do validations ValidateAzureVMProtectionPolicy(policy); Logger.Instance.WriteDebug("Validation of Protection Policy is successful"); // RetentionPolicy and SchedulePolicy both should not be empty if (retentionPolicy == null && schedulePolicy == null) { throw new ArgumentException(Resources.BothRetentionAndSchedulePoliciesEmpty); } // validate RetentionPolicy and SchedulePolicy if (schedulePolicy != null) { ValidateAzureVMSchedulePolicy(schedulePolicy); ((AzureVmPolicy)policy).SchedulePolicy = schedulePolicy; Logger.Instance.WriteDebug("Validation of Schedule policy is successful"); } if (retentionPolicy != null) { ValidateAzureVMRetentionPolicy(retentionPolicy); ((AzureVmPolicy)policy).RetentionPolicy = retentionPolicy; Logger.Instance.WriteDebug("Validation of Retention policy is successful"); } // copy the backupSchedule time to retentionPolicy after converting to UTC CopyScheduleTimeToRetentionTimes( (CmdletModel.LongTermRetentionPolicy)((AzureVmPolicy)policy).RetentionPolicy, (CmdletModel.SimpleSchedulePolicy)((AzureVmPolicy)policy).SchedulePolicy); Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful"); // Now validate both RetentionPolicy and SchedulePolicy matches or not PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)((AzureVmPolicy)policy).RetentionPolicy, (CmdletModel.SimpleSchedulePolicy)((AzureVmPolicy)policy).SchedulePolicy); Logger.Instance.WriteDebug("Validation of Retention policy with Schedule policy is successful"); // construct Service Client policy request ProtectionPolicyRequest serviceClientRequest = new ProtectionPolicyRequest() { Item = new ProtectionPolicyResource() { Properties = new AzureIaaSVMProtectionPolicy() { RetentionPolicy = PolicyHelpers.GetServiceClientLongTermRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)((AzureVmPolicy)policy).RetentionPolicy), SchedulePolicy = PolicyHelpers.GetServiceClientSimpleSchedulePolicy( (CmdletModel.SimpleSchedulePolicy)((AzureVmPolicy)policy).SchedulePolicy) } } }; return(ServiceClientAdapter.CreateOrUpdateProtectionPolicy(policy.Name, serviceClientRequest)); }
private RestAzureNS.AzureOperationResponse <ProtectionPolicyResource> CreateorModifyPolicy() { string vaultName = (string)ProviderData[VaultParams.VaultName]; string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; string policyName = ProviderData.ContainsKey(PolicyParams.PolicyName) ? (string)ProviderData[PolicyParams.PolicyName] : null; RetentionPolicyBase retentionPolicy = ProviderData.ContainsKey(PolicyParams.RetentionPolicy) ? (RetentionPolicyBase)ProviderData[PolicyParams.RetentionPolicy] : null; SchedulePolicyBase schedulePolicy = ProviderData.ContainsKey(PolicyParams.SchedulePolicy) ? (SchedulePolicyBase)ProviderData[PolicyParams.SchedulePolicy] : null; PolicyBase policy = ProviderData.ContainsKey(PolicyParams.ProtectionPolicy) ? (PolicyBase)ProviderData[PolicyParams.ProtectionPolicy] : null; ProtectionPolicyResource serviceClientRequest = new ProtectionPolicyResource(); if (policy != null) { // do validations ValidateAzureFileProtectionPolicy(policy); Logger.Instance.WriteDebug("Validation of Protection Policy is successful"); // RetentionPolicy and SchedulePolicy both should not be empty if (retentionPolicy == null && schedulePolicy == null) { throw new ArgumentException(Resources.BothRetentionAndSchedulePoliciesEmpty); } // validate RetentionPolicy and SchedulePolicy if (schedulePolicy != null) { AzureWorkloadProviderHelper.ValidateSimpleSchedulePolicy(schedulePolicy); ((AzureFileSharePolicy)policy).SchedulePolicy = schedulePolicy; Logger.Instance.WriteDebug("Validation of Schedule policy is successful"); } if (retentionPolicy != null) { AzureWorkloadProviderHelper.ValidateLongTermRetentionPolicy(retentionPolicy); ((AzureFileSharePolicy)policy).RetentionPolicy = retentionPolicy; Logger.Instance.WriteDebug("Validation of Retention policy is successful"); } // copy the backupSchedule time to retentionPolicy after converting to UTC AzureWorkloadProviderHelper.CopyScheduleTimeToRetentionTimes( (CmdletModel.LongTermRetentionPolicy)((AzureFileSharePolicy)policy).RetentionPolicy, (CmdletModel.SimpleSchedulePolicy)((AzureFileSharePolicy)policy).SchedulePolicy); Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful"); // Now validate both RetentionPolicy and SchedulePolicy matches or not PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)((AzureFileSharePolicy)policy).RetentionPolicy, (CmdletModel.SimpleSchedulePolicy)((AzureFileSharePolicy)policy).SchedulePolicy); Logger.Instance.WriteDebug("Validation of Retention policy with Schedule policy is successful"); // construct Service Client policy request AzureFileShareProtectionPolicy azureFileShareProtectionPolicy = new AzureFileShareProtectionPolicy(); azureFileShareProtectionPolicy.RetentionPolicy = PolicyHelpers.GetServiceClientLongTermRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)((AzureFileSharePolicy)policy).RetentionPolicy); azureFileShareProtectionPolicy.SchedulePolicy = PolicyHelpers.GetServiceClientSimpleSchedulePolicy( (CmdletModel.SimpleSchedulePolicy)((AzureFileSharePolicy)policy).SchedulePolicy); azureFileShareProtectionPolicy.TimeZone = DateTimeKind.Utc.ToString().ToUpper(); azureFileShareProtectionPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(policy.WorkloadType.ToString()); serviceClientRequest.Properties = azureFileShareProtectionPolicy; } else { CmdletModel.WorkloadType workloadType = (CmdletModel.WorkloadType)ProviderData[PolicyParams.WorkloadType]; // do validations ValidateAzureFilesWorkloadType(workloadType); AzureWorkloadProviderHelper.ValidateSimpleSchedulePolicy(schedulePolicy); Logger.Instance.WriteDebug("Validation of Schedule policy is successful"); // validate RetentionPolicy AzureWorkloadProviderHelper.ValidateLongTermRetentionPolicy(retentionPolicy); Logger.Instance.WriteDebug("Validation of Retention policy is successful"); // update the retention times from backupSchedule to retentionPolicy after converting to UTC AzureWorkloadProviderHelper.CopyScheduleTimeToRetentionTimes((CmdletModel.LongTermRetentionPolicy)retentionPolicy, (CmdletModel.SimpleSchedulePolicy)schedulePolicy); Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful"); // Now validate both RetentionPolicy and SchedulePolicy together PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)retentionPolicy, (CmdletModel.SimpleSchedulePolicy)schedulePolicy); Logger.Instance.WriteDebug("Validation of Retention policy with Schedule policy is successful"); // construct Service Client policy request AzureFileShareProtectionPolicy azureFileShareProtectionPolicy = new AzureFileShareProtectionPolicy(); azureFileShareProtectionPolicy.RetentionPolicy = PolicyHelpers.GetServiceClientLongTermRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)retentionPolicy); azureFileShareProtectionPolicy.RetentionPolicy = PolicyHelpers.GetServiceClientLongTermRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)retentionPolicy); azureFileShareProtectionPolicy.SchedulePolicy = PolicyHelpers.GetServiceClientSimpleSchedulePolicy( (CmdletModel.SimpleSchedulePolicy)schedulePolicy); azureFileShareProtectionPolicy.TimeZone = DateTimeKind.Utc.ToString().ToUpper(); azureFileShareProtectionPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(workloadType.ToString()); serviceClientRequest.Properties = azureFileShareProtectionPolicy; } return(ServiceClientAdapter.CreateOrUpdateProtectionPolicy( policyName = policyName ?? policy.Name, serviceClientRequest, vaultName: vaultName, resourceGroupName: resourceGroupName)); }
public static PolicyBase GetPolicyModelForAzureVmWorkload(ServiceClientModel.ProtectionPolicyResource serviceClientResponse, PolicyBase policyModel) { ServiceClientModel.AzureVmWorkloadProtectionPolicy azureVmWorkloadPolicy = (ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties; foreach (var policy in azureVmWorkloadPolicy.SubProtectionPolicy) { if (string.Compare(policy.PolicyType, "Full") == 0) { if (policy.SchedulePolicy.GetType() != typeof(ServiceClientModel.SimpleSchedulePolicy)) { Logger.Instance.WriteDebug("Unknown Schedule object received: " + policy.SchedulePolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } if (policy.RetentionPolicy.GetType() != typeof(ServiceClientModel.LongTermRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + policy.RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } } else if (string.Compare(policy.PolicyType, "Differential") == 0) { if (policy.SchedulePolicy.GetType() != typeof(ServiceClientModel.SimpleSchedulePolicy)) { Logger.Instance.WriteDebug("Unknown Schedule object received: " + policy.SchedulePolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } if (policy.RetentionPolicy.GetType() != typeof(ServiceClientModel.SimpleRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + policy.RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } } else if (string.Compare(policy.PolicyType, "Log") == 0) { if (policy.SchedulePolicy.GetType() != typeof(ServiceClientModel.LogSchedulePolicy)) { Logger.Instance.WriteDebug("Unknown Schedule object received: " + policy.SchedulePolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } if (policy.RetentionPolicy.GetType() != typeof(ServiceClientModel.SimpleRetentionPolicy)) { Logger.Instance.WriteDebug("Unknown RetentionPolicy object received: " + policy.RetentionPolicy.GetType()); Logger.Instance.WriteWarning(Resources.UpdateToNewAzurePowershellWarning); return(null); } } } policyModel = new AzureVmWorkloadPolicy(); AzureVmWorkloadPolicy azureVmWorkloadPolicyModel = policyModel as AzureVmWorkloadPolicy; azureVmWorkloadPolicyModel.WorkloadType = WorkloadType.MSSQL; azureVmWorkloadPolicyModel.BackupManagementType = BackupManagementType.AzureWorkload; azureVmWorkloadPolicyModel.IsCompression = ((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.IsCompression; azureVmWorkloadPolicyModel.IsDifferentialBackupEnabled = false; azureVmWorkloadPolicyModel.IsLogBackupEnabled = false; GetPSSubProtectionPolicy(azureVmWorkloadPolicyModel, serviceClientResponse, ((ServiceClientModel.AzureVmWorkloadProtectionPolicy)serviceClientResponse.Properties).Settings.TimeZone); return(policyModel); }
private RestAzureNS.AzureOperationResponse <ProtectedItemResource> EnableOrModifyProtection(bool disableWithRetentionData = false) { string vaultName = (string)ProviderData[VaultParams.VaultName]; string vaultResourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; string azureFileShareName = ProviderData.ContainsKey(ItemParams.ItemName) ? (string)ProviderData[ItemParams.ItemName] : null; string storageAccountName = ProviderData.ContainsKey(ItemParams.StorageAccountName) ? (string)ProviderData[ItemParams.StorageAccountName] : null; string parameterSetName = ProviderData.ContainsKey(ItemParams.ParameterSetName) ? (string)ProviderData[ItemParams.ParameterSetName] : null; PolicyBase policy = ProviderData.ContainsKey(ItemParams.Policy) ? (PolicyBase)ProviderData[ItemParams.Policy] : null; ItemBase itemBase = (ItemBase)ProviderData[ItemParams.Item]; AzureFileShareItem item = (AzureFileShareItem)ProviderData[ItemParams.Item]; string containerUri = ""; string protectedItemUri = ""; string sourceResourceId = null; AzureFileshareProtectedItem properties = new AzureFileshareProtectedItem(); if (itemBase == null) { //Enable protection ValidateAzureFilesWorkloadType(policy.WorkloadType); ValidateFileShareEnableProtectionRequest( azureFileShareName, storageAccountName); WorkloadProtectableItemResource protectableObjectResource = GetAzureFileShareProtectableObject( azureFileShareName, storageAccountName, vaultName: vaultName, vaultResourceGroupName: vaultResourceGroupName); Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(protectableObjectResource.Id); containerUri = HelperUtils.GetContainerUri( keyValueDict, protectableObjectResource.Id); protectedItemUri = HelperUtils.GetProtectableItemUri( keyValueDict, protectableObjectResource.Id); AzureFileShareProtectableItem azureFileShareProtectableItem = (AzureFileShareProtectableItem)protectableObjectResource.Properties; if (azureFileShareProtectableItem != null) { sourceResourceId = azureFileShareProtectableItem.ParentContainerFabricId; } // construct Service Client protectedItem request properties.PolicyId = policy.Id; properties.SourceResourceId = sourceResourceId; } else if (itemBase != null && !disableWithRetentionData) { //modify policy with new policy ValidateAzureFilesWorkloadType(item.WorkloadType, policy.WorkloadType); ValidateAzureFilesModifyProtectionRequest(itemBase, policy); Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(item.Id); containerUri = HelperUtils.GetContainerUri(keyValueDict, item.Id); protectedItemUri = HelperUtils.GetProtectedItemUri(keyValueDict, item.Id); sourceResourceId = item.SourceResourceId; // construct Service Client protectedItem request properties.PolicyId = policy.Id; properties.SourceResourceId = sourceResourceId; } else if (disableWithRetentionData) { //Disable protection while retaining backup data ValidateAzureFileShareDisableProtectionRequest(itemBase); Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(item.Id); containerUri = HelperUtils.GetContainerUri(keyValueDict, item.Id); protectedItemUri = HelperUtils.GetProtectedItemUri(keyValueDict, item.Id); properties.PolicyId = string.Empty; properties.ProtectionState = ProtectionState.ProtectionStopped; properties.SourceResourceId = item.SourceResourceId; } ProtectedItemResource serviceClientRequest = new ProtectedItemResource() { Properties = properties }; return(ServiceClientAdapter.CreateOrUpdateProtectedItem( containerUri, protectedItemUri, serviceClientRequest, vaultName: vaultName, resourceGroupName: vaultResourceGroupName)); }
public List <ItemBase> ListProtectedItems() { string vaultName = (string)ProviderData[VaultParams.VaultName]; string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; ContainerBase container = (ContainerBase)ProviderData[ItemParams.Container]; string itemName = (string)ProviderData[ItemParams.ItemName]; ItemProtectionStatus protectionStatus = (ItemProtectionStatus)ProviderData[ItemParams.ProtectionStatus]; ItemProtectionState status = (ItemProtectionState)ProviderData[ItemParams.ProtectionState]; CmdletModel.WorkloadType workloadType = (CmdletModel.WorkloadType)ProviderData[ItemParams.WorkloadType]; PolicyBase policy = (PolicyBase)ProviderData[PolicyParams.ProtectionPolicy]; // 1. Filter by container List <ProtectedItemResource> protectedItems = AzureWorkloadProviderHelper.ListProtectedItemsByContainer( vaultName, resourceGroupName, container, policy, ServiceClientModel.BackupManagementType.AzureWorkload, DataSourceType.SQLDataBase); List <ProtectedItemResource> protectedItemGetResponses = new List <ProtectedItemResource>(); // 2. Filter by item name List <ItemBase> itemModels = AzureWorkloadProviderHelper.ListProtectedItemsByItemName( protectedItems, itemName, vaultName, resourceGroupName, (itemModel, protectedItemGetResponse) => { AzureWorkloadSQLDatabaseProtectedItemExtendedInfo extendedInfo = new AzureWorkloadSQLDatabaseProtectedItemExtendedInfo(); var serviceClientExtendedInfo = ((AzureVmWorkloadSQLDatabaseProtectedItem)protectedItemGetResponse.Properties).ExtendedInfo; if (serviceClientExtendedInfo.OldestRecoveryPoint.HasValue) { extendedInfo.OldestRecoveryPoint = serviceClientExtendedInfo.OldestRecoveryPoint; } extendedInfo.PolicyState = serviceClientExtendedInfo.PolicyState.ToString(); extendedInfo.RecoveryPointCount = (int)(serviceClientExtendedInfo.RecoveryPointCount.HasValue ? serviceClientExtendedInfo.RecoveryPointCount : 0); ((AzureWorkloadSQLDatabaseProtectedItem)itemModel).LatestRecoveryPoint = ((AzureVmWorkloadSQLDatabaseProtectedItem)protectedItemGetResponse.Properties).LastRecoveryPoint; ((AzureWorkloadSQLDatabaseProtectedItem)itemModel).ExtendedInfo = extendedInfo; }); // 3. Filter by item's Protection Status if (protectionStatus != 0) { itemModels = itemModels.Where(itemModel => { return(((AzureWorkloadSQLDatabaseProtectedItem)itemModel).ProtectionStatus == protectionStatus); }).ToList(); } // 4. Filter by item's Protection State if (status != 0) { itemModels = itemModels.Where(itemModel => { return(((AzureWorkloadSQLDatabaseProtectedItem)itemModel).ProtectionState == status); }).ToList(); } // 5. Filter by workload type if (workloadType != 0) { itemModels = itemModels.Where(itemModel => { return(itemModel.WorkloadType == workloadType); }).ToList(); } return(itemModels); }
private RestAzureNS.AzureOperationResponse <ProtectionPolicyResource> CreateorModifyPolicy() { string vaultName = (string)ProviderData[VaultParams.VaultName]; string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; string policyName = ProviderData.ContainsKey(PolicyParams.PolicyName) ? (string)ProviderData[PolicyParams.PolicyName] : null; RetentionPolicyBase retentionPolicy = ProviderData.ContainsKey(PolicyParams.RetentionPolicy) ? (RetentionPolicyBase)ProviderData[PolicyParams.RetentionPolicy] : null; SchedulePolicyBase schedulePolicy = ProviderData.ContainsKey(PolicyParams.SchedulePolicy) ? (SchedulePolicyBase)ProviderData[PolicyParams.SchedulePolicy] : null; PolicyBase policy = ProviderData.ContainsKey(PolicyParams.ProtectionPolicy) ? (PolicyBase)ProviderData[PolicyParams.ProtectionPolicy] : null; bool fixForInconsistentItems = ProviderData.ContainsKey(PolicyParams.FixForInconsistentItems) ? (bool)ProviderData[PolicyParams.FixForInconsistentItems] : false; ProtectionPolicyResource serviceClientRequest = new ProtectionPolicyResource(); if (policy != null) { // do validations ValidateAzureWorkloadProtectionPolicy(policy); Logger.Instance.WriteDebug("Validation of Protection Policy is successful"); // RetentionPolicy and SchedulePolicy both should not be empty if (retentionPolicy == null && schedulePolicy == null) { if (fixForInconsistentItems == false) { throw new ArgumentException(Resources.BothRetentionAndSchedulePoliciesEmpty); } AzureVmWorkloadProtectionPolicy azureVmWorkloadModifyPolicy = new AzureVmWorkloadProtectionPolicy(); azureVmWorkloadModifyPolicy.Settings = new Settings("UTC", ((AzureVmWorkloadPolicy)policy).IsCompression, ((AzureVmWorkloadPolicy)policy).IsCompression); azureVmWorkloadModifyPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(policy.WorkloadType.ToString()); azureVmWorkloadModifyPolicy.SubProtectionPolicy = new List <SubProtectionPolicy>(); azureVmWorkloadModifyPolicy.SubProtectionPolicy = PolicyHelpers.GetServiceClientSubProtectionPolicy((AzureVmWorkloadPolicy)policy); azureVmWorkloadModifyPolicy.MakePolicyConsistent = true; serviceClientRequest.Properties = azureVmWorkloadModifyPolicy; } else { // validate RetentionPolicy and SchedulePolicy if (schedulePolicy != null) { AzureWorkloadProviderHelper.ValidateSQLSchedulePolicy(schedulePolicy); AzureWorkloadProviderHelper.GetUpdatedSchedulePolicy(policy, (SQLSchedulePolicy)schedulePolicy); Logger.Instance.WriteDebug("Validation of Schedule policy is successful"); } if (retentionPolicy != null) { AzureWorkloadProviderHelper.ValidateSQLRetentionPolicy(retentionPolicy); AzureWorkloadProviderHelper.GetUpdatedRetentionPolicy(policy, (SQLRetentionPolicy)retentionPolicy); Logger.Instance.WriteDebug("Validation of Retention policy is successful"); } // copy the backupSchedule time to retentionPolicy after converting to UTC AzureWorkloadProviderHelper.CopyScheduleTimeToRetentionTimes( (CmdletModel.LongTermRetentionPolicy)((AzureVmWorkloadPolicy)policy).FullBackupRetentionPolicy, (CmdletModel.SimpleSchedulePolicy)((AzureVmWorkloadPolicy)policy).FullBackupSchedulePolicy); Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful"); // Now validate both RetentionPolicy and SchedulePolicy matches or not PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy( (CmdletModel.LongTermRetentionPolicy)((AzureVmWorkloadPolicy)policy).FullBackupRetentionPolicy, (CmdletModel.SimpleSchedulePolicy)((AzureVmWorkloadPolicy)policy).FullBackupSchedulePolicy); Logger.Instance.WriteDebug("Validation of Retention policy with Schedule policy is successful"); // construct Service Client policy request AzureVmWorkloadProtectionPolicy azureVmWorkloadProtectionPolicy = new AzureVmWorkloadProtectionPolicy(); azureVmWorkloadProtectionPolicy.Settings = new Settings("UTC", ((AzureVmWorkloadPolicy)policy).IsCompression, ((AzureVmWorkloadPolicy)policy).IsCompression); azureVmWorkloadProtectionPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(policy.WorkloadType.ToString()); azureVmWorkloadProtectionPolicy.SubProtectionPolicy = new List <SubProtectionPolicy>(); azureVmWorkloadProtectionPolicy.SubProtectionPolicy = PolicyHelpers.GetServiceClientSubProtectionPolicy((AzureVmWorkloadPolicy)policy); serviceClientRequest.Properties = azureVmWorkloadProtectionPolicy; } } else { CmdletModel.WorkloadType workloadType = (CmdletModel.WorkloadType)ProviderData[PolicyParams.WorkloadType]; // do validations ValidateAzureWorkloadWorkloadType(workloadType); AzureWorkloadProviderHelper.ValidateSQLSchedulePolicy(schedulePolicy); Logger.Instance.WriteDebug("Validation of Schedule policy is successful"); // validate RetentionPolicy AzureWorkloadProviderHelper.ValidateSQLRetentionPolicy(retentionPolicy); Logger.Instance.WriteDebug("Validation of Retention policy is successful"); // update the retention times from backupSchedule to retentionPolicy after converting to UTC AzureWorkloadProviderHelper.CopyScheduleTimeToRetentionTimes(((SQLRetentionPolicy)retentionPolicy).FullBackupRetentionPolicy, ((SQLSchedulePolicy)schedulePolicy).FullBackupSchedulePolicy); Logger.Instance.WriteDebug("Copy of RetentionTime from with SchedulePolicy to RetentionPolicy is successful"); // Now validate both RetentionPolicy and SchedulePolicy together PolicyHelpers.ValidateLongTermRetentionPolicyWithSimpleRetentionPolicy( (SQLRetentionPolicy)retentionPolicy, (SQLSchedulePolicy)schedulePolicy); Logger.Instance.WriteDebug("Validation of Retention policy with Schedule policy is successful"); // construct Service Client policy request AzureVmWorkloadProtectionPolicy azureVmWorkloadProtectionPolicy = new AzureVmWorkloadProtectionPolicy(); azureVmWorkloadProtectionPolicy.Settings = new Settings("UTC", ((SQLSchedulePolicy)schedulePolicy).IsCompression, ((SQLSchedulePolicy)schedulePolicy).IsCompression); azureVmWorkloadProtectionPolicy.WorkLoadType = ConversionUtils.GetServiceClientWorkloadType(workloadType.ToString()); azureVmWorkloadProtectionPolicy.SubProtectionPolicy = new List <SubProtectionPolicy>(); azureVmWorkloadProtectionPolicy.SubProtectionPolicy = PolicyHelpers.GetServiceClientSubProtectionPolicy( (SQLRetentionPolicy)retentionPolicy, (SQLSchedulePolicy)schedulePolicy); serviceClientRequest.Properties = azureVmWorkloadProtectionPolicy; } return(ServiceClientAdapter.CreateOrUpdateProtectionPolicy( policyName = policyName ?? policy.Name, serviceClientRequest, vaultName: vaultName, resourceGroupName: resourceGroupName)); }
private RestAzureNS.AzureOperationResponse <ProtectedItemResource> EnableOrModifyProtection(bool disableWithRetentionData = false) { string vaultName = (string)ProviderData[VaultParams.VaultName]; string vaultResourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; PolicyBase policy = ProviderData.ContainsKey(ItemParams.Policy) ? (PolicyBase)ProviderData[ItemParams.Policy] : null; ProtectableItemBase protectableItemBase = ProviderData.ContainsKey(ItemParams.ProtectableItem) ? (ProtectableItemBase)ProviderData[ItemParams.ProtectableItem] : null; AzureWorkloadProtectableItem protectableItem = ProviderData.ContainsKey(ItemParams.ProtectableItem) ? (AzureWorkloadProtectableItem)ProviderData[ItemParams.ProtectableItem] : null; ItemBase itemBase = ProviderData.ContainsKey(ItemParams.Item) ? (ItemBase)ProviderData[ItemParams.Item] : null; AzureWorkloadSQLDatabaseProtectedItem item = ProviderData.ContainsKey(ItemParams.Item) ? (AzureWorkloadSQLDatabaseProtectedItem)ProviderData[ItemParams.Item] : null; AzureVmWorkloadSQLDatabaseProtectedItem properties = new AzureVmWorkloadSQLDatabaseProtectedItem(); string containerUri = ""; string protectedItemUri = ""; if (disableWithRetentionData) { //Disable protection while retaining backup data ValidateAzureWorkloadDisableProtectionRequest(itemBase); Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(item.Id); containerUri = HelperUtils.GetContainerUri(keyValueDict, item.Id); protectedItemUri = HelperUtils.GetProtectedItemUri(keyValueDict, item.Id); properties.PolicyId = string.Empty; properties.ProtectionState = ProtectionState.ProtectionStopped; properties.SourceResourceId = item.SourceResourceId; } else { if (protectableItem != null) { Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(protectableItem.Id); containerUri = HelperUtils.GetContainerUri( keyValueDict, protectableItem.Id); protectedItemUri = HelperUtils.GetProtectableItemUri( keyValueDict, protectableItem.Id); properties.PolicyId = policy.Id; } else if (item != null) { Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(item.Id); containerUri = HelperUtils.GetContainerUri( keyValueDict, item.Id); protectedItemUri = HelperUtils.GetProtectedItemUri( keyValueDict, item.Id); properties.PolicyId = policy.Id; } } ProtectedItemResource serviceClientRequest = new ProtectedItemResource() { Properties = properties }; return(ServiceClientAdapter.CreateOrUpdateProtectedItem( containerUri, protectedItemUri, serviceClientRequest, vaultName: vaultName, resourceGroupName: vaultResourceGroupName)); }
/// <summary> /// Lists protected items protected by the recovery services vault according to the provider data /// </summary> /// <returns>List of protected items</returns> public List <ItemBase> ListProtectedItems() { string vaultName = (string)ProviderData[VaultParams.VaultName]; string resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName]; ContainerBase container = (ContainerBase)ProviderData[ItemParams.Container]; string name = (string)ProviderData[ItemParams.ItemName]; ItemProtectionStatus protectionStatus = (ItemProtectionStatus)ProviderData[ItemParams.ProtectionStatus]; ItemProtectionState status = (ItemProtectionState)ProviderData[ItemParams.ProtectionState]; CmdletModel.WorkloadType workloadType = (CmdletModel.WorkloadType)ProviderData[ItemParams.WorkloadType]; PolicyBase policy = (PolicyBase)ProviderData[PolicyParams.ProtectionPolicy]; ODataQuery <ProtectedItemQueryObject> queryParams = policy != null ? new ODataQuery <ProtectedItemQueryObject>( q => q.BackupManagementType == ServiceClientModel.BackupManagementType.AzureSql && q.ItemType == DataSourceType.AzureSqlDb && q.PolicyName == policy.Name) : new ODataQuery <ProtectedItemQueryObject>( q => q.BackupManagementType == ServiceClientModel.BackupManagementType.AzureSql && q.ItemType == DataSourceType.AzureSqlDb); List <ProtectedItemResource> protectedItems = new List <ProtectedItemResource>(); string skipToken = null; var listResponse = ServiceClientAdapter.ListProtectedItem( queryParams, skipToken, vaultName: vaultName, resourceGroupName: resourceGroupName); protectedItems.AddRange(listResponse); // 1. Filter by container if (container != null) { protectedItems = protectedItems.Where(protectedItem => { Dictionary <UriEnums, string> dictionary = HelperUtils.ParseUri(protectedItem.Id); string containerUri = HelperUtils.GetContainerUri(dictionary, protectedItem.Id); return(containerUri.Contains(container.Name)); }).ToList(); } List <ProtectedItemResource> protectedItemGetResponses = new List <ProtectedItemResource>(); // 2. Filter by item's friendly name if (!string.IsNullOrEmpty(name)) { protectedItems = protectedItems.Where(protectedItem => { Dictionary <UriEnums, string> dictionary = HelperUtils.ParseUri(protectedItem.Id); string protectedItemUri = HelperUtils.GetProtectedItemUri(dictionary, protectedItem.Id); return(protectedItemUri.ToLower().Contains(name.ToLower())); }).ToList(); ODataQuery <GetProtectedItemQueryObject> getItemQueryParams = new ODataQuery <GetProtectedItemQueryObject>(q => q.Expand == extendedInfo); for (int i = 0; i < protectedItems.Count; i++) { Dictionary <UriEnums, string> dictionary = HelperUtils.ParseUri(protectedItems[i].Id); string containerUri = HelperUtils.GetContainerUri(dictionary, protectedItems[i].Id); string protectedItemUri = HelperUtils.GetProtectedItemUri(dictionary, protectedItems[i].Id); var getResponse = ServiceClientAdapter.GetProtectedItem( containerUri, protectedItemUri, getItemQueryParams, vaultName: vaultName, resourceGroupName: resourceGroupName); protectedItemGetResponses.Add(getResponse.Body); } } List <ItemBase> itemModels = ConversionHelpers.GetItemModelList(protectedItems); if (!string.IsNullOrEmpty(name)) { for (int i = 0; i < itemModels.Count; i++) { AzureSqlProtectedItem azureSqlProtectedItem = (AzureSqlProtectedItem)protectedItemGetResponses[i].Properties; AzureSqlItemExtendedInfo extendedInfo = new AzureSqlItemExtendedInfo(); var hydraExtendedInfo = azureSqlProtectedItem.ExtendedInfo; if (hydraExtendedInfo.OldestRecoveryPoint.HasValue) { extendedInfo.OldestRecoveryPoint = hydraExtendedInfo.OldestRecoveryPoint; } extendedInfo.PolicyState = hydraExtendedInfo.PolicyState; extendedInfo.RecoveryPointCount = hydraExtendedInfo.RecoveryPointCount; ((AzureSqlItem)itemModels[i]).ExtendedInfo = extendedInfo; } } // 3. Filter by item's Protection Status if (protectionStatus != 0) { throw new Exception( string.Format( Resources.ProtectionStatusNotAllowedForAzureSqlItem, protectionStatus.ToString())); } // 4. Filter by item's Protection State if (status != 0) { if (status != ItemProtectionState.Protected) { throw new Exception( string.Format( Resources.ProtectionStateInvalidForAzureSqlItem, status.ToString())); } itemModels = itemModels.Where(itemModel => { return(((AzureSqlItem)itemModel).ProtectionState == status.ToString()); }).ToList(); } // 5. Filter by workload type if (workloadType != 0) { itemModels = itemModels.Where(itemModel => { return(itemModel.WorkloadType == workloadType); }).ToList(); } return(itemModels); }
/// <summary> /// Triggers the enable protection operation for the given item /// </summary> /// <returns>The job response returned from the service</returns> public BaseRecoveryServicesJobResponse EnableProtection() { string azureVMName = (string)ProviderData[ItemParams.AzureVMName]; string azureVMCloudServiceName = (string)ProviderData[ItemParams.AzureVMCloudServiceName]; string azureVMResourceGroupName = (string)ProviderData[ItemParams.AzureVMResourceGroupName]; string parameterSetName = (string)ProviderData[ItemParams.ParameterSetName]; PolicyBase policy = (PolicyBase) ProviderData[ItemParams.Policy]; ItemBase itemBase = (ItemBase) ProviderData[ItemParams.Item]; AzureVmItem item = (AzureVmItem) ProviderData[ItemParams.Item]; // do validations string containerUri = ""; string protectedItemUri = ""; bool isComputeAzureVM = false; if (itemBase == null) { isComputeAzureVM = string.IsNullOrEmpty(azureVMCloudServiceName) ? true : false; string azureVMRGName = (isComputeAzureVM) ? azureVMResourceGroupName : azureVMCloudServiceName; ValidateAzureVMWorkloadType(policy.WorkloadType); ValidateAzureVMEnableProtectionRequest( azureVMName, azureVMCloudServiceName, azureVMResourceGroupName, policy); ProtectableObjectResource protectableObjectResource = GetAzureVMProtectableObject(azureVMName, azureVMRGName, isComputeAzureVM); Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(protectableObjectResource.Id); containerUri = HelperUtils.GetContainerUri(keyValueDict, protectableObjectResource.Id); protectedItemUri = HelperUtils.GetProtectableItemUri( keyValueDict, protectableObjectResource.Id); } else { ValidateAzureVMWorkloadType(item.WorkloadType, policy.WorkloadType); ValidateAzureVMModifyProtectionRequest(itemBase, policy); isComputeAzureVM = IsComputeAzureVM(item.VirtualMachineId); Dictionary <UriEnums, string> keyValueDict = HelperUtils.ParseUri(item.Id); containerUri = HelperUtils.GetContainerUri(keyValueDict, item.Id); protectedItemUri = HelperUtils.GetProtectedItemUri(keyValueDict, item.Id); } // construct Service Client protectedItem request AzureIaaSVMProtectedItem properties; if (isComputeAzureVM == false) { properties = new AzureIaaSClassicComputeVMProtectedItem(); } else { properties = new AzureIaaSComputeVMProtectedItem(); } properties.PolicyId = policy.Id; ProtectedItemCreateOrUpdateRequest serviceClientRequest = new ProtectedItemCreateOrUpdateRequest() { Item = new ProtectedItemResource() { Properties = properties, } }; return(ServiceClientAdapter.CreateOrUpdateProtectedItem( containerUri, protectedItemUri, serviceClientRequest)); }