github.com/arunkumar7540/cli@v6.45.0+incompatible/actor/v7action/package.go (about) 1 package v7action 2 3 import ( 4 "io" 5 "time" 6 7 "code.cloudfoundry.org/cli/actor/actionerror" 8 "code.cloudfoundry.org/cli/actor/sharedaction" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 11 log "github.com/sirupsen/logrus" 12 ) 13 14 const ( 15 DefaultFolderPermissions = 0755 16 DefaultArchiveFilePermissions = 0744 17 ) 18 19 type Package ccv3.Package 20 21 type DockerImageCredentials struct { 22 Path string 23 Username string 24 Password string 25 } 26 27 func (actor Actor) CreateDockerPackageByApplication(appGUID string, dockerImageCredentials DockerImageCredentials) (Package, Warnings, error) { 28 inputPackage := ccv3.Package{ 29 Type: constant.PackageTypeDocker, 30 Relationships: ccv3.Relationships{ 31 constant.RelationshipTypeApplication: ccv3.Relationship{GUID: appGUID}, 32 }, 33 DockerImage: dockerImageCredentials.Path, 34 DockerUsername: dockerImageCredentials.Username, 35 DockerPassword: dockerImageCredentials.Password, 36 } 37 pkg, warnings, err := actor.CloudControllerClient.CreatePackage(inputPackage) 38 return Package(pkg), Warnings(warnings), err 39 } 40 41 func (actor Actor) CreateDockerPackageByApplicationNameAndSpace(appName string, spaceGUID string, dockerImageCredentials DockerImageCredentials) (Package, Warnings, error) { 42 app, getWarnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 43 if err != nil { 44 return Package{}, getWarnings, err 45 } 46 pkg, warnings, err := actor.CreateDockerPackageByApplication(app.GUID, dockerImageCredentials) 47 return pkg, append(getWarnings, warnings...), err 48 } 49 50 // GetApplicationPackages returns a list of package of an app. 51 func (actor *Actor) GetApplicationPackages(appName string, spaceGUID string) ([]Package, Warnings, error) { 52 app, allWarnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 53 if err != nil { 54 return nil, allWarnings, err 55 } 56 57 ccv3Packages, warnings, err := actor.CloudControllerClient.GetPackages( 58 ccv3.Query{Key: ccv3.AppGUIDFilter, Values: []string{app.GUID}}, 59 ) 60 allWarnings = append(allWarnings, warnings...) 61 if err != nil { 62 return nil, allWarnings, err 63 } 64 65 var packages []Package 66 for _, ccv3Package := range ccv3Packages { 67 packages = append(packages, Package(ccv3Package)) 68 } 69 70 return packages, allWarnings, nil 71 } 72 73 func (actor Actor) CreateBitsPackageByApplication(appGUID string) (Package, Warnings, error) { 74 inputPackage := ccv3.Package{ 75 Type: constant.PackageTypeBits, 76 Relationships: ccv3.Relationships{ 77 constant.RelationshipTypeApplication: ccv3.Relationship{GUID: appGUID}, 78 }, 79 } 80 81 pkg, warnings, err := actor.CloudControllerClient.CreatePackage(inputPackage) 82 if err != nil { 83 return Package{}, Warnings(warnings), err 84 } 85 86 return Package(pkg), Warnings(warnings), err 87 } 88 89 func (actor Actor) UploadBitsPackage(pkg Package, matchedResources []sharedaction.V3Resource, newResources io.Reader, newResourcesLength int64) (Package, Warnings, error) { 90 apiResources := make([]ccv3.Resource, 0, len(matchedResources)) // Explicitly done to prevent nils 91 92 for _, resource := range matchedResources { 93 apiResources = append(apiResources, ccv3.Resource(resource)) 94 } 95 96 appPkg, warnings, err := actor.CloudControllerClient.UploadBitsPackage(ccv3.Package(pkg), apiResources, newResources, newResourcesLength) 97 return Package(appPkg), Warnings(warnings), err 98 } 99 100 // PollPackage returns a package of an app. 101 func (actor Actor) PollPackage(pkg Package) (Package, Warnings, error) { 102 var allWarnings Warnings 103 104 for pkg.State != constant.PackageReady && pkg.State != constant.PackageFailed && pkg.State != constant.PackageExpired { 105 time.Sleep(actor.Config.PollingInterval()) 106 ccPkg, warnings, err := actor.CloudControllerClient.GetPackage(pkg.GUID) 107 log.WithFields(log.Fields{ 108 "package_guid": pkg.GUID, 109 "state": pkg.State, 110 }).Debug("polling package state") 111 112 allWarnings = append(allWarnings, warnings...) 113 if err != nil { 114 return Package{}, allWarnings, err 115 } 116 117 pkg = Package(ccPkg) 118 } 119 120 if pkg.State == constant.PackageFailed { 121 return Package{}, allWarnings, actionerror.PackageProcessingFailedError{} 122 } else if pkg.State == constant.PackageExpired { 123 return Package{}, allWarnings, actionerror.PackageProcessingExpiredError{} 124 } 125 126 return pkg, allWarnings, nil 127 }