public void EnableAzureBackupProtectionTest() { using (UndoContext context = UndoContext.Current) { context.Start(); string resourceNamespace = ConfigurationManager.AppSettings["ResourceNamespace"]; var client = GetServiceClient<RecoveryServicesBackupManagementClient>(resourceNamespace); ProtectedItemCreateOrUpdateRequest input = new ProtectedItemCreateOrUpdateRequest(); AzureIaaSClassicComputeVMProtectedItem iaasVmProtectedItem = new AzureIaaSClassicComputeVMProtectedItem(); iaasVmProtectedItem.PolicyId = ConfigurationManager.AppSettings["RsVaultIaasVMDefaultPolicyId"]; ProtectedItemResource protectedItemResource = new ProtectedItemResource(); protectedItemResource.Properties = iaasVmProtectedItem; input.Item = protectedItemResource; string itemUniqueName = ConfigurationManager.AppSettings["RsVaultIaasV1ContainerUniqueName"]; string containerUniqueName = ConfigurationManager.AppSettings["RsVaultIaasV1ContainerUniqueName"]; string containeType = ConfigurationManager.AppSettings["IaaSVMContainerType"]; string itemType = ConfigurationManager.AppSettings["IaaSVMItemType"]; string containerName = containeType + ";" + containerUniqueName; string itemName = itemType + ";" + itemUniqueName; string fabricName = ConfigurationManager.AppSettings["AzureBackupFabricName"]; string rsVaultRgName = CommonTestHelper.GetSetting(TestConstants.RsVaultRgName); string rsVaultName = CommonTestHelper.GetSetting(TestConstants.RsVaultName); ProtectedItemTestHelper protectedItemTestHelper = new ProtectedItemTestHelper(client); var response = protectedItemTestHelper.AddOrUpdateProtectedItem(fabricName, containerName, itemName, input); } }
/// <summary> /// The Create Or Update Protected Item Operation is used to enable /// protection of an item within a container or to modify the /// protection of an already protected item. In the case of enable /// protection, this operation creates a new protected item entity in /// the backend service. In the case of modify protection, this /// operation updates the already created entity in the backend /// service. This is an asynchronous operation. To determine whether /// the backend service has finished processing the request, call the /// Get Item Operation Result API. /// </summary> /// <param name='operations'> /// Reference to the /// Microsoft.Azure.Management.RecoveryServices.Backup.IProtectedItemOperations. /// </param> /// <param name='resourceGroupName'> /// Required. Resource group name of your recovery services vault. /// </param> /// <param name='resourceName'> /// Required. Name of your recovery services vault. /// </param> /// <param name='fabricName'> /// Required. Fabric name of the protected item. /// </param> /// <param name='containerName'> /// Required. Name of the container where the protected item belongs to. /// </param> /// <param name='protectedItemName'> /// Required. Name of the protected item which has to be backed up. /// </param> /// <param name='request'> /// Required. /// </param> /// <param name='customRequestHeaders'> /// Optional. Request header parameters. /// </param> /// <returns> /// Base recovery job response for all the asynchronous operations. /// </returns> public static BaseRecoveryServicesJobResponse CreateOrUpdateProtectedItem(this IProtectedItemOperations operations, string resourceGroupName, string resourceName, string fabricName, string containerName, string protectedItemName, ProtectedItemCreateOrUpdateRequest request, CustomRequestHeaders customRequestHeaders) { return Task.Factory.StartNew((object s) => { return ((IProtectedItemOperations)s).CreateOrUpdateProtectedItemAsync(resourceGroupName, resourceName, fabricName, containerName, protectedItemName, request, customRequestHeaders); } , operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); }
/// <summary> /// Creates a new protected item or updates an already existing protected item /// </summary> /// <param name="containerName">Name of the container which this item belongs to</param> /// <param name="protectedItemName">Name of the item</param> /// <param name="request">Protected item create or update request</param> /// <returns>Job created in the service for this operation</returns> public BaseRecoveryServicesJobResponse CreateOrUpdateProtectedItem( string containerName, string protectedItemName, ProtectedItemCreateOrUpdateRequest request) { string resourceName = BmsAdapter.GetResourceName(); string resourceGroupName = BmsAdapter.GetResourceGroupName(); return BmsAdapter.Client.ProtectedItems.CreateOrUpdateProtectedItemAsync( resourceGroupName, resourceName, AzureFabricName, containerName, protectedItemName, request, BmsAdapter.GetCustomRequestHeaders(), BmsAdapter.CmdletCancellationToken).Result; }
public BaseRecoveryServicesJobResponse AddOrUpdateProtectedItem(string fabricName, string containerName, string protectedItemName, ProtectedItemCreateOrUpdateRequest request) { string rsVaultRgName = CommonTestHelper.GetSetting(TestConstants.RsVaultRgName); string rsVaultName = CommonTestHelper.GetSetting(TestConstants.RsVaultName); var customHeader = CommonTestHelper.GetCustomRequestHeaders(); BaseRecoveryServicesJobResponse response = Client.ProtectedItems.CreateOrUpdateProtectedItem(rsVaultRgName, rsVaultName, fabricName, containerName, protectedItemName, request, customHeader); Assert.NotNull(response); Assert.Equal(HttpStatusCode.Accepted, response.StatusCode); Assert.NotNull(response.Location); Assert.NotNull(response.AzureAsyncOperation); Assert.NotNull(response.RetryAfter); var operationResponse = Client.ProtectedItems.GetProtectedItemOperationResultByURLAsync(response.Location, customHeader); while(operationResponse.Result.StatusCode == HttpStatusCode.Accepted) { if (HttpMockServer.Mode == HttpRecorderMode.Record) { System.Threading.Thread.Sleep(5 * 1000); } operationResponse = Client.ProtectedItems.GetProtectedItemOperationResultByURLAsync(response.Location, customHeader); } Assert.Equal(HttpStatusCode.OK, operationResponse.Result.StatusCode); Assert.NotNull(operationResponse.Result.Item); var operationStatusResponse = Client.GetOperationStatusByURLAsync(response.AzureAsyncOperation, CommonTestHelper.GetCustomRequestHeaders()); var operationJobResponse = (OperationStatusJobExtendedInfo)operationStatusResponse.Result.OperationStatus.Properties; Assert.Equal(HttpStatusCode.OK, operationStatusResponse.Result.StatusCode); Assert.NotNull(operationJobResponse.JobId); Assert.Equal(OperationStatusValues.Succeeded, operationStatusResponse.Result.OperationStatus.Status); return response; }
/// <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; string sourceResourceId = null; 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); AzureIaaSVMProtectableItem iaasVmProtectableItem = (AzureIaaSVMProtectableItem)protectableObjectResource.Properties; if (iaasVmProtectableItem != null) { sourceResourceId = iaasVmProtectableItem.VirtualMachineId; } } 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); sourceResourceId = item.SourceResourceId; } // construct Service Client protectedItem request AzureIaaSVMProtectedItem properties; if (isComputeAzureVM == false) { properties = new AzureIaaSClassicComputeVMProtectedItem(); } else { properties = new AzureIaaSComputeVMProtectedItem(); } properties.PolicyId = policy.Id; properties.SourceResourceId = sourceResourceId; ProtectedItemCreateOrUpdateRequest serviceClientRequest = new ProtectedItemCreateOrUpdateRequest() { Item = new ProtectedItemResource() { Properties = properties, } }; return ServiceClientAdapter.CreateOrUpdateProtectedItem( containerUri, protectedItemUri, serviceClientRequest); }
/// <summary> /// Triggers the disable protection operation for the given item /// </summary> /// <returns>The job response returned from the service</returns> public BaseRecoveryServicesJobResponse DisableProtection() { bool deleteBackupData = (bool)ProviderData[ItemParams.DeleteBackupData]; ItemBase itemBase = (ItemBase) ProviderData[ItemParams.Item]; AzureVmItem item = (AzureVmItem) ProviderData[ItemParams.Item]; // do validations ValidateAzureVMDisableProtectionRequest(itemBase); Dictionary<UriEnums, string> keyValueDict = HelperUtils.ParseUri(item.Id); string containerUri = HelperUtils.GetContainerUri(keyValueDict, item.Id); string protectedItemUri = HelperUtils.GetProtectedItemUri(keyValueDict, item.Id); bool isComputeAzureVM = false; if (deleteBackupData) { return ServiceClientAdapter.DeleteProtectedItem( containerUri, protectedItemUri); } else { isComputeAzureVM = IsComputeAzureVM(item.VirtualMachineId); // construct Service Client protectedItem request AzureIaaSVMProtectedItem properties; if (isComputeAzureVM == false) { properties = new AzureIaaSClassicComputeVMProtectedItem(); } else { properties = new AzureIaaSComputeVMProtectedItem(); } properties.PolicyId = string.Empty; properties.ProtectionState = ItemProtectionState.ProtectionStopped.ToString(); properties.SourceResourceId = item.SourceResourceId; ProtectedItemCreateOrUpdateRequest serviceClientRequest = new ProtectedItemCreateOrUpdateRequest() { Item = new ProtectedItemResource() { Properties = properties, } }; return ServiceClientAdapter.CreateOrUpdateProtectedItem( containerUri, protectedItemUri, serviceClientRequest); } }
public void EnableProtection(string vaultRgName, string vaultName, string policyId, string containerUri, string itemUri) { string fabricName = ConfigurationManager.AppSettings["AzureBackupFabricName"]; ProtectedItemCreateOrUpdateRequest input = new ProtectedItemCreateOrUpdateRequest(); AzureIaaSClassicComputeVMProtectedItem iaasVmProtectedItem = new AzureIaaSClassicComputeVMProtectedItem(); iaasVmProtectedItem.PolicyId = policyId; ProtectedItemResource protectedItemResource = new ProtectedItemResource(); protectedItemResource.Properties = iaasVmProtectedItem; input.Item = protectedItemResource; AddOrUpdateProtectedItem(vaultRgName, vaultName, fabricName, containerUri, itemUri, input); }
/// <summary> /// The Create Or Update Protected Item Operation is used to enable /// protection of an item within a container or to modify the /// protection of an already protected item. In the case of enable /// protection, this operation creates a new protected item entity in /// the backend service. In the case of modify protection, this /// operation updates the already created entity in the backend /// service. This is an asynchronous operation. To determine whether /// the backend service has finished processing the request, call the /// Get Item Operation Result API. /// </summary> /// <param name='operations'> /// Reference to the /// Microsoft.Azure.Management.RecoveryServices.Backup.IProtectedItemOperations. /// </param> /// <param name='resourceGroupName'> /// Required. Resource group name of your recovery services vault. /// </param> /// <param name='resourceName'> /// Required. Name of your recovery services vault. /// </param> /// <param name='fabricName'> /// Required. Fabric name of the protected item. /// </param> /// <param name='containerName'> /// Required. Name of the container where the protected item belongs to. /// </param> /// <param name='protectedItemName'> /// Required. Name of the protected item which has to be backed up. /// </param> /// <param name='request'> /// Required. /// </param> /// <param name='customRequestHeaders'> /// Optional. Request header parameters. /// </param> /// <returns> /// Base recovery job response for all the asynchronous operations. /// </returns> public static Task<BaseRecoveryServicesJobResponse> CreateOrUpdateProtectedItemAsync(this IProtectedItemOperations operations, string resourceGroupName, string resourceName, string fabricName, string containerName, string protectedItemName, ProtectedItemCreateOrUpdateRequest request, CustomRequestHeaders customRequestHeaders) { return operations.CreateOrUpdateProtectedItemAsync(resourceGroupName, resourceName, fabricName, containerName, protectedItemName, request, customRequestHeaders, CancellationToken.None); }