github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/restart_command.go (about) 1 package v7 2 3 import ( 4 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action" 5 "github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccv3/constant" 6 "github.com/LukasHeimann/cloudfoundrycli/v8/api/logcache" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/command" 8 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 9 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/shared" 10 ) 11 12 type RestartCommand struct { 13 BaseCommand 14 15 RequiredArgs flag.AppName `positional-args:"yes"` 16 Strategy flag.DeploymentStrategy `long:"strategy" description:"Deployment strategy, either rolling or null."` 17 NoWait bool `long:"no-wait" description:"Exit when the first instance of the web process is healthy"` 18 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."` 19 relatedCommands interface{} `related_commands:"restage, restart-app-instance"` 20 envCFStagingTimeout interface{} `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for staging, in minutes" environmentDefault:"15"` 21 envCFStartupTimeout interface{} `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"` 22 23 Stager shared.AppStager 24 } 25 26 func (cmd *RestartCommand) Setup(config command.Config, ui command.UI) error { 27 err := cmd.BaseCommand.Setup(config, ui) 28 if err != nil { 29 return err 30 } 31 32 logCacheClient, err := logcache.NewClient(config.LogCacheEndpoint(), config, ui, v7action.NewDefaultKubernetesConfigGetter()) 33 if err != nil { 34 return err 35 } 36 37 cmd.Stager = shared.NewAppStager(cmd.Actor, cmd.UI, cmd.Config, logCacheClient) 38 39 return nil 40 } 41 42 func (cmd RestartCommand) Execute(args []string) error { 43 err := cmd.SharedActor.CheckTarget(true, true) 44 if err != nil { 45 return err 46 } 47 48 user, err := cmd.Actor.GetCurrentUser() 49 if err != nil { 50 return err 51 } 52 53 app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID) 54 cmd.UI.DisplayWarnings(warnings) 55 if err != nil { 56 return err 57 } 58 59 packageGUID, warnings, err := cmd.Actor.GetUnstagedNewestPackageGUID(app.GUID) 60 cmd.UI.DisplayWarnings(warnings) 61 if err != nil { 62 return err 63 } 64 65 if packageGUID != "" || cmd.Strategy.Name == constant.DeploymentStrategyRolling { 66 cmd.UI.DisplayTextWithFlavor("Restarting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 67 "AppName": cmd.RequiredArgs.AppName, 68 "OrgName": cmd.Config.TargetedOrganization().Name, 69 "SpaceName": cmd.Config.TargetedSpace().Name, 70 "Username": user.Name, 71 }) 72 cmd.UI.DisplayNewline() 73 } 74 75 if packageGUID != "" { 76 err = cmd.Stager.StageAndStart(app, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), packageGUID, cmd.Strategy.Name, cmd.NoWait, constant.ApplicationRestarting) 77 if err != nil { 78 return err 79 } 80 } else { 81 err = cmd.Stager.StartApp(app, "", cmd.Strategy.Name, cmd.NoWait, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), constant.ApplicationRestarting) 82 if err != nil { 83 return err 84 } 85 } 86 87 return nil 88 }