forked from toolshed/abra
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package app
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"errors"
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"coopcloud.tech/abra/cli/internal"
 | 
						|
	"coopcloud.tech/abra/pkg/autocomplete"
 | 
						|
	"coopcloud.tech/abra/pkg/client"
 | 
						|
	"coopcloud.tech/abra/pkg/runtime"
 | 
						|
	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: "<domain>",
 | 
						|
	Flags: []cli.Flag{
 | 
						|
		internal.DebugFlag,
 | 
						|
		internal.OfflineFlag,
 | 
						|
	},
 | 
						|
	Before:       internal.SubCommandBefore,
 | 
						|
	Description:  `This command restarts a service within a deployed app.`,
 | 
						|
	BashComplete: autocomplete.AppNameComplete,
 | 
						|
	Action: func(c *cli.Context) error {
 | 
						|
		conf := runtime.New(runtime.WithOffline(internal.Offline))
 | 
						|
		app := internal.ValidateApp(c, conf)
 | 
						|
 | 
						|
		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
 | 
						|
	},
 | 
						|
}
 |