Files
portainer/api/stacks/stackutils/stack_status.go

62 lines
2.3 KiB
Go

package stackutils
import (
"time"
portainer "github.com/portainer/portainer/api"
)
// PrepareStackStatusForDeployment transitions a stack into the deploying state before a deployment begins.
// It saves the current status in DeploymentStartStatus so that pre-deployment actions can be determined
// (e.g. whether to undeploy before redeploying), sets Status to StackStatusDeploying, and resets the
// DeploymentStatus history with a single deploying entry.
func PrepareStackStatusForDeployment(stack *portainer.Stack) {
stack.DeploymentStartStatus = stack.Status
stack.Status = portainer.StackStatusDeploying
stack.DeploymentStatus = []portainer.StackDeploymentStatus{
{Status: portainer.StackStatusDeploying, Time: time.Now().Unix()},
}
}
// UpdateStackStatusFromDeploymentResult updates a stack's status after a deployment attempt completes.
// On success (err == nil) the stack is marked active; on failure it is marked as errored with the error message recorded.
func UpdateStackStatusFromDeploymentResult(stack *portainer.Stack, err error) {
if err != nil {
stack.Status = portainer.StackStatusError
stack.DeploymentStatus = append(stack.DeploymentStatus, portainer.StackDeploymentStatus{
Status: portainer.StackStatusError,
Time: time.Now().Unix(),
Message: err.Error(),
})
return
}
stack.Status = portainer.StackStatusActive
stack.DeploymentStatus = append(stack.DeploymentStatus, portainer.StackDeploymentStatus{
Status: portainer.StackStatusActive,
Time: time.Now().Unix(),
})
}
// UpdateStackStatusFromUndeploymentResult updates a stack's status after an undeployment attempt completes.
// On success (err == nil) the stack is marked inactive; on failure it is marked as errored with the error message recorded.
func UpdateStackStatusFromUndeploymentResult(stack *portainer.Stack, err error) {
if err != nil {
stack.Status = portainer.StackStatusError
stack.DeploymentStatus = append(stack.DeploymentStatus, portainer.StackDeploymentStatus{
Status: portainer.StackStatusError,
Time: time.Now().Unix(),
Message: err.Error(),
})
return
}
stack.Status = portainer.StackStatusInactive
stack.DeploymentStatus = append(stack.DeploymentStatus, portainer.StackDeploymentStatus{
Status: portainer.StackStatusInactive,
Time: time.Now().Unix(),
})
}