Exemplo n.º 1
0
        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>
        /// 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);
        }
Exemplo n.º 4
0
        /// <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);
        }
        /// <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));
        }
        public BaseRecoveryServicesJobResponse AddOrUpdateProtectedItem(string rsVaultRgName, string rsVaultName, string fabricName,
                                                                        string containerName, string protectedItemName, ProtectedItemCreateOrUpdateRequest request)
        {
            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>
 /// 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>
 /// 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));
 }