github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/restage_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 . RestageActor
    14  
    15  type RestageActor interface {
    16  	AppActor
    17  	RestageApplication(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 RestageCommand struct {
    21  	RequiredArgs        flag.AppName `positional-args:"yes"`
    22  	usage               interface{}  `usage:"CF_NAME restage APP_NAME"`
    23  	relatedCommands     interface{}  `related_commands:"restart"`
    24  	envCFStagingTimeout interface{}  `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for buildpack staging, in minutes" environmentDefault:"15"`
    25  	envCFStartupTimeout interface{}  `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"`
    26  
    27  	UI          command.UI
    28  	Config      command.Config
    29  	SharedActor command.SharedActor
    30  	Actor       RestageActor
    31  	NOAAClient  *consumer.Consumer
    32  }
    33  
    34  func (cmd *RestageCommand) 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 RestageCommand) 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("Restaging 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  	messages, logErrs, appState, apiWarnings, errs := cmd.Actor.RestageApplication(app, cmd.NOAAClient, cmd.Config)
    76  	err = shared.PollStart(cmd.UI, cmd.Config, messages, logErrs, appState, apiWarnings, errs)
    77  	if err != nil {
    78  		return err
    79  	}
    80  
    81  	cmd.UI.DisplayNewline()
    82  	appSummary, warnings, err := cmd.Actor.GetApplicationSummaryByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    83  	cmd.UI.DisplayWarnings(warnings)
    84  	if err != nil {
    85  		return shared.HandleError(err)
    86  	}
    87  
    88  	shared.DisplayAppSummary(cmd.UI, appSummary, true)
    89  
    90  	return nil
    91  }