github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/start_command.go (about) 1 package v7 2 3 import ( 4 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/sharedaction" 5 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action" 6 "github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccv3/constant" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/api/logcache" 8 "github.com/LukasHeimann/cloudfoundrycli/v8/command" 9 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 10 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/shared" 11 ) 12 13 type StartCommand struct { 14 BaseCommand 15 16 RequiredArgs flag.AppName `positional-args:"yes"` 17 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."` 18 relatedCommands interface{} `related_commands:"apps, logs, scale, ssh, stop, restart, run-task"` 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 LogCacheClient sharedaction.LogCacheClient 23 Stager shared.AppStager 24 } 25 26 func (cmd *StartCommand) 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 cmd.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, cmd.LogCacheClient) 38 39 return nil 40 } 41 42 func (cmd StartCommand) 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 != "" && app.Stopped() { 66 cmd.UI.DisplayTextWithFlavor("Starting 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 err = cmd.Stager.StageAndStart(app, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), packageGUID, constant.DeploymentStrategyDefault, false, constant.ApplicationStarting) 75 if err != nil { 76 return err 77 } 78 } else { 79 err = cmd.Stager.StartApp(app, "", constant.DeploymentStrategyDefault, false, cmd.Config.TargetedSpace(), cmd.Config.TargetedOrganization(), constant.ApplicationStarting) 80 if err != nil { 81 return err 82 } 83 } 84 85 return nil 86 87 }