public IList <SQLDataDirectory> GetRpDetails(string vaultName, string resourceGroupName)
        {
            Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(RecoveryPoint.Id);
            string containerUri      = HelperUtils.GetContainerUri(uriDict, RecoveryPoint.Id);
            string protectedItemName = HelperUtils.GetProtectedItemUri(uriDict, RecoveryPoint.Id);

            var rpResponse = ServiceClientAdapter.GetRecoveryPointDetails(
                containerUri,
                protectedItemName,
                RecoveryPoint.RecoveryPointId,
                vaultName: vaultName,
                resourceGroupName: resourceGroupName);
            AzureWorkloadSQLRecoveryPoint recoveryPoint = rpResponse.Properties as AzureWorkloadSQLRecoveryPoint;

            return(recoveryPoint.ExtendedInfo.DataDirectoryPaths);
        }
        public override void ExecuteCmdlet()
        {
            try
            {
                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                string             vaultName          = resourceIdentifier.ResourceName;
                string             resourceGroupName  = resourceIdentifier.ResourceGroupName;

                BackupResourceVaultConfigResource result = ServiceClientAdapter.GetVaultProperty(vaultName, resourceGroupName);
                WriteObject(result.Properties);
            }
            catch (Exception exception)
            {
                WriteExceptionError(exception);
            }
        }
        private List <ProtectableContainerResource> GetUnRegisteredVmContainers(string vaultName = null,
                                                                                string vaultResourceGroupName = null)
        {
            ODataQuery <BMSContainerQueryObject> queryParams = null;

            queryParams = new ODataQuery <BMSContainerQueryObject>(
                q => q.BackupManagementType == ServiceClientModel.BackupManagementType.AzureWorkload);

            var listResponse = ServiceClientAdapter.ListUnregisteredContainers(
                queryParams,
                vaultName: vaultName,
                resourceGroupName: vaultResourceGroupName);
            List <ProtectableContainerResource> containerModels = listResponse.ToList();

            return(containerModels);
        }
Exemple #4
0
        private List <ContainerBase> GetRegisteredStorageAccounts(string vaultName = null,
                                                                  string vaultResourceGroupName = null)
        {
            ODataQuery <BMSContainerQueryObject> queryParams = null;

            queryParams = new ODataQuery <BMSContainerQueryObject>(
                q => q.BackupManagementType == ServiceClientModel.BackupManagementType.AzureStorage);

            var listResponse = ServiceClientAdapter.ListContainers(
                queryParams,
                vaultName: vaultName,
                resourceGroupName: vaultResourceGroupName);

            List <ContainerBase> containerModels = ConversionHelpers.GetContainerModelList(listResponse);

            return(containerModels);
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                if (ParameterSetName == JobFilterSet)
                {
                    JobId = Job.JobId;
                }

                WriteDebug("Fetching job with ID: " + JobId);

                var adapterResponse = ServiceClientAdapter.GetJob(JobId);
                WriteObject(JobConversions.GetPSJob(adapterResponse));
            });
        }
Exemple #6
0
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                string containerName = Container != null ? Container.Name : ResourceId.Split('/')[8];
                ConfirmAction(
                    Force.IsPresent,
                    string.Format(Resources.RegisterContainerWarning, containerName),
                    Resources.RegisterContainerMessage,
                    containerName, () =>
                {
                    base.ExecuteCmdlet();

                    ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                    string vaultName = resourceIdentifier.ResourceName;
                    string vaultResourceGroupName = resourceIdentifier.ResourceGroupName;

                    PsBackupProviderManager providerManager =
                        new PsBackupProviderManager(new Dictionary <Enum, object>()
                    {
                        { VaultParams.VaultName, vaultName },
                        { VaultParams.ResourceGroupName, vaultResourceGroupName },
                        { ContainerParams.Name, containerName },
                        { ContainerParams.ContainerType, ServiceClientHelpers.GetServiceClientWorkloadType(WorkloadType).ToString() },
                        { ContainerParams.BackupManagementType, BackupManagementType.ToString() },
                        { ContainerParams.Container, Container }
                    }, ServiceClientAdapter);

                    IPsBackupProvider psBackupProvider =
                        providerManager.GetProviderInstance(WorkloadType, BackupManagementType);
                    psBackupProvider.RegisterContainer();

                    // List containers
                    string backupManagementType = BackupManagementType.ToString();
                    ODataQuery <BMSContainerQueryObject> queryParams = new ODataQuery <BMSContainerQueryObject>(
                        q => q.FriendlyName == containerName &&
                        q.BackupManagementType == backupManagementType);

                    var listResponse = ServiceClientAdapter.ListContainers(queryParams,
                                                                           vaultName: vaultName, resourceGroupName: vaultResourceGroupName);
                    var containerModels = ConversionHelpers.GetContainerModelList(listResponse);
                    WriteObject(containerModels, enumerateCollection: true);
                });
            }, ShouldProcess(ResourceId, VerbsLifecycle.Register));
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                if (Container.ContainerType != ContainerType.Windows || Container.BackupManagementType
                    != BackupManagementType.MARS)
                {
                    throw new ArgumentException(String.Format(Resources.UnsupportedContainerException,
                                                              Container.ContainerType, Container.BackupManagementType));
                }
                MabContainer mabContainer =
                    Container as MabContainer;
                string containerName = mabContainer.Name;
                ServiceClientAdapter.UnregisterContainers(containerName);
            });
        }
