github.com/arunkumar7540/cli@v6.45.0+incompatible/actor/v7action/droplet.go (about) 1 package v7action 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 8 "io" 9 ) 10 11 // Droplet represents a Cloud Controller droplet. 12 type Droplet struct { 13 GUID string 14 State constant.DropletState 15 CreatedAt string 16 Stack string 17 Image string 18 Buildpacks []DropletBuildpack 19 } 20 21 type DropletBuildpack ccv3.DropletBuildpack 22 23 // CreateApplicationDroplet creates a new droplet without a package for the app with 24 // guid appGUID. 25 func (actor Actor) CreateApplicationDroplet(appGUID string) (Droplet, Warnings, error) { 26 ccDroplet, warnings, err := actor.CloudControllerClient.CreateDroplet(appGUID) 27 28 return actor.convertCCToActorDroplet(ccDroplet), Warnings(warnings), err 29 } 30 31 // SetApplicationDropletByApplicationNameAndSpace sets the droplet for an application. 32 func (actor Actor) SetApplicationDropletByApplicationNameAndSpace(appName string, spaceGUID string, dropletGUID string) (Warnings, error) { 33 allWarnings := Warnings{} 34 application, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 35 allWarnings = append(allWarnings, warnings...) 36 if err != nil { 37 return allWarnings, err 38 } 39 _, apiWarnings, err := actor.CloudControllerClient.SetApplicationDroplet(application.GUID, dropletGUID) 40 actorWarnings := Warnings(apiWarnings) 41 allWarnings = append(allWarnings, actorWarnings...) 42 43 if newErr, ok := err.(ccerror.UnprocessableEntityError); ok { 44 return allWarnings, actionerror.AssignDropletError{Message: newErr.Message} 45 } 46 47 return allWarnings, err 48 } 49 50 func (actor Actor) SetApplicationDroplet(appGUID string, dropletGUID string) (Warnings, error) { 51 _, warnings, err := actor.CloudControllerClient.SetApplicationDroplet(appGUID, dropletGUID) 52 53 if newErr, ok := err.(ccerror.UnprocessableEntityError); ok { 54 return Warnings(warnings), actionerror.AssignDropletError{Message: newErr.Message} 55 } 56 57 return Warnings(warnings), err 58 } 59 60 // GetApplicationDroplets returns the list of droplets that belong to application. 61 func (actor Actor) GetApplicationDroplets(appName string, spaceGUID string) ([]Droplet, Warnings, error) { 62 allWarnings := Warnings{} 63 application, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 64 allWarnings = append(allWarnings, warnings...) 65 if err != nil { 66 return nil, allWarnings, err 67 } 68 69 ccv3Droplets, apiWarnings, err := actor.CloudControllerClient.GetDroplets( 70 ccv3.Query{Key: ccv3.AppGUIDFilter, Values: []string{application.GUID}}, 71 ) 72 actorWarnings := Warnings(apiWarnings) 73 allWarnings = append(allWarnings, actorWarnings...) 74 if err != nil { 75 return nil, allWarnings, err 76 } 77 78 var droplets []Droplet 79 for _, ccv3Droplet := range ccv3Droplets { 80 droplets = append(droplets, actor.convertCCToActorDroplet(ccv3Droplet)) 81 } 82 83 return droplets, allWarnings, err 84 } 85 86 func (actor Actor) GetCurrentDropletByApplication(appGUID string) (Droplet, Warnings, error) { 87 droplet, warnings, err := actor.CloudControllerClient.GetApplicationDropletCurrent(appGUID) 88 switch err.(type) { 89 case ccerror.ApplicationNotFoundError: 90 return Droplet{}, Warnings(warnings), actionerror.ApplicationNotFoundError{GUID: appGUID} 91 case ccerror.DropletNotFoundError: 92 return Droplet{}, Warnings(warnings), actionerror.DropletNotFoundError{AppGUID: appGUID} 93 } 94 return actor.convertCCToActorDroplet(droplet), Warnings(warnings), err 95 } 96 97 func (actor Actor) UploadDroplet(dropletGUID string, dropletPath string, progressReader io.Reader, size int64) (Warnings, error) { 98 var allWarnings Warnings 99 100 jobURL, uploadWarnings, err := actor.CloudControllerClient.UploadDropletBits(dropletGUID, dropletPath, progressReader, size) 101 allWarnings = append(allWarnings, uploadWarnings...) 102 if err != nil { 103 return allWarnings, err 104 } 105 106 jobWarnings, jobErr := actor.CloudControllerClient.PollJob(jobURL) 107 allWarnings = append(allWarnings, jobWarnings...) 108 if jobErr != nil { 109 return allWarnings, jobErr 110 } 111 112 return allWarnings, nil 113 } 114 115 func (actor Actor) convertCCToActorDroplet(ccDroplet ccv3.Droplet) Droplet { 116 var buildpacks []DropletBuildpack 117 for _, ccBuildpack := range ccDroplet.Buildpacks { 118 buildpacks = append(buildpacks, DropletBuildpack(ccBuildpack)) 119 } 120 121 return Droplet{ 122 GUID: ccDroplet.GUID, 123 State: ccDroplet.State, 124 CreatedAt: ccDroplet.CreatedAt, 125 Stack: ccDroplet.Stack, 126 Buildpacks: buildpacks, 127 Image: ccDroplet.Image, 128 } 129 }