github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/command/v7/start_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/sharedaction" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 6 "code.cloudfoundry.org/cli/command" 7 "code.cloudfoundry.org/cli/command/flag" 8 "code.cloudfoundry.org/cli/command/v7/shared" 9 "code.cloudfoundry.org/cli/resources" 10 ) 11 12 type StartCommand struct { 13 BaseCommand 14 15 RequiredArgs flag.AppName `positional-args:"yes"` 16 usage interface{} `usage:"CF_NAME start APP_NAME\n\n If the app's most recent package is unstaged, starting the app will stage and run that package.\n Otherwise, the app's current droplet will be run."` 17 relatedCommands interface{} `related_commands:"apps, logs, scale, ssh, stop, restart, run-task"` 18 envCFStagingTimeout interface{} `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for staging, in minutes" environmentDefault:"15"` 19 envCFStartupTimeout interface{} `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"` 20 21 LogCacheClient sharedaction.LogCacheClient 22 Stager shared.AppStager 23 } 24 25 func (cmd *StartCommand) Setup(config command.Config, ui command.UI) error { 26 err := cmd.BaseCommand.Setup(config, ui) 27 if err != nil { 28 return err 29 } 30 31 logCacheEndpoint, _, err := cmd.Actor.GetLogCacheEndpoint() 32 if err != nil { 33 return err 34 } 35 cmd.LogCacheClient = command.NewLogCacheClient(logCacheEndpoint, config, ui) 36 cmd.Stager = shared.NewAppStager(cmd.Actor, cmd.UI, cmd.Config, cmd.LogCacheClient) 37 38 return nil 39 } 40 41 func (cmd StartCommand) Execute(args []string) error { 42 err := cmd.SharedActor.CheckTarget(true, true) 43 if err != nil { 44 return err 45 } 46 47 user, err := cmd.Config.CurrentUser() 48 if err != nil { 49 return err 50 } 51 52 app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID) 53 cmd.UI.DisplayWarnings(warnings) 54 if err != nil { 55 return err 56 } 57 58 packageGUID, warnings, err := cmd.Actor.GetUnstagedNewestPackageGUID(app.GUID) 59 cmd.UI.DisplayWarnings(warnings) 60 if err != nil { 61 return err 62 } 63 64 if packageGUID != "" && app.Stopped() { 65 cmd.UI.DisplayTextWithFlavor("Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 66 "AppName": cmd.RequiredArgs.AppName, 67 "OrgName": cmd.Config.TargetedOrganization().Name, 68 "SpaceName": cmd.Config.TargetedSpace().Name, 69 "Username": user.Name, 70 }) 71 cmd.UI.DisplayNewline() 72 73 err = cmd.Stager.StageAndStart(app, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), packageGUID, constant.DeploymentStrategyDefault, false, constant.ApplicationStarting) 74 if err != nil { 75 return err 76 } 77 } else { 78 err = cmd.Stager.StartApp(app, resources.Droplet{}, constant.DeploymentStrategyDefault, false, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), constant.ApplicationStarting) 79 if err != nil { 80 return err 81 } 82 } 83 84 return nil 85 86 }