Exemple #8
0
        /// <summary>
        /// Fetches policies by name
        /// </summary>
        /// <param name="policyName">Name of the policy to be fetched</param>
        /// <param name="serviceClientAdapter">Service client adapter with which to make calls</param>
        /// <param name="vaultName"></param>
        /// <param name="resourceGroupName"></param>
        /// <returns></returns>
        public static ProtectionPolicyResource GetProtectionPolicyByName(
            string policyName,
            ServiceClientAdapter serviceClientAdapter,
            string vaultName         = null,
            string resourceGroupName = null)
        {
            ProtectionPolicyResource response = null;

            try
            {
                response = serviceClientAdapter.GetProtectionPolicy(
                    policyName,
                    vaultName: vaultName,
                    resourceGroupName: resourceGroupName);
                Logger.Instance.WriteDebug("Successfully fetched policy from service: " + policyName);
            }
            catch (AggregateException exception)
            {
                // if http response is NotFound - then ignore and return NULL response
                if (exception.InnerException != null && exception.InnerException is CloudException)
                {
                    var cloudEx = exception.InnerException as CloudException;
                    if (cloudEx.Response != null)
                    {
                        if (cloudEx.Response.StatusCode != SystemNet.HttpStatusCode.NotFound)
                        {
                            Logger.Instance.WriteDebug("CloudException Response statusCode: " +
                                                       cloudEx.Response.StatusCode);
                            throw;
                        }
                    }
                    else
                    {
                        throw;
                    }
                }
                else
                {
                    throw;
                }
            }

            return(response);
        }
Exemple #9
0
        public override void ExecuteCmdlet()
        {
            if (ParameterSetName == JobFilterSet)
            {
                JobId = Job.JobId;
            }

            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                string vaultName         = resourceIdentifier.ResourceName;
                string resourceGroupName = resourceIdentifier.ResourceGroupName;

                WriteDebug("Stopping job with ID: " + JobId);

                var cancelResponse = ServiceClientAdapter.CancelJob(
                    JobId,
                    vaultName: vaultName,
                    resourceGroupName: resourceGroupName);

                var operationStatus = TrackingHelpers.GetOperationResult(
                    cancelResponse,
                    operationId => ServiceClientAdapter.GetCancelJobOperationResult(
                        operationId,
                        vaultName: vaultName,
                        resourceGroupName: resourceGroupName));

                if (operationStatus.Response.StatusCode != HttpStatusCode.NoContent)
                {
                    throw new Exception(string.Format(Resources.JobCouldNotCancelJob,
                                                      cancelResponse.Response.StatusCode.ToString()));
                }
                else
                {
                    WriteObject(JobConversions.GetPSJob(ServiceClientAdapter.GetJob(
                                                            JobId,
                                                            vaultName: vaultName,
                                                            resourceGroupName: resourceGroupName)));
                }
            }, ShouldProcess(JobId, "Stop"));
        }
