github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v3/v3_create_package_command.go (about) 1 package v3 2 3 import ( 4 "net/http" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v3action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 10 "code.cloudfoundry.org/cli/command" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/translatableerror" 13 "code.cloudfoundry.org/cli/command/v3/shared" 14 ) 15 16 //go:generate counterfeiter . V3CreatePackageActor 17 18 type V3CreatePackageActor interface { 19 CloudControllerAPIVersion() string 20 CreateDockerPackageByApplicationNameAndSpace(appName string, spaceGUID string, dockerImageCredentials v3action.DockerImageCredentials) (v3action.Package, v3action.Warnings, error) 21 CreateAndUploadBitsPackageByApplicationNameAndSpace(appName string, spaceGUID string, bitsPath string) (v3action.Package, v3action.Warnings, error) 22 } 23 24 type V3CreatePackageCommand struct { 25 RequiredArgs flag.AppName `positional-args:"yes"` 26 DockerImage flag.DockerImage `long:"docker-image" short:"o" description:"Docker image to use (e.g. user/docker-image-name)"` 27 AppPath flag.PathWithExistenceCheck `short:"p" description:"Path to app directory or to a zip file of the contents of the app directory"` 28 usage interface{} `usage:"CF_NAME v3-create-package APP_NAME [-p APP_PATH | --docker-image [REGISTRY_HOST:PORT/]IMAGE[:TAG]]"` 29 30 UI command.UI 31 Config command.Config 32 SharedActor command.SharedActor 33 Actor V3CreatePackageActor 34 35 PackageDisplayer shared.PackageDisplayer 36 } 37 38 func (cmd *V3CreatePackageCommand) Setup(config command.Config, ui command.UI) error { 39 cmd.UI = ui 40 cmd.Config = config 41 sharedActor := sharedaction.NewActor(config) 42 cmd.SharedActor = sharedActor 43 44 client, _, err := shared.NewClients(config, ui, true) 45 if err != nil { 46 if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound { 47 return translatableerror.MinimumAPIVersionNotMetError{MinimumVersion: ccversion.MinVersionV3} 48 } 49 50 return err 51 } 52 cmd.Actor = v3action.NewActor(client, config, sharedActor, nil) 53 54 cmd.PackageDisplayer = shared.NewPackageDisplayer(cmd.UI, cmd.Config) 55 56 return nil 57 } 58 59 func (cmd V3CreatePackageCommand) Execute(args []string) error { 60 cmd.UI.DisplayWarning(command.ExperimentalWarning) 61 62 if cmd.DockerImage.Path != "" && cmd.AppPath != "" { 63 return translatableerror.ArgumentCombinationError{ 64 Args: []string{"--docker-image", "-o", "-p"}, 65 } 66 } 67 68 err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionV3) 69 if err != nil { 70 return err 71 } 72 73 err = cmd.SharedActor.CheckTarget(true, true) 74 if err != nil { 75 return err 76 } 77 78 isDockerImage := (cmd.DockerImage.Path != "") 79 err = cmd.PackageDisplayer.DisplaySetupMessage(cmd.RequiredArgs.AppName, isDockerImage) 80 if err != nil { 81 return err 82 } 83 84 var ( 85 pkg v3action.Package 86 warnings v3action.Warnings 87 ) 88 if isDockerImage { 89 pkg, warnings, err = cmd.Actor.CreateDockerPackageByApplicationNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID, v3action.DockerImageCredentials{Path: cmd.DockerImage.Path}) 90 } else { 91 pkg, warnings, err = cmd.Actor.CreateAndUploadBitsPackageByApplicationNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID, string(cmd.AppPath)) 92 } 93 94 cmd.UI.DisplayWarnings(warnings) 95 if err != nil { 96 return err 97 } 98 99 cmd.UI.DisplayText("package guid: {{.PackageGuid}}", map[string]interface{}{ 100 "PackageGuid": pkg.GUID, 101 }) 102 cmd.UI.DisplayOK() 103 104 return nil 105 }