Пример #1
0
        /// <summary>
        /// List job collection.
        /// </summary>
        /// <param name="resourceGroupName">Name of the resource group.</param>
        /// <param name="jobCollectionName">Name of the job collection.</param>
        /// <returns>List of job collection.</returns>
        internal IList <JobCollectionDefinition> ListJobCollection(string resourceGroupName = null, string jobCollectionName = null)
        {
            IList <JobCollectionDefinition> jobCollectionsDefinition;

            if (!string.IsNullOrWhiteSpace(resourceGroupName) && !string.IsNullOrWhiteSpace(jobCollectionName))
            {
                JobCollectionDefinition jobCollectionDefinition = this.SchedulerManagementClient.JobCollections.Get(resourceGroupName, jobCollectionName);
                jobCollectionsDefinition = new List <JobCollectionDefinition>()
                {
                    jobCollectionDefinition
                };
            }
            else if (!string.IsNullOrWhiteSpace(resourceGroupName))
            {
                jobCollectionsDefinition = this.ListJobCollectionsByResourceGroupName(resourceGroupName);
            }
            else
            {
                jobCollectionsDefinition = this.ListJobCollectionsBySubscription();

                if (!string.IsNullOrWhiteSpace(jobCollectionName))
                {
                    jobCollectionsDefinition = jobCollectionsDefinition.Where((jobCollectionDefinition) => jobCollectionDefinition.Name.Equals(jobCollectionName, StringComparison.InvariantCultureIgnoreCase)).ToList();
                }
            }

            return(jobCollectionsDefinition);
        }
Пример #2
0
        /// <summary>
        /// Validates whether max job count supported by chosen plan.
        /// </summary>
        /// <param name="jobCollection">Job collection name.</param>
        /// <param name="numberOfJobs">Requested maximum number of jobs.</param>
        private void Validate(JobCollectionDefinition jobCollection, int numberOfJobs)
        {
            int maxJobCount = 0;

            if (jobCollection != null &&
                jobCollection.Properties != null)
            {
                if (jobCollection.Properties.Quota != null &&
                    jobCollection.Properties.Quota.MaxJobCount != null)
                {
                    maxJobCount = jobCollection.Properties.Quota.MaxJobCount.Value;
                }
                else if (jobCollection.Properties.Sku != null &&
                         jobCollection.Properties.Sku.Name != null)
                {
                    switch (jobCollection.Properties.Sku.Name.Value)
                    {
                    case SkuDefinition.Free:
                        maxJobCount = Constants.MaxJobCountQuotaFree;
                        break;

                    case SkuDefinition.Standard:
                        maxJobCount = Constants.MaxJobCountQuotaStandard;
                        break;

                    case SkuDefinition.P10Premium:
                        maxJobCount = Constants.MaxJobCountQuotaP10Premium;
                        break;

                    case SkuDefinition.P20Premium:
                        maxJobCount = Constants.MaxJobCountQuotaP20Premium;
                        break;
                    }
                }
            }

            if (numberOfJobs >= maxJobCount)
            {
                throw new PSManagement.PSArgumentException(string.Format(Resources.JobCollectionReachedQuota, maxJobCount));
            }
        }
Пример #3
0
        /// <summary>
        /// Convert collection of JobCollectionDefintion result to collection of powershell PSJobCollectionDefinition.
        /// </summary>
        /// <param name="jobCollectionDefinition">Collection of job collection definition.</param>
        /// <returns>Collection of PowerShell job collection definition.</returns>
        internal static PSJobCollectionDefinition ConvertJobCollectionDefinitionToPS(JobCollectionDefinition jobCollectionDefinition)
        {
            if (jobCollectionDefinition == null)
            {
                throw new ArgumentNullException(paramName: "jobCollectionDefinition");
            }

            var psJobCollectionDefinition = new PSJobCollectionDefinition()
            {
                ResourceGroupName = jobCollectionDefinition.Id.Split('/')[4],
                JobCollectionName = jobCollectionDefinition.Name,
                Location = jobCollectionDefinition.Location,
                Plan = jobCollectionDefinition.Properties.Sku.Name.ToString(),
                MaxJobCount = jobCollectionDefinition.Properties.Quota.MaxJobCount.ToString(),
                MaxRecurrence = Converter.GetMaxRecurrenceInString(jobCollectionDefinition.Properties.Quota),
                State = jobCollectionDefinition.Properties.State.ToString(),
                Uri = jobCollectionDefinition.Id,
            };

            return psJobCollectionDefinition;
        }