Exemple #10
0
        /// <summary>
        /// Initializes the service clients and the logging utility
        /// </summary>
        protected void InitializeAzureBackupCmdlet()
        {
            ServiceClientAdapter = new ServiceClientAdapter(DefaultContext);

            WriteDebug("Inside Restore. Going to create ResourceClient.");
            RmClient = AzureSession.Instance.ClientFactory.CreateArmClient <ResourcesNS.ResourceManagementClient>(DefaultContext, AzureEnvironment.Endpoint.ResourceManager);

            // use dependency injection to override the behavior of GetGuid in a test context
            var getGuidComponent = _guid;

            if (AzureSession.Instance.TryGetComponent(GetGuidComponentName, out getGuidComponent))
            {
                _guid = getGuidComponent;
            }

            WriteDebug("Client Created successfully");

            Logger.Instance = new Logger(WriteWarning, WriteDebug, WriteVerbose, WriteError, ThrowTerminatingError);
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                try
                {
                    ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                    string vaultName         = resourceIdentifier.ResourceName;
                    string resourceGroupName = resourceIdentifier.ResourceGroupName;

                    if (SoftDeleteFeatureState != null)
                    {
                        BackupResourceVaultConfigResource currentConfig = ServiceClientAdapter.GetVaultProperty(vaultName, resourceGroupName);

                        BackupResourceVaultConfigResource param = new BackupResourceVaultConfigResource();
                        param.Properties = new BackupResourceVaultConfig();
                        param.Properties.SoftDeleteFeatureState  = SoftDeleteFeatureState + "d";
                        param.Properties.EnhancedSecurityState   = currentConfig.Properties.EnhancedSecurityState;
                        BackupResourceVaultConfigResource result = ServiceClientAdapter.SetVaultProperty(vaultName, resourceGroupName, param);
                        WriteObject(result.Properties);
                    }
                    else if (EncryptionKeyId != null)
                    {
                        BackupResourceEncryptionConfigResource vaultEncryptionSettings = new BackupResourceEncryptionConfigResource();
                        vaultEncryptionSettings.Properties = new BackupResourceEncryptionConfig();

                        vaultEncryptionSettings.Properties.EncryptionAtRestType = "CustomerManaged";
                        vaultEncryptionSettings.Properties.KeyUri = EncryptionKeyId;
                        if (InfrastructureEncryption.IsPresent)
                        {
                            vaultEncryptionSettings.Properties.InfrastructureEncryptionState = "Enabled";
                        }
                        vaultEncryptionSettings.Properties.SubscriptionId   = KeyVaultSubscriptionId;
                        vaultEncryptionSettings.Properties.LastUpdateStatus = null;
                        var response = ServiceClientAdapter.UpdateVaultEncryptionConfig(resourceGroupName, vaultName, vaultEncryptionSettings);
                    }
                }
                catch (Exception exception)
                {
                    WriteExceptionError(exception);
                }
            }, ShouldProcess(VaultId, VerbsCommon.Set));
        }
Exemple #12
0
        public RestAzureNS.AzureOperationResponse TriggerBackup()
        {
            string                      vaultName = (string)ProviderData[VaultParams.VaultName];
            string                      vaultResourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName];
            ItemBase                    item                        = (ItemBase)ProviderData[ItemParams.Item];
            DateTime?                   expiryDateTime              = (DateTime?)ProviderData[ItemParams.ExpiryDateTimeUTC];
            AzureFileShareItem          azureFileShareItem          = item as AzureFileShareItem;
            BackupRequestResource       triggerBackupRequest        = new BackupRequestResource();
            AzureFileShareBackupRequest azureFileShareBackupRequest = new AzureFileShareBackupRequest();

            azureFileShareBackupRequest.RecoveryPointExpiryTimeInUTC = expiryDateTime;
            triggerBackupRequest.Properties = azureFileShareBackupRequest;

            return(ServiceClientAdapter.TriggerBackup(
                       IdUtils.GetValueByName(azureFileShareItem.Id, IdUtils.IdNames.ProtectionContainerName),
                       IdUtils.GetValueByName(azureFileShareItem.Id, IdUtils.IdNames.ProtectedItemName),
                       triggerBackupRequest,
                       vaultName: vaultName,
                       resourceGroupName: vaultResourceGroupName));
        }
        public override void ExecuteCmdlet()
        {
            try
            {
                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                string             vaultName          = resourceIdentifier.ResourceName;
                string             resourceGroupName  = resourceIdentifier.ResourceGroupName;

                BackupResourceEncryptionConfigExtendedResource vaultEncryptionSetting = ServiceClientAdapter.GetVaultEncryptionConfig(resourceGroupName, vaultName);
                BackupResourceVaultConfigResource vaultConfigResource = ServiceClientAdapter.GetVaultProperty(vaultName, resourceGroupName);

                VaultProperty vaultProperty = new VaultProperty(vaultConfigResource.Properties, vaultEncryptionSetting);

                WriteObject(vaultProperty);
            }
            catch (Exception exception)
            {
                WriteExceptionError(exception);
            }
        }
