github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/restart_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
     5  	"code.cloudfoundry.org/cli/command"
     6  	"code.cloudfoundry.org/cli/command/flag"
     7  	"code.cloudfoundry.org/cli/command/v7/shared"
     8  	"code.cloudfoundry.org/cli/resources"
     9  )
    10  
    11  type RestartCommand struct {
    12  	BaseCommand
    13  
    14  	RequiredArgs        flag.AppName            `positional-args:"yes"`
    15  	Strategy            flag.DeploymentStrategy `long:"strategy" description:"Deployment strategy, either rolling or null."`
    16  	NoWait              bool                    `long:"no-wait" description:"Exit when the first instance of the web process is healthy"`
    17  	usage               interface{}             `usage:"CF_NAME restart APP_NAME\n\n   This command will cause downtime unless you use '--strategy rolling'.\n\n   If the app's most recent package is unstaged, restarting the app will stage and run that package.\n   Otherwise, the app's current droplet will be run."`
    18  	relatedCommands     interface{}             `related_commands:"restage, restart-app-instance"`
    19  	envCFStagingTimeout interface{}             `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for staging, in minutes" environmentDefault:"15"`
    20  	envCFStartupTimeout interface{}             `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"`
    21  
    22  	Stager shared.AppStager
    23  }
    24  
    25  func (cmd *RestartCommand) Setup(config command.Config, ui command.UI) error {
    26  	err := cmd.BaseCommand.Setup(config, ui)
    27  	if err != nil {
    28  		return err
    29  	}
    30  	logCacheEndpoint, _, err := cmd.Actor.GetLogCacheEndpoint()
    31  	if err != nil {
    32  		return err
    33  	}
    34  	logCacheClient := command.NewLogCacheClient(logCacheEndpoint, config, ui)
    35  	cmd.Stager = shared.NewAppStager(cmd.Actor, cmd.UI, cmd.Config, logCacheClient)
    36  
    37  	return nil
    38  }
    39  
    40  func (cmd RestartCommand) Execute(args []string) error {
    41  	err := cmd.SharedActor.CheckTarget(true, true)
    42  	if err != nil {
    43  		return err
    44  	}
    45  
    46  	user, err := cmd.Config.CurrentUser()
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    52  	cmd.UI.DisplayWarnings(warnings)
    53  	if err != nil {
    54  		return err
    55  	}
    56  
    57  	packageGUID, warnings, err := cmd.Actor.GetUnstagedNewestPackageGUID(app.GUID)
    58  	cmd.UI.DisplayWarnings(warnings)
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	if packageGUID != "" || cmd.Strategy.Name == constant.DeploymentStrategyRolling {
    64  		cmd.UI.DisplayTextWithFlavor("Restarting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    65  			"AppName":   cmd.RequiredArgs.AppName,
    66  			"OrgName":   cmd.Config.TargetedOrganization().Name,
    67  			"SpaceName": cmd.Config.TargetedSpace().Name,
    68  			"Username":  user.Name,
    69  		})
    70  		cmd.UI.DisplayNewline()
    71  	}
    72  
    73  	if packageGUID != "" {
    74  		err = cmd.Stager.StageAndStart(app, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), packageGUID, cmd.Strategy.Name, cmd.NoWait, constant.ApplicationRestarting)
    75  		if err != nil {
    76  			return err
    77  		}
    78  	} else {
    79  		err = cmd.Stager.StartApp(app, resources.Droplet{}, cmd.Strategy.Name, cmd.NoWait, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), constant.ApplicationRestarting)
    80  		if err != nil {
    81  			return err
    82  		}
    83  	}
    84  
    85  	return nil
    86  }