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  }