Exemple #14
0
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                try
                {
                    ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                    string vaultName         = resourceIdentifier.ResourceName;
                    string resourceGroupName = resourceIdentifier.ResourceGroupName;

                    string resourceGuardMappingName          = "VaultProxy";
                    Rest.Azure.AzureOperationResponse result = ServiceClientAdapter.DeleteResourceGuardMapping(vaultName, resourceGroupName, resourceGuardMappingName, Token);
                    WriteObject(result);
                }
                catch (Exception exception)
                {
                    WriteExceptionError(exception);
                }
            }, ShouldProcess("ResourceGuardMapping", VerbsCommon.Remove));
        }
Exemple #15
0
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                // fetch source vault and target vault subscription
                Dictionary <CmdletModel.UriEnums, string> SourceVaultDict = HelperUtils.ParseUri(SourceVault.ID);
                string sourceSub = SourceVaultDict[CmdletModel.UriEnums.Subscriptions];

                // change subscription for HTTP requests
                string subscriptionContext = ServiceClientAdapter.BmsAdapter.Client.SubscriptionId;

                // Prepare Data Move
                ServiceClientAdapter.BmsAdapter.Client.SubscriptionId = sourceSub;
                PrepareDataMoveRequest prepareMoveRequest             = new PrepareDataMoveRequest();
                prepareMoveRequest.TargetResourceId = TargetVault.ID;
                prepareMoveRequest.TargetRegion     = TargetVault.Location;

                /// currently only allowing vault level data move
                prepareMoveRequest.DataMoveLevel = "Vault";

                if (RetryOnlyFailed.IsPresent)
                {
                    prepareMoveRequest.IgnoreMoved = true;
                }
                else
                {
                    prepareMoveRequest.IgnoreMoved = false;
                }

                Logger.Instance.WriteDebug("Retry only with failed items : " + prepareMoveRequest.IgnoreMoved);
                Logger.Instance.WriteDebug("Location of Target vault: " + TargetVault.Location);

                /* move Prepare move function to vault APIs */
                string correlationId = ServiceClientAdapter.PrepareDataMove(SourceVault.Name, SourceVault.ResourceGroupName, prepareMoveRequest);

                ServiceClientAdapter.BmsAdapter.Client.SubscriptionId = subscriptionContext; // set subscription to original
                WriteObject(correlationId);
            }, ShouldProcess(TargetVault.Name, VerbsCommon.Set));
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                string resourceId = ResourceId;
                if (ParameterSetName == NameParamSet)
                {
                    // Form ID from name

                    ResourceIdentifier resourceIdentifier = new ResourceIdentifier();
                    resourceIdentifier.Subscription       = ServiceClientAdapter.SubscriptionId;
                    resourceIdentifier.ResourceGroupName  = ResourceGroupName;

                    resourceIdentifier.ResourceType = ConversionUtils.GetARMResourceType(Type);
                    resourceIdentifier.ResourceName = Name;

                    resourceId = resourceIdentifier.ToString();
                }
                else if (ParameterSetName == IdParamSet)
                {
                    ResourceIdentifier resourceIdentifier = new ResourceIdentifier(resourceId);
                    Type = ConversionUtils.GetWorkloadTypeFromArmType(resourceIdentifier.ResourceType);
                }
                else
                {
                    // Pass on the ID
                }

                GenericResource resource = ServiceClientAdapter.GetAzureResource(resourceId);

                BackupStatusResponse backupStatus = ServiceClientAdapter.CheckBackupStatus(Type, resourceId, resource.Location, ProtectableObjectName).Body;

                Boolean isProtected = String.Equals(backupStatus.ProtectionStatus, "Protected", StringComparison.OrdinalIgnoreCase);

                WriteObject(new ResourceBackupStatus(
                                isProtected == true ? backupStatus.VaultId : null,
                                isProtected));
            });
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                string vaultName         = resourceIdentifier.ResourceName;
                string resourceGroupName = resourceIdentifier.ResourceGroupName;

                if (ParameterSetName == JobFilterSet)
                {
                    JobId = Job.JobId;
                }

                WriteDebug("Fetching job with ID: " + JobId);

                if (UseSecondaryRegion.IsPresent)
                {
                    CrrModel.CrrJobRequest jobRequest = new CrrModel.CrrJobRequest();
                    jobRequest.JobName    = JobId;
                    jobRequest.ResourceId = VaultId;

                    // check this GetVault for rainy day scenario
                    ARSVault vault         = ServiceClientAdapter.GetVault(resourceGroupName, vaultName);
                    string secondaryRegion = BackupUtils.regionMap[vault.Location];

                    CrrModel.JobResource jobDetailsCrr = ServiceClientAdapter.GetCRRJobDetails(secondaryRegion, jobRequest);
                    WriteObject(JobConversions.GetPSJobCrr(jobDetailsCrr));
                }
                else
                {
                    JobResource jobDetails = ServiceClientAdapter.GetJob(
                        JobId,
                        vaultName: vaultName,
                        resourceGroupName: resourceGroupName);

                    WriteObject(JobConversions.GetPSJob(jobDetails));
                }
            });
        }
        /// <summary>
        /// This method prepares the source vault for Data Move operation.
        /// </summary>
        /// <param name="vaultName"></param>
        /// <param name="resourceGroupName"></param>
        /// <param name="prepareMoveRequest"></param>
        public string PrepareDataMove(string vaultName, string resourceGroupName, PrepareDataMoveRequest prepareMoveRequest)
        {
            // prepare move
            var prepareMoveOperationResponse = ServiceClientAdapter.BmsAdapter.Client.BeginBMSPrepareDataMoveWithHttpMessagesAsync(
                vaultName, resourceGroupName, prepareMoveRequest).Result;

            // track prepare-move operation to success
            var operationStatus = TrackingHelpers.GetOperationStatusDataMove(
                prepareMoveOperationResponse,
                operationId => ServiceClientAdapter.GetDataMoveOperationStatus(operationId, vaultName, resourceGroupName));

            Logger.Instance.WriteDebug("Prepare move operation: " + operationStatus.Body.Status);

            // get the correlation Id and return it for trigger data move
            var operationResult = TrackingHelpers.GetCorrelationId(
                prepareMoveOperationResponse,
                operationId => ServiceClientAdapter.GetPrepareDataMoveOperationResult(operationId, vaultName, resourceGroupName));

            Logger.Instance.WriteDebug("Prepare move - correlationId:" + operationResult.CorrelationId);

            return(operationResult.CorrelationId);
        }
        /// <summary>
        /// Based on the response from the service, handles the job created in the service appropriately.
        /// </summary>
        /// <param name="response">Response from service</param>
        /// <param name="operationName">Name of the operation</param>
        protected void HandleCreatedJob(AzureRestNS.AzureOperationResponse response, string operationName)
        {
            WriteDebug(Resources.TrackingOperationStatusURLForCompletion +
                       response.Response.Headers.GetAzureAsyncOperationHeader());

            var operationStatus = TrackingHelpers.GetOperationStatus(
                response,
                operationId => ServiceClientAdapter.GetProtectedItemOperationStatus(operationId));

            if (response != null && operationStatus != null)
            {
                WriteDebug(Resources.FinalOperationStatus + operationStatus.Status);

                if (operationStatus.Properties != null)
                {
                    var jobExtendedInfo =
                        (OperationStatusJobExtendedInfo)operationStatus.Properties;

                    if (jobExtendedInfo.JobId != null)
                    {
                        var jobStatusResponse =
                            (OperationStatusJobExtendedInfo)operationStatus.Properties;
                        WriteObject(GetJobObject(jobStatusResponse.JobId));
                    }
                }

                if (operationStatus.Status == OperationStatusValues.Failed &&
                    operationStatus.Error != null)
                {
                    var errorMessage = string.Format(
                        Resources.OperationFailed,
                        operationName,
                        operationStatus.Error.Code,
                        operationStatus.Error.Message);
                    throw new Exception(errorMessage);
                }
            }
        }
        public override void ExecuteCmdlet()
        {
            PolicyName = (this.ParameterSetName == PolicyNameParameterSet) ? Name : Policy.Name;
            if (string.IsNullOrEmpty(PolicyName))
            {
                throw new ArgumentException(Resources.PolicyNameIsEmptyOrNull);
            }

            ExecutionBlock(() =>
            {
                ConfirmAction(
                    Force.IsPresent,
                    string.Format(Resources.RemoveProtectionPolicyWarning, PolicyName),
                    Resources.RemoveProtectionPolicyMessage,
                    PolicyName, () =>
                {
                    base.ExecuteCmdlet();

                    ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                    string vaultName         = resourceIdentifier.ResourceName;
                    string resourceGroupName = resourceIdentifier.ResourceGroupName;

                    WriteDebug(Resources.MakingClientCall);

                    ServiceClientAdapter.RemoveProtectionPolicy(
                        PolicyName,
                        vaultName: vaultName,
                        resourceGroupName: resourceGroupName);
                    WriteDebug(Resources.ProtectionPolicyDeleted);
                }
                    );

                if (PassThru.IsPresent)
                {
                    WriteObject(Policy);
                }
            }, ShouldProcess(PolicyName, VerbsCommon.Remove));
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                string vaultName         = resourceIdentifier.ResourceName;
                string resourceGroupName = resourceIdentifier.ResourceGroupName;

                if (!((Container.ContainerType == ContainerType.Windows &&
                       Container.BackupManagementType == BackupManagementType.MARS) ||
                      (Container.ContainerType == ContainerType.AzureSQL &&
                       Container.BackupManagementType == BackupManagementType.AzureSQL) ||
                      (Container.ContainerType == ContainerType.AzureStorage &&
                       Container.BackupManagementType == BackupManagementType.AzureStorage)))
                {
                    throw new ArgumentException(string.Format(Resources.UnsupportedContainerException,
                                                              Container.ContainerType, Container.BackupManagementType));
                }
                string containerName = Container.Name;

                if (Container.ContainerType == ContainerType.AzureSQL)
                {
                    containerName = ContainerConstansts.SqlContainerNamePrefix + containerName;
                }

                ServiceClientAdapter.UnregisterContainers(
                    containerName,
                    vaultName: vaultName,
                    resourceGroupName: resourceGroupName);

                if (PassThru.IsPresent)
                {
                    WriteObject(Container);
                }
            }, ShouldProcess(Container.Name, VerbsLifecycle.Unregister));
        }
