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