private bool IsBlocked(JobBlockingPolicy policy, IMappedTenantJob mappedTenantJob) { var job = mappedTenantJob.TenantJob; switch (policy) { case JobBlockingPolicy.BlockNone: return(false); case JobBlockingPolicy.BlockAllJobs: case JobBlockingPolicy.BlockAllNewJobs: return(true); case JobBlockingPolicy.BlockNewMaintenanceJob: return(job.IsRepairJobType()); case JobBlockingPolicy.BlockNewUpdateJob: return(job.IsUpdateJobType()); case JobBlockingPolicy.BlockNewImpactfulTenantUpdateJobs: return(job.IsTenantUpdateJobType() && (mappedTenantJob.ImpactedNodeCount > 0)); case JobBlockingPolicy.BlockNewImpactfulPlatformUpdateJobs: return(job.IsPlatformUpdateJobType() && (mappedTenantJob.ImpactedNodeCount > 0)); case JobBlockingPolicy.BlockNewImpactfulUpdateJobs: return(job.IsUpdateJobType() && (mappedTenantJob.ImpactedNodeCount > 0)); } traceType.WriteError("Invalid value for job blocking policy. Not approving any job till this is resolved. Policy: {0}", policy); return(true); }
private void ApplyActionPolicy(IMappedTenantJob job, ActionType actionType) { if (job.AllowedActions.HasFlag(actionType)) { var jobType = job.TenantJob.GetImpactAction(); // e.g. Azure.AutoExecute.TenantUpdate=false string configKey = Constants.ConfigKeys.AutoActionTypeHandlingFormat.ToString(actionType, jobType); if (!this.config.ReadConfigValue(configKey, true)) { traceType.WriteInfo( "Job {0}: automated processing of {1} action for {2} jobs is disallowed by configuration ({3})", job.Id, actionType, jobType, configKey); job.DenyActions(this.traceType, actionType); } } }
/// <summary> /// Tenant job summary for display purposes /// </summary> public static JobSummary GetSummary(this IMappedTenantJob mappedTenantJob) { if (mappedTenantJob == null) { return(null); } var jobId = mappedTenantJob.Id; var tenantJob = mappedTenantJob.TenantJob; var summary = new JobSummary { Id = jobId, ContextId = tenantJob.ContextStringGivenByTenant, JobStatus = tenantJob.JobStatus.ToString(), ImpactAction = tenantJob.GetImpactAction().ToString(), RoleInstancesToBeImpacted = tenantJob.RoleInstancesToBeImpacted ?? new List <string>(), CurrentUD = tenantJob.GetJobUD(), RepairTasks = mappedTenantJob.MatchedTasks, CorrelationId = tenantJob.CorrelationId, }; if (tenantJob.JobStep == null || tenantJob.JobStep.CurrentlyImpactedRoleInstances == null) { return(summary); } summary.AcknowledgementStatus = tenantJob.JobStep.AcknowledgementStatus.ToString(); summary.DeadlineForResponse = tenantJob.JobStep.DeadlineForResponse; summary.ActionStatus = tenantJob.JobStep.ActionStatus.ToString(); summary.ImpactStep = tenantJob.JobStep.ImpactStep.ToString(); foreach (var roleInstance in tenantJob.JobStep.CurrentlyImpactedRoleInstances) { var impactedRoleInstance = new ImpactedRoleInstance { Name = roleInstance.RoleInstanceName, UD = roleInstance.UpdateDomain.ToString(), }; if (roleInstance.ExpectedImpact != null) { var affectedResourceImpact = roleInstance.ExpectedImpact; if (affectedResourceImpact != null && affectedResourceImpact.ListOfImpactTypes != null) { impactedRoleInstance.ImpactTypes = affectedResourceImpact .ListOfImpactTypes.Select(e => e.ToString()) .ToList(); } } summary.CurrentlyImpactedRoleInstances.Add(impactedRoleInstance); } summary.PendingActions = mappedTenantJob.PendingActions.ToString(); summary.AllowedActions = mappedTenantJob.AllowedActions.ToString(); summary.IsActive = mappedTenantJob.IsActive; if (mappedTenantJob.ImpactedNodeCount >= 0) { summary.ImpactedNodeCount = mappedTenantJob.ImpactedNodeCount; } return(summary); }