Exemple #22
0
        private List <RecoveryPointBase> GetMoveRecommendedRecoveryPoints(Dictionary <Enum, object> ProviderData)
        {
            string   vaultName         = (string)ProviderData[VaultParams.VaultName];
            string   resourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName];
            ItemBase item = ProviderData[RecoveryPointParams.Item] as ItemBase;

            Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(item.Id);
            string containerUri      = HelperUtils.GetContainerUri(uriDict, item.Id);
            string protectedItemName = HelperUtils.GetProtectedItemUri(uriDict, item.Id);

            ServiceClientModel.ListRecoveryPointsRecommendedForMoveRequest moveRequest = new ServiceClientModel.ListRecoveryPointsRecommendedForMoveRequest();

            List <ServiceClientModel.RecoveryPointResource> rpListResponse;

            rpListResponse = ServiceClientAdapter.GetMoveRecommendedRecoveryPoints(
                containerUri,
                protectedItemName,
                moveRequest,
                vaultName: vaultName,
                resourceGroupName: resourceGroupName);

            return(RecoveryPointConversions.GetPSAzureRecoveryPoints(rpListResponse, item));
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                string vaultName         = resourceIdentifier.ResourceName;
                string resourceGroupName = resourceIdentifier.ResourceGroupName;

                if ((AzureRmBackupManagementServer.BackupEngineType !=
                     BackupEngineType.DpmBackupEngine.ToString() &&
                     AzureRmBackupManagementServer.BackupEngineType !=
                     BackupEngineType.AzureBackupServerEngine.ToString()) ||
                    AzureRmBackupManagementServer.BackupManagementType.ToString() !=
                    BackupManagementType.SCDPM.ToString() &&
                    AzureRmBackupManagementServer.BackupManagementType.ToString() !=
                    BackupManagementType.AzureBackupServer.ToString())
                {
                    throw new ArgumentException(string.Format(
                                                    Resources.UnsupportedAzureRmBackupManagementServerException,
                                                    AzureRmBackupManagementServer.BackupEngineType,
                                                    AzureRmBackupManagementServer.BackupManagementType));
                }

                string azureRmBackupManagementServer = AzureRmBackupManagementServer.Name;
                ServiceClientAdapter.UnregisterContainers(
                    azureRmBackupManagementServer,
                    vaultName: vaultName,
                    resourceGroupName: resourceGroupName);

                if (PassThru.IsPresent)
                {
                    WriteObject(AzureRmBackupManagementServer);
                }
            }, ShouldProcess(AzureRmBackupManagementServer.Name, VerbsLifecycle.Unregister));
        }
