github.com/loafoe/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 }