Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 3
0
        /// <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);
        }