package app import ( "errors" "fmt" "time" "coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/client" containerPkg "coopcloud.tech/abra/pkg/container" "github.com/docker/docker/api/types/filters" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" ) var appRestartCommand = &cli.Command{ Name: "restart", Usage: "Restart an app", Aliases: []string{"R"}, ArgsUsage: "", Description: `This command restarts a service within a deployed app.`, Action: func(c *cli.Context) error { app := internal.ValidateApp(c) serviceName := c.Args().Get(1) if serviceName == "" { err := errors.New("missing service?") internal.ShowSubcommandHelpAndError(c, err) } cl, err := client.New(app.Server) if err != nil { logrus.Fatal(err) } serviceFilter := fmt.Sprintf("%s_%s", app.StackName(), serviceName) filters := filters.NewArgs() filters.Add("name", serviceFilter) targetContainer, err := containerPkg.GetContainer(c.Context, cl, filters, true) if err != nil { logrus.Fatal(err) } logrus.Debugf("attempting to restart %s", serviceFilter) timeout := 30 * time.Second if err := cl.ContainerRestart(c.Context, targetContainer.ID, &timeout); err != nil { logrus.Fatal(err) } logrus.Infof("%s service restarted", serviceFilter) return nil }, BashComplete: autocomplete.AppNameComplete, }