feat: remove old app configs
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
See #577
This commit is contained in:
@ -9,7 +9,7 @@ import (
|
|||||||
"coopcloud.tech/abra/pkg/autocomplete"
|
"coopcloud.tech/abra/pkg/autocomplete"
|
||||||
"coopcloud.tech/abra/pkg/client"
|
"coopcloud.tech/abra/pkg/client"
|
||||||
"coopcloud.tech/abra/pkg/log"
|
"coopcloud.tech/abra/pkg/log"
|
||||||
stack "coopcloud.tech/abra/pkg/upstream/stack"
|
"coopcloud.tech/abra/pkg/upstream/stack"
|
||||||
"github.com/AlecAivazis/survey/v2"
|
"github.com/AlecAivazis/survey/v2"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@ -78,6 +78,22 @@ flag.`,
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
configs, err := client.GetConfigs(cl, context.Background(), app.Server, fs)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
configNames := client.GetConfigNames(configs)
|
||||||
|
|
||||||
|
if len(configNames) > 0 {
|
||||||
|
if err := client.RemoveConfigs(cl, context.Background(), configNames, internal.Force); err != nil {
|
||||||
|
log.Fatalf("removing configs failed: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("%d config(s) removed successfully", len(configNames))
|
||||||
|
} else {
|
||||||
|
log.Info("no configs to remove")
|
||||||
|
}
|
||||||
|
|
||||||
secretList, err := cl.SecretList(context.Background(), types.SecretListOptions{Filters: fs})
|
secretList, err := cl.SecretList(context.Background(), types.SecretListOptions{Filters: fs})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
@ -120,7 +136,7 @@ flag.`,
|
|||||||
log.Fatalf("removing volumes failed: %s", err)
|
log.Fatalf("removing volumes failed: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("%d volumes removed successfully", len(volumeNames))
|
log.Infof("%d volume(s) removed successfully", len(volumeNames))
|
||||||
} else {
|
} else {
|
||||||
log.Info("no volumes to remove")
|
log.Info("no volumes to remove")
|
||||||
}
|
}
|
||||||
|
38
pkg/client/configs.go
Normal file
38
pkg/client/configs.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package client
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/docker/docker/api/types/filters"
|
||||||
|
"github.com/docker/docker/api/types/swarm"
|
||||||
|
"github.com/docker/docker/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetConfigs(cl *client.Client, ctx context.Context, server string, fs filters.Args) ([]swarm.Config, error) {
|
||||||
|
configList, err := cl.ConfigList(ctx, swarm.ConfigListOptions{Filters: fs})
|
||||||
|
if err != nil {
|
||||||
|
return configList, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return configList, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetConfigNames(configs []swarm.Config) []string {
|
||||||
|
var confNames []string
|
||||||
|
|
||||||
|
for _, conf := range configs {
|
||||||
|
confNames = append(confNames, conf.Spec.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return confNames
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemoveConfigs(cl *client.Client, ctx context.Context, configNames []string, force bool) error {
|
||||||
|
for _, confName := range configNames {
|
||||||
|
if err := cl.ConfigRemove(context.Background(), confName); err != nil {
|
||||||
|
return fmt.Errorf("conf %s: %s", confName, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
@ -124,6 +124,33 @@ teardown(){
|
|||||||
assert_output --partial 'removed'
|
assert_output --partial 'removed'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# bats test_tags=slow
|
||||||
|
@test "detect no configs to remove" {
|
||||||
|
_deploy_app
|
||||||
|
_undeploy_app
|
||||||
|
|
||||||
|
run $ABRA app rm "$TEST_APP_DOMAIN" --no-input
|
||||||
|
assert_success
|
||||||
|
assert_output --partial 'no configs to remove'
|
||||||
|
}
|
||||||
|
|
||||||
|
# bats test_tags=slow
|
||||||
|
@test "remove old app configs" {
|
||||||
|
_deploy_app
|
||||||
|
_undeploy_app
|
||||||
|
|
||||||
|
sanitisedDomainName="${TEST_APP_DOMAIN//./_}"
|
||||||
|
run docker config create "${sanitisedDomainName}_test_conf_v99" "$ABRA_DIR/recipes/abra-test-recipe/abra.sh"
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
assert bash -c "docker config ls | grep -q test_conf_v99"
|
||||||
|
|
||||||
|
run $ABRA app rm "$TEST_APP_DOMAIN" --no-input
|
||||||
|
assert_success
|
||||||
|
|
||||||
|
refute bash -c "docker config ls | grep -q test_conf_v99"
|
||||||
|
}
|
||||||
|
|
||||||
@test "remove .env file" {
|
@test "remove .env file" {
|
||||||
assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
|
assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user