forked from toolshed/coop-cloud-backend
89 lines
2.0 KiB
Go
89 lines
2.0 KiB
Go
package api
|
|
import (
|
|
"fmt"
|
|
"errors"
|
|
"log"
|
|
"coopcloud.tech/abra/pkg/upstream/stack"
|
|
|
|
appPkg "coopcloud.tech/abra/pkg/app"
|
|
formatter "coopcloud.tech/abra/pkg/formatter"
|
|
secret "coopcloud.tech/abra/pkg/secret"
|
|
|
|
dockerClient "github.com/docker/docker/client"
|
|
|
|
"coop-cloud-backend/internal"
|
|
)
|
|
func getDeployVersion(deployMeta stack.DeployMeta, app appPkg.App) (string, error) {
|
|
if internal.Chaos {
|
|
v, err := app.Recipe.ChaosVersion()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
log.Printf("version: taking chaos version: %s", v)
|
|
return v, nil
|
|
}
|
|
|
|
v, err := getLatestVersionOrCommit(app)
|
|
log.Printf("version: taking new recipe version: %s", v)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return v, nil
|
|
}
|
|
|
|
|
|
func getLatestVersionOrCommit(app appPkg.App) (string, error) {
|
|
recipeVersions, warnings, err := app.Recipe.GetRecipeVersions()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
for _, warning := range warnings {
|
|
log.Printf(warning)
|
|
}
|
|
|
|
if len(recipeVersions) > 0 && !internal.Chaos {
|
|
latest := recipeVersions[len(recipeVersions)-1]
|
|
for tag := range latest {
|
|
log.Printf("selected latest recipe version: %s (from %d available versions)", tag, len(recipeVersions))
|
|
return tag, nil
|
|
}
|
|
}
|
|
|
|
head, err := app.Recipe.Head()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return formatter.SmallSHA(head.String()), nil
|
|
}
|
|
|
|
func validateSecrets(cl *dockerClient.Client, app appPkg.App) error {
|
|
composeFiles, err := app.Recipe.GetComposeFiles(app.Env)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
secretsConfig, err := secret.ReadSecretsConfig(app.Path, composeFiles, app.StackName())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
secStats, err := secret.PollSecretsStatus(cl, app)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, secStat := range secStats {
|
|
if !secStat.CreatedOnRemote {
|
|
secretConfig := secretsConfig[secStat.LocalName]
|
|
if secretConfig.SkipGenerate {
|
|
return errors.New(fmt.Sprintf("secret not inserted (#generate=false): %s", secStat.LocalName))
|
|
}
|
|
return errors.New(fmt.Sprintf("secret not generated: %s", secStat.LocalName))
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|