This simplifies the deploy overview, to only show 3 version fields: - CURRENT DEPLOYMENT - CURRENT ENV - NEW DEPLOYMENT It also fixes a few errors around version detection Reviewed-on: #508 Co-authored-by: p4u1 <p4u1_f4u1@riseup.net> Co-committed-by: p4u1 <p4u1_f4u1@riseup.net>
99 lines
3.8 KiB
Go
99 lines
3.8 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"coopcloud.tech/abra/pkg/envfile"
|
|
"coopcloud.tech/abra/pkg/log"
|
|
composetypes "github.com/docker/cli/cli/compose/types"
|
|
)
|
|
|
|
// SetRecipeLabel adds the label 'coop-cloud.${STACK_NAME}.recipe=${RECIPE}' to the app container
|
|
// to signal which recipe is connected to the deployed app
|
|
func SetRecipeLabel(compose *composetypes.Config, stackName string, recipe string) {
|
|
for _, service := range compose.Services {
|
|
if service.Name == "app" {
|
|
log.Debugf("set recipe label 'coop-cloud.%s.recipe' to %s for %s", stackName, recipe, stackName)
|
|
labelKey := fmt.Sprintf("coop-cloud.%s.recipe", stackName)
|
|
service.Deploy.Labels[labelKey] = recipe
|
|
}
|
|
}
|
|
}
|
|
|
|
// SetChaosLabel adds the label 'coop-cloud.${STACK_NAME}.chaos=true/false' to the app container
|
|
// to signal if the app is deployed in chaos mode
|
|
func SetChaosLabel(compose *composetypes.Config, stackName string, chaos bool) {
|
|
for _, service := range compose.Services {
|
|
if service.Name == "app" {
|
|
log.Debugf("set label 'coop-cloud.%s.chaos' to %v for %s", stackName, chaos, stackName)
|
|
labelKey := fmt.Sprintf("coop-cloud.%s.chaos", stackName)
|
|
service.Deploy.Labels[labelKey] = strconv.FormatBool(chaos)
|
|
}
|
|
}
|
|
}
|
|
|
|
// SetChaosVersionLabel adds the label 'coop-cloud.${STACK_NAME}.chaos-version=$(GIT_COMMIT)' to the app container
|
|
func SetChaosVersionLabel(compose *composetypes.Config, stackName string, chaosVersion string) {
|
|
for _, service := range compose.Services {
|
|
if service.Name == "app" {
|
|
log.Debugf("set label 'coop-cloud.%s.chaos-version' to %v for %s", stackName, chaosVersion, stackName)
|
|
labelKey := fmt.Sprintf("coop-cloud.%s.chaos-version", stackName)
|
|
service.Deploy.Labels[labelKey] = chaosVersion
|
|
}
|
|
}
|
|
}
|
|
|
|
func SetVersionLabel(compose *composetypes.Config, stackName string, version string) {
|
|
for _, service := range compose.Services {
|
|
if service.Name == "app" {
|
|
log.Debugf("set label 'coop-cloud.%s.version' to %v for %s", stackName, version, stackName)
|
|
labelKey := fmt.Sprintf("coop-cloud.%s.version", stackName)
|
|
service.Deploy.Labels[labelKey] = version
|
|
}
|
|
}
|
|
}
|
|
|
|
// SetUpdateLabel adds env ENABLE_AUTO_UPDATE as label to enable/disable the
|
|
// auto update process for this app. The default if this variable is not set is to disable
|
|
// the auto update process.
|
|
func SetUpdateLabel(compose *composetypes.Config, stackName string, appEnv envfile.AppEnv) {
|
|
for _, service := range compose.Services {
|
|
if service.Name == "app" {
|
|
enable_auto_update, exists := appEnv["ENABLE_AUTO_UPDATE"]
|
|
if !exists {
|
|
enable_auto_update = "false"
|
|
}
|
|
log.Debugf("set label 'coop-cloud.%s.autoupdate' to %s for %s", stackName, enable_auto_update, stackName)
|
|
labelKey := fmt.Sprintf("coop-cloud.%s.autoupdate", stackName)
|
|
service.Deploy.Labels[labelKey] = enable_auto_update
|
|
}
|
|
}
|
|
}
|
|
|
|
// GetLabel reads docker labels in the format of "coop-cloud.${STACK_NAME}.${LABEL}" from the local compose files
|
|
func GetLabel(compose *composetypes.Config, stackName string, label string) string {
|
|
for _, service := range compose.Services {
|
|
if service.Name == "app" {
|
|
labelKey := fmt.Sprintf("coop-cloud.%s.%s", stackName, label)
|
|
log.Debugf("get label '%s'", labelKey)
|
|
if labelValue, ok := service.Deploy.Labels[labelKey]; ok {
|
|
return labelValue
|
|
}
|
|
}
|
|
}
|
|
log.Debugf("no %s label found for %s", label, stackName)
|
|
return ""
|
|
}
|
|
|
|
// GetTimeoutFromLabel reads the timeout value from docker label "coop-cloud.${STACK_NAME}.TIMEOUT" and returns 50 as default value
|
|
func GetTimeoutFromLabel(compose *composetypes.Config, stackName string) (int, error) {
|
|
timeout := 50 // Default Timeout
|
|
var err error = nil
|
|
if timeoutLabel := GetLabel(compose, stackName, "timeout"); timeoutLabel != "" {
|
|
log.Debugf("timeout label: %s", timeoutLabel)
|
|
timeout, err = strconv.Atoi(timeoutLabel)
|
|
}
|
|
return timeout, err
|
|
}
|