package app import ( "context" "errors" "fmt" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" upstream "coopcloud.tech/abra/pkg/upstream/service" stack "coopcloud.tech/abra/pkg/upstream/stack" "github.com/sirupsen/logrus" "github.com/urfave/cli" ) var appRestartCommand = cli.Command{ Name: "restart", Aliases: []string{"re"}, Usage: "Restart an app", ArgsUsage: "", Flags: []cli.Flag{ internal.DebugFlag, internal.NoInputFlag, }, Before: internal.SubCommandBefore, Description: `This command restarts a service within a deployed app.`, BashComplete: autocomplete.AppNameComplete, Action: func(c *cli.Context) error { app := internal.ValidateApp(c) serviceNameShort := c.Args().Get(1) if serviceNameShort == "" { err := errors.New("missing service?") internal.ShowSubcommandHelpAndError(c, err) } cl, err := client.New(app.Server) if err != nil { logrus.Fatal(err) } serviceName := fmt.Sprintf("%s_%s", app.StackName(), serviceNameShort) logrus.Debugf("attempting to scale %s to 0 (restart logic)", serviceName) if err := upstream.RunServiceScale(context.Background(), cl, serviceName, 0); err != nil { logrus.Fatal(err) } if err := stack.WaitOnService(context.Background(), cl, serviceName, app.Name); err != nil { logrus.Fatal(err) } logrus.Debugf("%s has been scaled to 0 (restart logic)", serviceName) logrus.Debugf("attempting to scale %s to 1 (restart logic)", serviceName) if err := upstream.RunServiceScale(context.Background(), cl, serviceName, 1); err != nil { logrus.Fatal(err) } if err := stack.WaitOnService(context.Background(), cl, serviceName, app.Name); err != nil { logrus.Fatal(err) } logrus.Debugf("%s has been scaled to 1 (restart logic)", serviceName) logrus.Infof("%s service successfully restarted", serviceNameShort) return nil }, }