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

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

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

                var cancelResponse = ServiceClientAdapter.CancelJob(JobId);

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

                if (operationStatus.Response.StatusCode != HttpStatusCode.NoContent)
                {
                    throw new Exception(string.Format(Resources.JobCouldNotCancelJob,
                                                      cancelResponse.Response.StatusCode.ToString()));
                }
                else
                {
                    WriteObject(JobConversions.GetPSJob(ServiceClientAdapter.GetJob(JobId)));
                }
            });
        }
 /// <summary>
 /// Get the job PS model after fetching the job object from the service given the job ID.
 /// </summary>
 /// <param name="jobId">ID of the job to be fetched</param>
 /// <returns></returns>
 public CmdletModel.JobBase GetJobObject(string jobId, string vaultName = null, string resourceGroupName = null)
 {
     return(JobConversions.GetPSJob(ServiceClientAdapter.GetJob(
                                        jobId,
                                        vaultName: vaultName,
                                        resourceGroupName: resourceGroupName)));
 }
        /// <summary>
        /// Get the job PS model after fetching the job object from the service given the job ID.
        /// </summary>
        /// <param name="jobId">ID of the job to be fetched</param>
        /// <returns></returns>
        public CmdletModel.JobBase GetCrrJobObject(string secondaryRegion, string vaultId, string jobId)
        {
            CrrModel.CrrJobRequest jobRequest = new CrrModel.CrrJobRequest();
            jobRequest.JobName    = jobId;
            jobRequest.ResourceId = vaultId;

            JobBase job = JobConversions.GetPSJobCrr(ServiceClientAdapter.GetCRRJobDetails(
                                                         secondaryRegion,
                                                         jobRequest));

            return(job);
        }
        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));
            });
        }
