forked from toolshed/abra
feat: upgrade/downgrade support chaos mode
This commit is contained in:
parent
c5a7a831d2
commit
62cc7ef92d
@ -10,7 +10,6 @@ import (
|
|||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
stack "coopcloud.tech/abra/pkg/client/stack"
|
stack "coopcloud.tech/abra/pkg/client/stack"
|
||||||
"coopcloud.tech/abra/pkg/config"
|
"coopcloud.tech/abra/pkg/config"
|
||||||
"coopcloud.tech/abra/pkg/git"
|
|
||||||
"coopcloud.tech/abra/pkg/recipe"
|
"coopcloud.tech/abra/pkg/recipe"
|
||||||
"github.com/AlecAivazis/survey/v2"
|
"github.com/AlecAivazis/survey/v2"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
@ -86,21 +85,11 @@ recipes.
|
|||||||
|
|
||||||
if internal.Chaos {
|
if internal.Chaos {
|
||||||
logrus.Warnf("chaos mode engaged")
|
logrus.Warnf("chaos mode engaged")
|
||||||
head, err := git.GetRecipeHead(app.Type)
|
var err error
|
||||||
|
version, err = recipe.ChaosVersion(app.Type)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
version = head.String()[:8]
|
|
||||||
|
|
||||||
isClean, err := git.IsClean(app.Type)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !isClean {
|
|
||||||
version = fmt.Sprintf("%s + unstaged changes", version)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
|
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
|
||||||
|
@ -23,6 +23,7 @@ var appRollbackCommand = &cli.Command{
|
|||||||
ArgsUsage: "<app>",
|
ArgsUsage: "<app>",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
internal.ForceFlag,
|
internal.ForceFlag,
|
||||||
|
internal.ChaosFlag,
|
||||||
},
|
},
|
||||||
Description: `
|
Description: `
|
||||||
This command rolls an app back to a previous version if one exists.
|
This command rolls an app back to a previous version if one exists.
|
||||||
@ -81,7 +82,7 @@ recipes.
|
|||||||
logrus.Warnf("failed to determine version of deployed '%s'", app.Name)
|
logrus.Warnf("failed to determine version of deployed '%s'", app.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if deployedVersion != "unknown" {
|
if deployedVersion != "unknown" && !internal.Chaos {
|
||||||
for _, version := range versions {
|
for _, version := range versions {
|
||||||
parsedDeployedVersion, err := tagcmp.Parse(deployedVersion)
|
parsedDeployedVersion, err := tagcmp.Parse(deployedVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -107,7 +108,11 @@ recipes.
|
|||||||
}
|
}
|
||||||
|
|
||||||
var chosenDowngrade string
|
var chosenDowngrade string
|
||||||
if !internal.Force {
|
if !internal.Chaos {
|
||||||
|
if internal.Force {
|
||||||
|
chosenDowngrade = availableDowngrades[0]
|
||||||
|
logrus.Debugf("choosing '%s' as version to downgrade to (--force)", chosenDowngrade)
|
||||||
|
} else {
|
||||||
prompt := &survey.Select{
|
prompt := &survey.Select{
|
||||||
Message: fmt.Sprintf("Please select a downgrade (current version: '%s'):", deployedVersion),
|
Message: fmt.Sprintf("Please select a downgrade (current version: '%s'):", deployedVersion),
|
||||||
Options: availableDowngrades,
|
Options: availableDowngrades,
|
||||||
@ -116,15 +121,22 @@ recipes.
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if internal.Force {
|
|
||||||
chosenDowngrade = availableDowngrades[0]
|
|
||||||
logrus.Debugf("choosing '%s' as version to downgrade to", chosenDowngrade)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !internal.Chaos {
|
||||||
if err := recipe.EnsureVersion(app.Type, chosenDowngrade); err != nil {
|
if err := recipe.EnsureVersion(app.Type, chosenDowngrade); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if internal.Chaos {
|
||||||
|
logrus.Warn("chaos mode engaged")
|
||||||
|
var err error
|
||||||
|
chosenDowngrade, err = recipe.ChaosVersion(app.Type)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
|
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
|
||||||
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
|
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
|
||||||
|
@ -22,6 +22,7 @@ var appUpgradeCommand = &cli.Command{
|
|||||||
ArgsUsage: "<app>",
|
ArgsUsage: "<app>",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
internal.ForceFlag,
|
internal.ForceFlag,
|
||||||
|
internal.ChaosFlag,
|
||||||
},
|
},
|
||||||
Description: `
|
Description: `
|
||||||
This command supports upgrading an app. You can use it to choose and roll out a
|
This command supports upgrading an app. You can use it to choose and roll out a
|
||||||
@ -77,7 +78,7 @@ recipes.
|
|||||||
logrus.Warnf("failed to determine version of deployed '%s'", app.Name)
|
logrus.Warnf("failed to determine version of deployed '%s'", app.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if deployedVersion != "unknown" {
|
if deployedVersion != "unknown" && !internal.Chaos {
|
||||||
for _, version := range versions {
|
for _, version := range versions {
|
||||||
parsedDeployedVersion, err := tagcmp.Parse(deployedVersion)
|
parsedDeployedVersion, err := tagcmp.Parse(deployedVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -98,7 +99,11 @@ recipes.
|
|||||||
}
|
}
|
||||||
|
|
||||||
var chosenUpgrade string
|
var chosenUpgrade string
|
||||||
if !internal.Force {
|
if !internal.Chaos {
|
||||||
|
if internal.Force {
|
||||||
|
chosenUpgrade = availableUpgrades[len(availableUpgrades)-1]
|
||||||
|
logrus.Debugf("choosing '%s' as version to upgrade to", chosenUpgrade)
|
||||||
|
} else {
|
||||||
prompt := &survey.Select{
|
prompt := &survey.Select{
|
||||||
Message: fmt.Sprintf("Please select an upgrade (current version: '%s'):", deployedVersion),
|
Message: fmt.Sprintf("Please select an upgrade (current version: '%s'):", deployedVersion),
|
||||||
Options: availableUpgrades,
|
Options: availableUpgrades,
|
||||||
@ -107,15 +112,22 @@ recipes.
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if internal.Force {
|
|
||||||
chosenUpgrade = availableUpgrades[len(availableUpgrades)-1]
|
|
||||||
logrus.Debugf("choosing '%s' as version to upgrade to", chosenUpgrade)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !internal.Chaos {
|
||||||
if err := recipe.EnsureVersion(app.Type, chosenUpgrade); err != nil {
|
if err := recipe.EnsureVersion(app.Type, chosenUpgrade); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if internal.Chaos {
|
||||||
|
logrus.Warn("chaos mode engaged")
|
||||||
|
var err error
|
||||||
|
chosenUpgrade, err = recipe.ChaosVersion(app.Type)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
|
abraShPath := fmt.Sprintf("%s/%s/%s", config.APPS_DIR, app.Type, "abra.sh")
|
||||||
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
|
abraShEnv, err := config.ReadAbraShEnvVars(abraShPath)
|
||||||
|
@ -195,3 +195,26 @@ func EnsureLatest(recipeName string) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChaosVersion constructs a chaos mode recipe version.
|
||||||
|
func ChaosVersion(recipeName string) (string, error) {
|
||||||
|
var version string
|
||||||
|
|
||||||
|
head, err := gitPkg.GetRecipeHead(recipeName)
|
||||||
|
if err != nil {
|
||||||
|
return version, err
|
||||||
|
}
|
||||||
|
|
||||||
|
version = head.String()[:8]
|
||||||
|
|
||||||
|
isClean, err := gitPkg.IsClean(recipeName)
|
||||||
|
if err != nil {
|
||||||
|
return version, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isClean {
|
||||||
|
version = fmt.Sprintf("%s + unstaged changes", version)
|
||||||
|
}
|
||||||
|
|
||||||
|
return version, nil
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user