fix: only delete secrets from specific app
continuous-integration/drone/push Build is failing Details

See coop-cloud/organising#300.
This commit is contained in:
decentral1se 2022-03-12 09:39:30 +01:00
parent d8a1b0ccc1
commit b4b0b464bd
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410
1 changed files with 43 additions and 25 deletions

View File

@ -10,10 +10,12 @@ import (
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/autocomplete"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
"coopcloud.tech/abra/pkg/config"
"coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/formatter"
"coopcloud.tech/abra/pkg/secret" "coopcloud.tech/abra/pkg/secret"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/filters"
dockerClient "github.com/docker/docker/client"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@ -150,6 +152,25 @@ Example:
}, },
} }
// secretRm removes a secret.
func secretRm(cl *dockerClient.Client, app config.App, secretName, parsed string) error {
if err := cl.SecretRemove(context.Background(), secretName); err != nil {
return err
}
logrus.Infof("deleted %s successfully from server", secretName)
if internal.Pass {
if err := secret.PassRmSecret(parsed, app.StackName(), app.Server); err != nil {
return err
}
logrus.Infof("deleted %s successfully from local pass store", secretName)
}
return nil
}
var appSecretRmCommand = cli.Command{ var appSecretRmCommand = cli.Command{
Name: "remove", Name: "remove",
Aliases: []string{"rm"}, Aliases: []string{"rm"},
@ -172,6 +193,7 @@ Example:
`, `,
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
app := internal.ValidateApp(c) app := internal.ValidateApp(c)
secrets := secret.ReadSecretEnvVars(app.Env)
if c.Args().Get(1) != "" && allSecrets { if c.Args().Get(1) != "" && allSecrets {
internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret-name>' and '--all' together")) internal.ShowSubcommandHelpAndError(c, errors.New("cannot use '<secret-name>' and '--all' together"))
@ -193,37 +215,33 @@ Example:
logrus.Fatal(err) logrus.Fatal(err)
} }
secretToRm := c.Args().Get(1) remoteSecretNames := make(map[string]bool)
for _, cont := range secretList { for _, cont := range secretList {
secretName := cont.Spec.Annotations.Name remoteSecretNames[cont.Spec.Annotations.Name] = true
}
secretToRm := c.Args().Get(1)
for sec := range secrets {
secretName := secret.ParseSecretEnvVarName(sec)
parsed := secret.ParseGeneratedSecretName(secretName, app) parsed := secret.ParseGeneratedSecretName(secretName, app)
if allSecrets {
if err := cl.SecretRemove(context.Background(), secretName); err != nil {
logrus.Fatal(err)
}
logrus.Infof("deleted %s successfully from server", secretName)
if internal.Pass { secVal, err := secret.ParseSecretEnvVarValue(secrets[sec])
if err := secret.PassRmSecret(parsed, app.StackName(), app.Server); err != nil { if err != nil {
logrus.Fatal(err) logrus.Fatal(err)
} }
logrus.Infof("deleted %s successfully from local pass store", secretName) secretRemoteName := fmt.Sprintf("%s_%s_%s", app.StackName(), secretName, secVal.Version)
} if _, ok := remoteSecretNames[secretRemoteName]; ok {
} else { if secretToRm != "" {
if parsed == secretToRm { if parsed == secretToRm {
if err := cl.SecretRemove(context.Background(), secretName); err != nil { if err := secretRm(cl, app, secretRemoteName, parsed); err != nil {
logrus.Fatal(err)
}
logrus.Infof("deleted %s successfully from server", secretName)
if internal.Pass {
if err := secret.PassRmSecret(parsed, app.StackName(), app.Server); err != nil {
logrus.Fatal(err) logrus.Fatal(err)
} }
return nil
logrus.Infof("deleted %s successfully from local pass store", secretName) }
} else {
if err := secretRm(cl, app, secretRemoteName, parsed); err != nil {
logrus.Fatal(err)
} }
} }
} }