Ejemplo n.º 5
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"));
        }
        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));
                }
            });
        }
        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();

                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);
            });
        }
 /// <summary>
 /// Get the job PS model after fetching the job object from the service given the job ID.
 /// </summary>
 /// <param name="jobId">ID of the job to be fetched</param>
 /// <returns></returns>
 public CmdletModel.JobBase GetJobObject(string jobId)
 {
     return(JobConversions.GetPSJob(ServiceClientAdapter.GetJob(jobId)));
 }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

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

                // initialize values to default
                DateTime rangeStart = DateTime.UtcNow.AddDays(-1);
                DateTime rangeEnd   = DateTime.UtcNow;

                if (From.HasValue)
                {
                    rangeStart = From.Value;
                }

                if (!From.HasValue && To.HasValue)
                {
                    throw new Exception(Resources.JobFromNotProvided);
                }

                if (To.HasValue)
                {
                    rangeEnd = To.Value;
                }

                if (rangeStart.Kind != DateTimeKind.Utc || rangeEnd.Kind != DateTimeKind.Utc)
                {
                    throw new Exception(Resources.JobTimeFiltersShouldBeSpecifiedInUtc);
                }

                // validate filters
                if (rangeEnd <= rangeStart)
                {
                    throw new Exception(Resources.JobToShouldBeGreaterThanFrom);
                }
                else if (rangeEnd.Subtract(rangeStart) > TimeSpan.FromDays(30))
                {
                    throw new Exception(Resources.JobAllowedDateTimeRangeExceeded);
                }
                else if (rangeStart > DateTime.UtcNow)
                {
                    throw new Exception(Resources.JobStartTimeShouldBeLessThanCurrent);
                }

                // validate JobId and Job objects
                if (!string.IsNullOrEmpty(JobId))
                {
                    // if JobId and Job are provided together and they don't match then throw exception
                    if (Job != null && JobId != Job.JobId)
                    {
                        throw new Exception(Resources.JobJobIdAndJobMismatch);
                    }
                }
                else if (Job != null)
                {
                    JobId = Job.JobId;
                }

                List <JobBase> result = new List <JobBase>();

                WriteDebug(string.Format("Filters provided are: StartTime - {0} " +
                                         "EndTime - {1} Status - {2} Operation - {3} Type - {4} UseSecondaryRegion - {5}",
                                         From,
                                         To,
                                         Status,
                                         Operation,
                                         BackupManagementType,
                                         UseSecondaryRegion.ToString()));

                int resultCount = 0;

                if (UseSecondaryRegion.IsPresent)
                {
                    ARSVault vault         = ServiceClientAdapter.GetVault(resourceGroupName, vaultName);
                    string secondaryRegion = BackupUtils.regionMap[vault.Location];

                    WriteDebug(" Getting CRR jobs from secondary region: " + secondaryRegion);
                    var adapterResponse = ServiceClientAdapter.GetCrrJobs(VaultId,
                                                                          JobId,
                                                                          ServiceClientHelpers.GetServiceClientJobStatus(Status),
                                                                          Operation.ToString(),
                                                                          rangeStart,
                                                                          rangeEnd,
                                                                          ServiceClientHelpers.GetServiceClientBackupManagementType(BackupManagementType),
                                                                          secondaryRegion);

                    JobConversions.AddServiceClientJobsToPSList(
                        adapterResponse, result, ref resultCount);
                }
                else
                {
                    var adapterResponse = ServiceClientAdapter.GetJobs(
                        JobId,
                        ServiceClientHelpers.GetServiceClientJobStatus(Status),
                        Operation.ToString(),
                        rangeStart,
                        rangeEnd,
                        ServiceClientHelpers.GetServiceClientBackupManagementType(
                            BackupManagementType),
                        vaultName: vaultName,
                        resourceGroupName: resourceGroupName);

                    JobConversions.AddServiceClientJobsToPSList(
                        adapterResponse, result, ref resultCount);
                }

                WriteDebug("Number of jobs fetched: " + result.Count);
                WriteObject(result, enumerateCollection: true);
            });
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                // initialize values to default
                DateTime rangeStart = DateTime.UtcNow.AddDays(-1);
                DateTime rangeEnd   = DateTime.UtcNow;

                if (From.HasValue)
                {
                    rangeStart = From.Value;
                }

                if (!From.HasValue && To.HasValue)
                {
                    throw new Exception(Resources.JobFromNotProvided);
                }

                if (To.HasValue)
                {
                    rangeEnd = To.Value;
                }

                if (rangeStart.Kind != DateTimeKind.Utc || rangeEnd.Kind != DateTimeKind.Utc)
                {
                    throw new Exception(Resources.JobTimeFiltersShouldBeSpecifiedInUtc);
                }

                // validate filters
                if (rangeEnd <= rangeStart)
                {
                    throw new Exception(Resources.JobToShouldBeGreaterThanFrom);
                }
                else if (rangeEnd.Subtract(rangeStart) > TimeSpan.FromDays(30))
                {
                    throw new Exception(Resources.JobAllowedDateTimeRangeExceeded);
                }

                // validate JobId and Job objects
                if (!string.IsNullOrEmpty(JobId))
                {
                    // if JobId and Job are provided together and they don't match then throw exception
                    if (Job != null && JobId != Job.JobId)
                    {
                        throw new Exception(Resources.JobJobIdAndJobMismatch);
                    }
                }
                else if (Job != null)
                {
                    JobId = Job.JobId;
                }

                List <JobBase> result = new List <JobBase>();

                WriteDebug(string.Format("Filters provided are: StartTime - {0} " +
                                         "EndTime - {1} Status - {2} Operation - {3} Type - {4}",
                                         From,
                                         To,
                                         Status,
                                         Operation,
                                         BackupManagementType));

                int resultCount     = 0;
                var adapterResponse = ServiceClientAdapter.GetJobs(JobId,
                                                                   Status.HasValue ? Status.ToString() : null,
                                                                   Operation.HasValue ? Operation.ToString() : null,
                                                                   rangeStart,
                                                                   rangeEnd,
                                                                   BackupManagementType.HasValue ?
                                                                   Helpers.JobConversions.GetJobTypeForService(BackupManagementType.Value) : null);
                JobConversions.AddServiceClientJobsToPSList(adapterResponse, result, ref resultCount);

                while (!string.IsNullOrEmpty(adapterResponse.ItemList.NextLink))
                {
                    if (resultCount >= JobConstants.MaximumJobsToFetch)
                    {
                        // trace a warning that there are more jobs and user has to refine filters.
                        WriteWarning(Resources.JobRefineFilters);
                        break;
                    }

                    string skipToken;
                    ServiceClientHelpers.GetSkipTokenFromNextLink(
                        adapterResponse.ItemList.NextLink, out skipToken);
                    if (skipToken != null)
                    {
                        adapterResponse = ServiceClientAdapter.GetJobs(JobId,
                                                                       Status.HasValue ? Status.ToString() : null,
                                                                       Operation.HasValue ? Operation.ToString() : null,
                                                                       rangeStart,
                                                                       rangeEnd,
                                                                       BackupManagementType.HasValue ?
                                                                       Helpers.JobConversions.GetJobTypeForService(BackupManagementType.Value) : null,
                                                                       null,
                                                                       skipToken);
                        JobConversions.AddServiceClientJobsToPSList(adapterResponse, result, ref resultCount);
                    }
                    else
                    {
                        break;
                    }
                }

                WriteDebug("Number of jobs fetched: " + result.Count);
                WriteObject(result, enumerateCollection: true);
            });
        }
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

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

                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(object[]))
                {
                    object[] castedJobsList = Job as 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,
                                vaultName: vaultName,
                                resourceGroupName: resourceGroupName));

                        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
                    string testMode = Environment.GetEnvironmentVariable("AZURE_TEST_MODE");

                    if (!TestMockSupport.RunningMocked)
                    {
                        TestMockSupport.Delay(30 * 1000);
                    }
                    if (String.Compare(testMode, "Record", StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        Thread.Sleep(30000);
                    }
                }

                WriteObject(finalJobs, enumerateCollection: true);
            });
        }
