Complete SCUM controlled deployment lifecycle
This commit is contained in:
@@ -58,6 +58,31 @@ func (svc *CoreService) projectLifecycleJobResult(job domain.Job, stamp time.Tim
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if plan := job.ExecutionInput.ServerDeploymentPlan; plan != nil {
|
||||
projection := domain.CopyServerDeploymentProjection(instance.DeploymentProjection)
|
||||
projection.Operation = plan.Operation
|
||||
projection.TemplateKey = plan.TemplateKey
|
||||
projection.TemplateVersion = plan.TemplateVersion
|
||||
projection.UpdatedAt = stamp
|
||||
if evidence := job.ExecutionResult.ServerDeploymentEvidence; evidence != nil {
|
||||
projection.State = "verified"
|
||||
projection.PreflightState = evidence.PreflightState
|
||||
projection.DiscoveryState = evidence.DiscoveryState
|
||||
projection.MappingState = evidence.MappingState
|
||||
projection.VerificationState = evidence.VerificationState
|
||||
projection.DiscoveredFacts = domain.CopyStringMap(evidence.DiscoveredFacts)
|
||||
projection.MappingResults = domain.CopyStringMap(evidence.MappingResults)
|
||||
projection.VerificationResults = domain.CopyStringMap(evidence.VerificationResults)
|
||||
projection.FailureCode = evidence.FailureCode
|
||||
}
|
||||
if job.State == domain.JobStateFailed || job.State == domain.JobStateCancelled {
|
||||
projection.State = "failed"
|
||||
if projection.FailureCode == "" && job.State == domain.JobStateCancelled {
|
||||
projection.FailureCode = "cancelled"
|
||||
}
|
||||
}
|
||||
instance.DeploymentProjection = projection
|
||||
}
|
||||
instance.State = nextState
|
||||
instance.UpdatedAt = stamp
|
||||
if err := validator.ValidateServerInstance(instance); err != nil {
|
||||
@@ -73,6 +98,36 @@ func (svc *CoreService) projectLifecycleJobResult(job domain.Job, stamp time.Tim
|
||||
return svc.recordAuditEvent("run:"+job.RunEndpointID, "lifecycle.result", "server-instance", instance.ID, auditResult, job.Progress.Message)
|
||||
}
|
||||
|
||||
func (svc *CoreService) projectServerDeploymentProgress(job domain.Job, stamp time.Time) error {
|
||||
plan := job.ExecutionInput.ServerDeploymentPlan
|
||||
if plan == nil || job.ServerInstanceID == "" {
|
||||
return nil
|
||||
}
|
||||
instance, err := svc.store.ServerInstances().Get(job.ServerInstanceID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
projection := domain.CopyServerDeploymentProjection(instance.DeploymentProjection)
|
||||
projection.State = "running"
|
||||
projection.Operation = plan.Operation
|
||||
projection.TemplateKey = plan.TemplateKey
|
||||
projection.TemplateVersion = plan.TemplateVersion
|
||||
switch job.Progress.Phase {
|
||||
case "preflight":
|
||||
projection.PreflightState = "running"
|
||||
case "scan", "discover", "discovery":
|
||||
projection.DiscoveryState = "running"
|
||||
case "install", "configure", "mapping":
|
||||
projection.MappingState = "running"
|
||||
case "start", "health":
|
||||
projection.VerificationState = "running"
|
||||
}
|
||||
projection.UpdatedAt = stamp
|
||||
instance.DeploymentProjection = projection
|
||||
instance.UpdatedAt = stamp
|
||||
return svc.store.ServerInstances().Update(instance)
|
||||
}
|
||||
|
||||
func lifecycleProjectedState(capability string, jobState domain.JobState) (domain.ServerInstanceState, bool) {
|
||||
if capability != domain.LifecycleCapabilityInstall && capability != domain.LifecycleCapabilityStart && capability != domain.LifecycleCapabilityStop {
|
||||
return "", false
|
||||
|
||||
Reference in New Issue
Block a user