github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/start_command.go (about)

     1  package v2
     2  
     3  import (
     4  	"github.com/cloudfoundry/noaa/consumer"
     5  
     6  	"github.com/liamawhite/cli-with-i18n/actor/sharedaction"
     7  	"github.com/liamawhite/cli-with-i18n/actor/v2action"
     8  	"github.com/liamawhite/cli-with-i18n/command"
     9  	"github.com/liamawhite/cli-with-i18n/command/flag"
    10  	"github.com/liamawhite/cli-with-i18n/command/v2/shared"
    11  )
    12  
    13  //go:generate counterfeiter . StartActor
    14  
    15  type StartActor interface {
    16  	AppActor
    17  	StartApplication(app v2action.Application, client v2action.NOAAClient, config v2action.Config) (<-chan *v2action.LogMessage, <-chan error, <-chan v2action.ApplicationStateChange, <-chan string, <-chan error)
    18  }
    19  
    20  type StartCommand struct {
    21  	RequiredArgs        flag.AppName `positional-args:"yes"`
    22  	usage               interface{}  `usage:"CF_NAME start APP_NAME"`
    23  	envCFStagingTimeout interface{}  `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for buildpack staging, in minutes" environmentDefault:"15"`
    24  	envCFStartupTimeout interface{}  `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"`
    25  	relatedCommands     interface{}  `related_commands:"apps, logs, scale, ssh, stop, restart, run-task"`
    26  
    27  	UI          command.UI
    28  	Config      command.Config
    29  	SharedActor command.SharedActor
    30  	Actor       StartActor
    31  	NOAAClient  *consumer.Consumer
    32  }
    33  
    34  func (cmd *StartCommand) Setup(config command.Config, ui command.UI) error {
    35  	cmd.UI = ui
    36  	cmd.Config = config
    37  	cmd.SharedActor = sharedaction.NewActor(config)
    38  
    39  	ccClient, uaaClient, err := shared.NewClients(config, ui, true)
    40  	if err != nil {
    41  		return err
    42  	}
    43  	cmd.Actor = v2action.NewActor(ccClient, uaaClient, config)
    44  
    45  	cmd.NOAAClient = shared.NewNOAAClient(ccClient.DopplerEndpoint(), config, uaaClient, ui)
    46  
    47  	return nil
    48  }
    49  
    50  func (cmd StartCommand) Execute(args []string) error {
    51  	err := cmd.SharedActor.CheckTarget(cmd.Config, true, true)
    52  	if err != nil {
    53  		return shared.HandleError(err)
    54  	}
    55  
    56  	user, err := cmd.Config.CurrentUser()
    57  	if err != nil {
    58  		return shared.HandleError(err)
    59  	}
    60  
    61  	cmd.UI.DisplayTextWithFlavor("Starting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...",
    62  		map[string]interface{}{
    63  			"AppName":     cmd.RequiredArgs.AppName,
    64  			"OrgName":     cmd.Config.TargetedOrganization().Name,
    65  			"SpaceName":   cmd.Config.TargetedSpace().Name,
    66  			"CurrentUser": user.Name,
    67  		})
    68  
    69  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    70  	cmd.UI.DisplayWarnings(warnings)
    71  	if err != nil {
    72  		return shared.HandleError(err)
    73  	}
    74  
    75  	if app.Started() {
    76  		cmd.UI.DisplayText("App {{.AppName}} is already started",
    77  			map[string]interface{}{
    78  				"AppName": cmd.RequiredArgs.AppName,
    79  			})
    80  		return nil
    81  	}
    82  
    83  	messages, logErrs, appState, apiWarnings, errs := cmd.Actor.StartApplication(app, cmd.NOAAClient, cmd.Config)
    84  	err = shared.PollStart(cmd.UI, cmd.Config, messages, logErrs, appState, apiWarnings, errs)
    85  	if err != nil {
    86  		return err
    87  	}
    88  
    89  	cmd.UI.DisplayNewline()
    90  
    91  	appSummary, warnings, err := cmd.Actor.GetApplicationSummaryByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    92  	cmd.UI.DisplayWarnings(warnings)
    93  	if err != nil {
    94  		return shared.HandleError(err)
    95  	}
    96  
    97  	shared.DisplayAppSummary(cmd.UI, appSummary, true)
    98  
    99  	return nil
   100  }