Пример #4
0
        /// <summary>
        /// Convert collection of JobCollectionDefintion result to collection of powershell PSJobCollectionDefinition.
        /// </summary>
        /// <param name="jobCollectionDefinition">Collection of job collection definition.</param>
        /// <returns>Collection of PowerShell job collection definition.</returns>
        internal static PSJobCollectionDefinition ConvertJobCollectionDefinitionToPS(JobCollectionDefinition jobCollectionDefinition)
        {
            if (jobCollectionDefinition == null)
            {
                throw new ArgumentNullException(paramName: "jobCollectionDefinition");
            }

            var psJobCollectionDefinition = new PSJobCollectionDefinition()
            {
                ResourceGroupName = jobCollectionDefinition.Id.Split('/')[4],
                JobCollectionName = jobCollectionDefinition.Name,
                Location          = jobCollectionDefinition.Location,
                Plan          = jobCollectionDefinition.Properties.Sku.Name.ToString(),
                MaxJobCount   = jobCollectionDefinition.Properties.Quota.MaxJobCount.ToString(),
                MaxRecurrence = Converter.GetMaxRecurrenceInString(jobCollectionDefinition.Properties.Quota),
                State         = jobCollectionDefinition.Properties.State.ToString(),
                Uri           = jobCollectionDefinition.Id,
            };

            return(psJobCollectionDefinition);
        }
Пример #5
0
        /// <summary>
        /// Create job collection.
        /// </summary>
        /// <param name="createJobCollectionParams">Job collection properties entered by user via Powershell.</param>
        /// <returns>Job collection definition.</returns>
        public PSJobCollectionDefinition CreateJobCollection(PSJobCollectionsParams createJobCollectionParams)
        {
            if (string.IsNullOrWhiteSpace(createJobCollectionParams.ResourceGroupName))
            {
                throw new PSArgumentNullException(paramName: "ResourceGroupName");
            }

            if (string.IsNullOrWhiteSpace(createJobCollectionParams.JobCollectionName))
            {
                throw new PSArgumentNullException(paramName: "JobCollectionName");
            }

            if (string.IsNullOrWhiteSpace(createJobCollectionParams.Region))
            {
                throw new PSArgumentNullException(paramName: "Region");
            }

            if (!DoesResourceGroupExists(createJobCollectionParams.ResourceGroupName))
            {
                throw new PSArgumentException(Resources.SchedulerInvalidResourceGroup);
            }

            if (!this.AvailableRegions.Contains(createJobCollectionParams.Region))
            {
                throw new PSArgumentException(Resources.SchedulerInvalidLocation);
            }

            if (HasJobCollection(createJobCollectionParams.ResourceGroupName, createJobCollectionParams.JobCollectionName))
            {
                throw new PSInvalidOperationException(string.Format(Resources.SchedulerExistingJobCollection, createJobCollectionParams.JobCollectionName, createJobCollectionParams.ResourceGroupName));
            }

            var skuDefinition = createJobCollectionParams.Plan.GetValueOrDefaultEnum <SkuDefinition>(defaultValue: SkuDefinition.Standard);

            if (skuDefinition == SkuDefinition.Free &&
                HasFreeJobCollection())
            {
                throw new PSInvalidOperationException(Resources.SchedulerNoMoreFreeJobCollection);
            }

            var quota = new JobCollectionQuota();

            this.PopulateJobCollectionQuota(quota, skuDefinition, createJobCollectionParams, newQuota: true);

            var jcProperties = new JobCollectionProperties()
            {
                Sku   = new Sku(skuDefinition),
                Quota = quota,
            };

            var jobCollectionDefinition = new JobCollectionDefinition()
            {
                Location   = createJobCollectionParams.Region,
                Name       = createJobCollectionParams.JobCollectionName,
                Properties = jcProperties,
            };

            var jobCollectionDefinitionResult = this.SchedulerManagementClient.JobCollections.CreateOrUpdate(
                createJobCollectionParams.ResourceGroupName,
                createJobCollectionParams.JobCollectionName,
                jobCollectionDefinition);

            return(Converter.ConvertJobCollectionDefinitionToPS(jobCollectionDefinitionResult));
        }
