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