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 }