code.cloudfoundry.org/cli@v7.1.0+incompatible/command/v7/stage_package_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"strings"
     5  	"time"
     6  
     7  	"code.cloudfoundry.org/cli/actor/sharedaction"
     8  	"code.cloudfoundry.org/cli/command"
     9  	"code.cloudfoundry.org/cli/command/flag"
    10  	"code.cloudfoundry.org/cli/command/v7/shared"
    11  	"code.cloudfoundry.org/cli/resources"
    12  )
    13  
    14  type StagePackageCommand struct {
    15  	BaseCommand
    16  
    17  	RequiredArgs    flag.AppName `positional-args:"yes"`
    18  	PackageGUID     string       `long:"package-guid" description:"The guid of the package to stage (default: latest ready package)"`
    19  	usage           interface{}  `usage:"CF_NAME stage-package APP_NAME [--package-guid PACKAGE_GUID]"`
    20  	relatedCommands interface{}  `related_commands:"app, create-package, droplets, packages, push, set-droplet"`
    21  
    22  	envCFStagingTimeout interface{} `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for staging, in minutes" environmentDefault:"15"`
    23  
    24  	LogCacheClient sharedaction.LogCacheClient
    25  }
    26  
    27  func (cmd *StagePackageCommand) Setup(config command.Config, ui command.UI) error {
    28  	err := cmd.BaseCommand.Setup(config, ui)
    29  	if err != nil {
    30  		return err
    31  	}
    32  
    33  	logCacheEndpoint, _, err := cmd.Actor.GetLogCacheEndpoint()
    34  	if err != nil {
    35  		return err
    36  	}
    37  	cmd.LogCacheClient = command.NewLogCacheClient(logCacheEndpoint, config, ui)
    38  
    39  	return nil
    40  }
    41  
    42  func (cmd StagePackageCommand) Execute(args []string) error {
    43  	err := cmd.SharedActor.CheckTarget(true, true)
    44  	if err != nil {
    45  		return err
    46  	}
    47  
    48  	user, err := cmd.Config.CurrentUser()
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	cmd.UI.DisplayTextWithFlavor("Staging package for {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    54  		"AppName":   cmd.RequiredArgs.AppName,
    55  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    56  		"SpaceName": cmd.Config.TargetedSpace().Name,
    57  		"Username":  user.Name,
    58  	})
    59  
    60  	packageGUID := cmd.PackageGUID
    61  
    62  	if packageGUID == "" {
    63  		app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    64  		cmd.UI.DisplayWarnings(warnings)
    65  		if err != nil {
    66  			return err
    67  		}
    68  
    69  		pkg, warnings, err := cmd.Actor.GetNewestReadyPackageForApplication(app)
    70  		cmd.UI.DisplayWarnings(warnings)
    71  		if err != nil {
    72  			return err
    73  		}
    74  
    75  		packageGUID = pkg.GUID
    76  	}
    77  
    78  	logStream, logErrStream, stopLogStreamFunc, logWarnings, logErr := cmd.Actor.GetStreamingLogsForApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID, cmd.LogCacheClient)
    79  	cmd.UI.DisplayWarnings(logWarnings)
    80  	if logErr != nil {
    81  		return logErr
    82  	}
    83  	defer stopLogStreamFunc()
    84  
    85  	dropletStream, warningsStream, errStream := cmd.Actor.StagePackage(
    86  		packageGUID,
    87  		cmd.RequiredArgs.AppName,
    88  		cmd.Config.TargetedSpace().GUID,
    89  	)
    90  
    91  	var droplet resources.Droplet
    92  	droplet, err = shared.PollStage(dropletStream, warningsStream, errStream, logStream, logErrStream, cmd.UI)
    93  	if err != nil {
    94  		return err
    95  	}
    96  
    97  	cmd.UI.DisplayNewline()
    98  	cmd.UI.DisplayText("Package staged")
    99  
   100  	t, err := time.Parse(time.RFC3339, droplet.CreatedAt)
   101  	if err != nil {
   102  		return err
   103  	}
   104  
   105  	table := [][]string{
   106  		{cmd.UI.TranslateText("droplet guid:"), droplet.GUID},
   107  		{cmd.UI.TranslateText("state:"), strings.ToLower(string(droplet.State))},
   108  		{cmd.UI.TranslateText("created:"), cmd.UI.UserFriendlyDate(t)},
   109  	}
   110  
   111  	cmd.UI.DisplayKeyValueTable("", table, 3)
   112  	return nil
   113  }