Пример #6
0
        /// <summary>
        /// Updates job collection.
        /// </summary>
        /// <param name="updateJobCollectionParams">Job collection properties to update.</param>
        /// <returns>Job collection definition.</returns>
        public PSJobCollectionDefinition UpdateJobCollection(PSJobCollectionsParams updateJobCollectionParams)
        {
            if (string.IsNullOrWhiteSpace(updateJobCollectionParams.ResourceGroupName))
            {
                throw new PSArgumentNullException(paramName: "ResourceGroupName");
            }

            if (string.IsNullOrWhiteSpace(updateJobCollectionParams.JobCollectionName))
            {
                throw new PSArgumentNullException(paramName: "JobCollectionName");
            }

            if (!string.IsNullOrWhiteSpace(updateJobCollectionParams.Region) &&
                !this.AvailableRegions.Contains(updateJobCollectionParams.Region))
            {
                throw new PSArgumentException(Resources.SchedulerInvalidLocation);
            }

            IList <JobCollectionDefinition> jobCollectionsDefition = this.ListJobCollection(
                updateJobCollectionParams.ResourceGroupName,
                updateJobCollectionParams.JobCollectionName);

            if (jobCollectionsDefition == null)
            {
                throw new PSArgumentException(
                          string.Format(Resources.JobCollectionDoesnotExist, updateJobCollectionParams.ResourceGroupName, updateJobCollectionParams.JobCollectionName));
            }

            JobCollectionDefinition jobCollectionDefinition = jobCollectionsDefition[0];

            if (jobCollectionDefinition.Properties.Sku.Name != SkuDefinition.Free &&
                !string.IsNullOrWhiteSpace(updateJobCollectionParams.Plan) &&
                updateJobCollectionParams.Plan.Equals(Constants.FreePlan, StringComparison.InvariantCultureIgnoreCase) &&
                this.HasFreeJobCollection())
            {
                throw new PSInvalidOperationException(Resources.SchedulerNoMoreFreeJobCollection);
            }

            JobCollectionQuota quota = jobCollectionDefinition.Properties.Quota;

            SkuDefinition skuDefinition = jobCollectionDefinition.Properties.Sku.Name.Value;
            bool          newQuota      = false;

            if (!string.IsNullOrWhiteSpace(updateJobCollectionParams.Plan))
            {
                skuDefinition = updateJobCollectionParams.Plan.GetValueOrDefaultEnum <SkuDefinition>(defaultValue: SkuDefinition.Standard);
                newQuota      = true;
            }

            this.PopulateJobCollectionQuota(quota, skuDefinition, updateJobCollectionParams, newQuota);

            var jcProperties = new JobCollectionProperties()
            {
                Sku   = new Sku(skuDefinition),
                Quota = quota,
            };


            jobCollectionDefinition.Location   = updateJobCollectionParams.Region != null ? updateJobCollectionParams.Region : jobCollectionDefinition.Location;
            jobCollectionDefinition.Properties = jcProperties;

            var jobCollectionDefinitionResult = this.SchedulerManagementClient.JobCollections.CreateOrUpdate(
                updateJobCollectionParams.ResourceGroupName,
                updateJobCollectionParams.JobCollectionName,
                jobCollectionDefinition);

            return(Converter.ConvertJobCollectionDefinitionToPS(jobCollectionDefinitionResult));
        }
        /// <summary>
        /// Create job collection.
        /// </summary>
        /// <param name="createJobCollectionParams">Job collection properties entered by user via Powershell.</param>
        /// <returns>Job collection definition.</returns>
        public PSJobCollectionDefinition CreateJobCollection(PSJobCollectionsParams createJobCollectionParams)
        {
            if (string.IsNullOrWhiteSpace(createJobCollectionParams.ResourceGroupName))
            {
                throw new PSArgumentNullException(paramName: "ResourceGroupName");
            }

            if (string.IsNullOrWhiteSpace(createJobCollectionParams.JobCollectionName))
            {
                throw new PSArgumentNullException(paramName: "JobCollectionName");
            }

            if (string.IsNullOrWhiteSpace(createJobCollectionParams.Region))
            {
                throw new PSArgumentNullException(paramName: "Region");
            }

            if (!DoesResourceGroupExists(createJobCollectionParams.ResourceGroupName))
            {
                throw new PSArgumentException(Resources.SchedulerInvalidResourceGroup);
            }

            if (!this.AvailableRegions.Contains(createJobCollectionParams.Region))
            {
                throw new PSArgumentException(Resources.SchedulerInvalidLocation);
            }

            if (HasJobCollection(createJobCollectionParams.ResourceGroupName, createJobCollectionParams.JobCollectionName))
            {
                throw new PSInvalidOperationException(string.Format(Resources.SchedulerExistingJobCollection, createJobCollectionParams.JobCollectionName, createJobCollectionParams.ResourceGroupName));
            }

            var skuDefinition = createJobCollectionParams.Plan.GetValueOrDefaultEnum<SkuDefinition>(defaultValue: SkuDefinition.Standard);

            if (skuDefinition == SkuDefinition.Free &&
                HasFreeJobCollection())
            {
                throw new PSInvalidOperationException(Resources.SchedulerNoMoreFreeJobCollection);
            }

            var quota = new JobCollectionQuota();

            this.PopulateJobCollectionQuota(quota, skuDefinition, createJobCollectionParams, newQuota: true);

            var jcProperties = new JobCollectionProperties()
            {
                Sku = new Sku(skuDefinition),
                Quota = quota,
            };

            var jobCollectionDefinition = new JobCollectionDefinition()
            {
                Location = createJobCollectionParams.Region,
                Name = createJobCollectionParams.JobCollectionName,
                Properties = jcProperties,
            };

            var jobCollectionDefinitionResult = this.SchedulerManagementClient.JobCollections.CreateOrUpdate(
                createJobCollectionParams.ResourceGroupName,
                createJobCollectionParams.JobCollectionName,
                jobCollectionDefinition);

            return Converter.ConvertJobCollectionDefinitionToPS(jobCollectionDefinitionResult);
        }
