/// <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); }
/// <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)); } }
/// <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; }
/// <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); }
/// <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)); }
/// <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); }
/// <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); } }
/// <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()); }