package app import ( "fmt" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/config" stack "coopcloud.tech/abra/pkg/upstream/stack" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) var appUndeployCommand = &cli.Command{ Name: "undeploy", Aliases: []string{"u"}, Usage: "Undeploy an app", Description: ` This does not destroy any of the application data. However, you should remain vigilant, as your swarm installation will consider any previously attached volumes as eligiblef or pruning once undeployed. `, Action: func(c *cli.Context) error { app := internal.ValidateApp(c) stackName := app.StackName() cl, err := client.New(app.Server) if err != nil { logrus.Fatal(err) } logrus.Debugf("checking whether '%s' is already deployed", stackName) isDeployed, deployedVersion, err := stack.IsDeployed(c.Context, cl, stackName) if err != nil { logrus.Fatal(err) } if !isDeployed { logrus.Fatalf("'%s' is not deployed?", stackName) } if err := DeployOverview(app, deployedVersion, "continue with undeploy?"); err != nil { logrus.Fatal(err) } rmOpts := stack.Remove{Namespaces: []string{app.StackName()}} if err := stack.RunRemove(c.Context, cl, rmOpts); err != nil { logrus.Fatal(err) } return nil }, BashComplete: func(c *cli.Context) { appNames, err := config.GetAppNames() if err != nil { logrus.Warn(err) } if c.NArg() > 0 { return } for _, a := range appNames { fmt.Println(a) } }, }