Пример #8
0
 /// <summary>
 /// Patches an existing job collection.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The resource group name.
 /// </param>
 /// <param name='jobCollectionName'>
 /// The job collection name.
 /// </param>
 /// <param name='jobCollection'>
 /// The job collection definition.
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <JobCollectionDefinition> PatchAsync(this IJobCollectionsOperations operations, string resourceGroupName, string jobCollectionName, JobCollectionDefinition jobCollection, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.PatchWithHttpMessagesAsync(resourceGroupName, jobCollectionName, jobCollection, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
Пример #9
0
 /// <summary>
 /// Patches an existing job collection.
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='resourceGroupName'>
 /// The resource group name.
 /// </param>
 /// <param name='jobCollectionName'>
 /// The job collection name.
 /// </param>
 /// <param name='jobCollection'>
 /// The job collection definition.
 /// </param>
 public static JobCollectionDefinition Patch(this IJobCollectionsOperations operations, string resourceGroupName, string jobCollectionName, JobCollectionDefinition jobCollection)
 {
     return(Task.Factory.StartNew(s => ((IJobCollectionsOperations)s).PatchAsync(resourceGroupName, jobCollectionName, jobCollection), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }
        /// <summary>
        /// Validates whether max job count supported by chosen plan.
        /// </summary>
        /// <param name="jobCollection">Job collection name.</param>
        /// <param name="numberOfJobs">Requested maximum number of jobs.</param>
        private void Validate(JobCollectionDefinition jobCollection, int numberOfJobs)
        {
            int maxJobCount = 0;

            if (jobCollection != null &&
                jobCollection.Properties != null)
            {
                if (jobCollection.Properties.Quota != null &&
                    jobCollection.Properties.Quota.MaxJobCount != null)
                {
                    maxJobCount = jobCollection.Properties.Quota.MaxJobCount.Value;
                }
                else if (jobCollection.Properties.Sku != null &&
                        jobCollection.Properties.Sku.Name != null)
                {
                    switch (jobCollection.Properties.Sku.Name.Value)
                    {
                        case SkuDefinition.Free:
                            maxJobCount = Constants.MaxJobCountQuotaFree;
                            break;

                        case SkuDefinition.Standard:
                            maxJobCount = Constants.MaxJobCountQuotaStandard;
                            break;

                        case SkuDefinition.P10Premium:
                            maxJobCount = Constants.MaxJobCountQuotaP10Premium;
                            break;

                        case SkuDefinition.P20Premium:
                            maxJobCount = Constants.MaxJobCountQuotaP20Premium;
                            break;
                    }
                }

            }

            if (numberOfJobs >= maxJobCount)
            {
                throw new PSManagement.PSArgumentException(string.Format(Resources.JobCollectionReachedQuota, maxJobCount));
            }
        }