Exemple #24
0
        public List <SQLDataDirectory> GetDataDirectory(string vaultName, string resourceGroupName, string itemId, DateTime pointInTime)
        {
            Dictionary <UriEnums, string> uriDict = HelperUtils.ParseUri(itemId);
            string containerUri      = HelperUtils.GetContainerUri(uriDict, itemId);
            string protectedItemName = HelperUtils.GetProtectedItemUri(uriDict, itemId);
            var    queryFilterString = QueryBuilder.Instance.GetQueryString(new BMSRPQueryObject()
            {
                RestorePointQueryType = RestorePointQueryType.Log,
                ExtendedInfo          = true
            });

            ODataQuery <BMSRPQueryObject> queryFilter = new ODataQuery <BMSRPQueryObject>();

            queryFilter.Filter = queryFilterString;

            var rpResponse = ServiceClientAdapter.GetRecoveryPoints(
                containerUri,
                protectedItemName,
                queryFilter,
                vaultName: vaultName,
                resourceGroupName: resourceGroupName);
            List <SQLDataDirectory> dataDirectoryPaths = new List <SQLDataDirectory>();

            if (rpResponse[0].Properties.GetType() == typeof(AzureWorkloadSQLPointInTimeRecoveryPoint))
            {
                AzureWorkloadSQLPointInTimeRecoveryPoint recoveryPoint =
                    rpResponse[0].Properties as AzureWorkloadSQLPointInTimeRecoveryPoint;
                if (recoveryPoint.ExtendedInfo != null)
                {
                    foreach (SQLDataDirectory dataDirectoryPath in recoveryPoint.ExtendedInfo.DataDirectoryPaths)
                    {
                        dataDirectoryPaths.Add(dataDirectoryPath);
                    }
                }
            }
            return(dataDirectoryPaths);
        }
        /// <summary>
        /// Get Protected Items for particular workload type
        /// </summary>
        public static List <ProtectedItemResource> GetProtectedItems(
            string vaultName,
            string resourceGroupName,
            string BackupManagementType,
            string DataSourceType,
            ServiceClientAdapter serviceClientAdapter)
        {
            ODataQuery <ProtectedItemQueryObject> queryParams = new ODataQuery <ProtectedItemQueryObject>(
                q => q.BackupManagementType
                == BackupManagementType &&
                q.ItemType == DataSourceType);

            List <ProtectedItemResource> protectedItems = new List <ProtectedItemResource>();

            var listResponse = serviceClientAdapter.ListProtectedItem(
                queryParams,
                skipToken: null,
                vaultName: vaultName,
                resourceGroupName: resourceGroupName);

            protectedItems.AddRange(listResponse);

            return(protectedItems);
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                ResourceIdentifier resourceIdentifier = new ResourceIdentifier(VaultId);
                string vaultName         = resourceIdentifier.ResourceName;
                string resourceGroupName = resourceIdentifier.ResourceGroupName;

                if (ParameterSetName == JobFilterSet)
                {
                    JobId = Job.JobId;
                }

                WriteDebug("Fetching job with ID: " + JobId);

                var adapterResponse = ServiceClientAdapter.GetJob(
                    JobId,
                    vaultName: vaultName,
                    resourceGroupName: resourceGroupName);
                WriteObject(JobConversions.GetPSJob(adapterResponse));
            });
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                if (!((Container.ContainerType == ContainerType.Windows &&
                       Container.BackupManagementType == BackupManagementType.MARS) ||
                      (Container.ContainerType == ContainerType.AzureSQL &&
                       Container.BackupManagementType == BackupManagementType.AzureSQL)))
                {
                    throw new ArgumentException(String.Format(Resources.UnsupportedContainerException,
                                                              Container.ContainerType, Container.BackupManagementType));
                }
                string containerName = Container.Name;

                if (Container.ContainerType == ContainerType.AzureSQL)
                {
                    containerName = ContainerConstansts.SqlContainerNamePrefix + containerName;
                }

                ServiceClientAdapter.UnregisterContainers(containerName);
            });
        }
        public RestAzureNS.AzureOperationResponse TriggerBackup()
        {
            string   vaultName = (string)ProviderData[VaultParams.VaultName];
            string   vaultResourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName];
            ItemBase item              = (ItemBase)ProviderData[ItemParams.Item];
            DateTime?expiryDateTime    = (DateTime?)ProviderData[ItemParams.ExpiryDateTimeUTC];
            string   backupType        = ProviderData[ItemParams.BackupType].ToString();
            bool     enableCompression = (bool)ProviderData[ItemParams.EnableCompression];
            AzureWorkloadSQLDatabaseProtectedItem azureWorkloadProtectedItem = item as AzureWorkloadSQLDatabaseProtectedItem;
            BackupRequestResource      triggerBackupRequest       = new BackupRequestResource();
            AzureWorkloadBackupRequest azureWorkloadBackupRequest = new AzureWorkloadBackupRequest();

            azureWorkloadBackupRequest.RecoveryPointExpiryTimeInUTC = expiryDateTime;
            azureWorkloadBackupRequest.BackupType        = backupType;
            azureWorkloadBackupRequest.EnableCompression = enableCompression;
            triggerBackupRequest.Properties = azureWorkloadBackupRequest;

            return(ServiceClientAdapter.TriggerBackup(
                       IdUtils.GetValueByName(azureWorkloadProtectedItem.Id, IdUtils.IdNames.ProtectionContainerName),
                       IdUtils.GetValueByName(azureWorkloadProtectedItem.Id, IdUtils.IdNames.ProtectedItemName),
                       triggerBackupRequest,
                       vaultName: vaultName,
                       resourceGroupName: vaultResourceGroupName));
        }
        public override void ExecuteCmdlet()
        {
            PolicyName = (this.ParameterSetName == PolicyNameParameterSet) ? Name : Policy.Name;
            if (string.IsNullOrEmpty(PolicyName))
            {
                throw new ArgumentException(Resources.PolicyNameIsEmptyOrNull);
            }
            ConfirmAction(
                Force.IsPresent,
                string.Format(Resources.RemoveProtectionPolicyWarning, PolicyName),
                Resources.RemoveProtectionPolicyMessage,
                PolicyName, () =>
            {
                ExecutionBlock(() =>
                {
                    base.ExecuteCmdlet();

                    WriteDebug(Resources.MakingClientCall);

                    ServiceClientAdapter.RemoveProtectionPolicy(PolicyName);
                    WriteDebug(Resources.ProtectionPolicyDeleted);
                });
            });
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                List <string> jobsToWaitOn = new List <string>();
                List <JobBase> finalJobs   = new List <JobBase>();

                object castedObj;
                if (GetCastedObjFromPSObj <JobBase>(Job, out castedObj))
                {
                    JobBase justJob = castedObj as JobBase;
                    jobsToWaitOn.Add(justJob.JobId);
                }
                else if (GetCastedObjFromPSObj <List <JobBase> >(Job, out castedObj))
                {
                    List <JobBase> jobsList = castedObj as List <JobBase>;
                    foreach (var job in jobsList)
                    {
                        jobsToWaitOn.Add(job.JobId);
                    }
                }
                else if (Job.GetType() == typeof(System.Object[]))
                {
                    System.Object[] castedJobsList = Job as System.Object[];
                    object castedJob;
                    foreach (var job in castedJobsList)
                    {
                        if (GetCastedObjFromPSObj <JobBase>(job, out castedJob))
                        {
                            jobsToWaitOn.Add((castedJob as JobBase).JobId);
                        }
                        else
                        {
                            throw new Exception(string.Format(Resources.JobWaitJobInvalidInput,
                                                              Job.GetType().FullName));
                        }
                    }
                }
                else
                {
                    // not a valid object. throw exception.
                    throw new Exception(string.Format(Resources.JobWaitJobInvalidInput,
                                                      Job.GetType().FullName));
                }

                // now wait until timeout happens or all jobs complete execution
                DateTime waitBeginning = DateTime.UtcNow;

                while (true)
                {
                    if (Timeout.HasValue)
                    {
                        if (DateTime.UtcNow.Subtract(waitBeginning) >=
                            TimeSpan.FromSeconds(Timeout.Value))
                        {
                            break;
                        }
                    }

                    bool hasUnfinishedJob = false;
                    finalJobs.Clear();
                    for (int i = 0; i < jobsToWaitOn.Count; i++)
                    {
                        string jobId   = jobsToWaitOn[i];
                        var updatedJob = JobConversions.GetPSJob(
                            ServiceClientAdapter.GetJob(jobId)
                            );

                        if (IsJobInProgress(updatedJob))
                        {
                            hasUnfinishedJob = true;
                        }
                        else
                        {
                            // removing finished job from list
                            jobsToWaitOn.RemoveAt(i);
                            i--;
                        }

                        finalJobs.Add(updatedJob);
                    }

                    if (!hasUnfinishedJob)
                    {
                        break;
                    }

                    // sleep for 30 seconds before checking again
                    TestMockSupport.Delay(30 * 1000);
                }

                WriteObject(finalJobs, enumerateCollection: true);
            });
        }
 public UnitOfWork()
 {
     _adapter = new ServiceClientAdapter();
     _client = _adapter.Connect();
 }