Ejemplo n.º 13
0
        public override void ExecuteCmdlet()
        {
            ExecutionBlock(() =>
            {
                base.ExecuteCmdlet();

                // initialize values to default
                DateTime rangeStart = DateTime.UtcNow.AddDays(-1);
                DateTime rangeEnd   = DateTime.UtcNow;

                if (From.HasValue)
                {
                    rangeStart = From.Value;
                }

                if (!From.HasValue && To.HasValue)
                {
                    throw new Exception(Resources.JobFromNotProvided);
                }

                if (To.HasValue)
                {
                    rangeEnd = To.Value;
                }

                if (rangeStart.Kind != DateTimeKind.Utc || rangeEnd.Kind != DateTimeKind.Utc)
                {
                    throw new Exception(Resources.JobTimeFiltersShouldBeSpecifiedInUtc);
                }

                // validate filters
                if (rangeEnd <= rangeStart)
                {
                    throw new Exception(Resources.JobToShouldBeGreaterThanFrom);
                }
                else if (rangeEnd.Subtract(rangeStart) > TimeSpan.FromDays(30))
                {
                    throw new Exception(Resources.JobAllowedDateTimeRangeExceeded);
                }
                else if (rangeStart > DateTime.UtcNow)
                {
                    throw new Exception(Resources.JobStartTimeShouldBeLessThanCurrent);
                }

                // validate JobId and Job objects
                if (!string.IsNullOrEmpty(JobId))
                {
                    // if JobId and Job are provided together and they don't match then throw exception
                    if (Job != null && JobId != Job.JobId)
                    {
                        throw new Exception(Resources.JobJobIdAndJobMismatch);
                    }
                }
                else if (Job != null)
                {
                    JobId = Job.JobId;
                }

                List <JobBase> result = new List <JobBase>();

                WriteDebug(string.Format("Filters provided are: StartTime - {0} " +
                                         "EndTime - {1} Status - {2} Operation - {3} Type - {4}",
                                         From,
                                         To,
                                         Status,
                                         Operation,
                                         BackupManagementType));

                int resultCount = 0;

                ServiceClientModel.JobStatus?jobStatus = null;
                jobStatus = Status.HasValue ? (Status.ToEnum <ServiceClientModel.JobStatus>())
                            : default(ServiceClientModel.JobStatus?);

                var adapterResponse = ServiceClientAdapter.GetJobs(JobId,
                                                                   Status.HasValue ? Status.ToEnum <ServiceClientModel.JobStatus>() :
                                                                   default(ServiceClientModel.JobStatus?),
                                                                   Operation.ToString(),
                                                                   rangeStart,
                                                                   rangeEnd,
                                                                   ServiceClientHelpers.GetServiceClientBackupManagementType(
                                                                       BackupManagementType));

                JobConversions.AddServiceClientJobsToPSList(
                    adapterResponse, result, ref resultCount);

                WriteDebug("Number of jobs fetched: " + result.Count);
                WriteObject(result, enumerateCollection: true);
            });
        }