refactor: pass args in, docs, rename, lower-case logs

This commit is contained in:
decentral1se 2023-02-17 10:23:00 +01:00
parent 6381b73a6a
commit 636261934f
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410
1 changed files with 26 additions and 15 deletions

View File

@ -8,8 +8,10 @@ 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"
stack "coopcloud.tech/abra/pkg/upstream/stack" stack "coopcloud.tech/abra/pkg/upstream/stack"
"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"
) )
@ -22,19 +24,19 @@ var pruneFlag = &cli.BoolFlag{
Usage: "Prunes unused containers, networks, and dangling images for an app", Usage: "Prunes unused containers, networks, and dangling images for an app",
} }
func cleanup(c *cli.Context) error { // pruneSystem runs the equivalent of a "docker system prune" after undeploying
// in order to clean up left over state related to the deployment. We must run
// this logic inside a loop as it may take some time for the undeployed to come
// down.
func pruneSystem(c *cli.Context, cl *dockerClient.Client, app config.App) error {
for { for {
if !prune { if !prune {
return nil return nil
} }
app := internal.ValidateApp(c)
stackName := app.StackName()
cl, err := client.New(app.Server)
if err != nil {
logrus.Fatal(err)
}
ctx := context.Background()
stackName := app.StackName()
ctx := context.Background()
pruneFilters := filters.NewArgs() pruneFilters := filters.NewArgs()
stackSearch := fmt.Sprintf("%s*", stackName) stackSearch := fmt.Sprintf("%s*", stackName)
pruneFilters.Add("label", stackSearch) pruneFilters.Add("label", stackSearch)
@ -44,7 +46,8 @@ func cleanup(c *cli.Context) error {
time.Sleep(time.Second) time.Sleep(time.Second)
continue continue
} }
logrus.Infof("Containers deleted: %s; Space reclaimed: %v", cr.ContainersDeleted, cr.SpaceReclaimed)
logrus.Infof("containers deleted: %s; space reclaimed: %v", cr.ContainersDeleted, cr.SpaceReclaimed)
nr, err := cl.NetworksPrune(ctx, pruneFilters) nr, err := cl.NetworksPrune(ctx, pruneFilters)
if err != nil { if err != nil {
@ -52,7 +55,8 @@ func cleanup(c *cli.Context) error {
time.Sleep(time.Second) time.Sleep(time.Second)
continue continue
} }
logrus.Infof("Networks deleted %s", nr.NetworksDeleted)
logrus.Infof("networks deleted %s", nr.NetworksDeleted)
ir, err := cl.ImagesPrune(ctx, pruneFilters) ir, err := cl.ImagesPrune(ctx, pruneFilters)
if err != nil { if err != nil {
@ -60,9 +64,12 @@ func cleanup(c *cli.Context) error {
time.Sleep(time.Second) time.Sleep(time.Second)
continue continue
} }
logrus.Infof("Images deleted: %s; Space reclaimed: %v", ir.ImagesDeleted, ir.SpaceReclaimed)
logrus.Infof("images deleted: %s; space reclaimed: %v", ir.ImagesDeleted, ir.SpaceReclaimed)
break break
} }
return nil return nil
} }
@ -75,8 +82,9 @@ var appUndeployCommand = cli.Command{
internal.NoInputFlag, internal.NoInputFlag,
pruneFlag, pruneFlag,
}, },
Before: internal.SubCommandBefore, Before: internal.SubCommandBefore,
Usage: "Undeploy an app", Usage: "Undeploy an app",
BashComplete: autocomplete.AppNameComplete,
Description: ` Description: `
This does not destroy any of the application data. However, you should remain This does not destroy any of the application data. However, you should remain
vigilant, as your swarm installation will consider any previously attached vigilant, as your swarm installation will consider any previously attached
@ -109,8 +117,11 @@ volumes as eligible for pruning once undeployed.
if err := stack.RunRemove(context.Background(), cl, rmOpts); err != nil { if err := stack.RunRemove(context.Background(), cl, rmOpts); err != nil {
logrus.Fatal(err) logrus.Fatal(err)
} }
cleanup(c)
if err := pruneSystem(c, cl, app); err != nil {
logrus.Fatal(err)
}
return nil return nil
}, },
BashComplete: autocomplete.AppNameComplete,
} }