github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/actor/v3action/droplet.go (about) 1 package v3action 2 3 import ( 4 "net/url" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 8 ) 9 10 type DropletState string 11 12 const ( 13 DropletStateStaged DropletState = "STAGED" 14 DropletStateFailed DropletState = "FAILED" 15 DropletStateCopying DropletState = "COPYING" 16 DropletStateExpired DropletState = "EXPIRED" 17 ) 18 19 // Droplet represents a Cloud Controller droplet. 20 type Droplet struct { 21 GUID string 22 State DropletState 23 CreatedAt string 24 Stack string 25 Image string 26 Buildpacks []Buildpack 27 } 28 29 type Buildpack ccv3.DropletBuildpack 30 31 // AssignDropletError is returned when assigning the current droplet of an app 32 // fails 33 type AssignDropletError struct { 34 Message string 35 } 36 37 func (a AssignDropletError) Error() string { 38 return a.Message 39 } 40 41 // SetApplicationDroplet sets the droplet for an application. 42 func (actor Actor) SetApplicationDroplet(appName string, spaceGUID string, dropletGUID string) (Warnings, error) { 43 allWarnings := Warnings{} 44 application, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 45 allWarnings = append(allWarnings, warnings...) 46 if err != nil { 47 return allWarnings, err 48 } 49 _, apiWarnings, err := actor.CloudControllerClient.SetApplicationDroplet(application.GUID, dropletGUID) 50 actorWarnings := Warnings(apiWarnings) 51 allWarnings = append(allWarnings, actorWarnings...) 52 53 if newErr, ok := err.(ccerror.UnprocessableEntityError); ok { 54 return allWarnings, AssignDropletError{Message: newErr.Message} 55 } 56 57 return allWarnings, err 58 } 59 60 // GetApplicationDroplets returns the list of droplets that belong to applicaiton. 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.GetApplicationDroplets(application.GUID, url.Values{}) 70 actorWarnings := Warnings(apiWarnings) 71 allWarnings = append(allWarnings, actorWarnings...) 72 if err != nil { 73 return nil, allWarnings, err 74 } 75 76 var droplets []Droplet 77 for _, ccv3Droplet := range ccv3Droplets { 78 droplets = append(droplets, actor.convertCCToActorDroplet(ccv3Droplet)) 79 } 80 81 return droplets, allWarnings, err 82 } 83 84 func (actor Actor) convertCCToActorDroplet(ccv3Droplet ccv3.Droplet) Droplet { 85 var buildpacks []Buildpack 86 for _, ccv3Buildpack := range ccv3Droplet.Buildpacks { 87 buildpacks = append(buildpacks, Buildpack(ccv3Buildpack)) 88 } 89 90 return Droplet{ 91 GUID: ccv3Droplet.GUID, 92 State: DropletState(ccv3Droplet.State), 93 CreatedAt: ccv3Droplet.CreatedAt, 94 Stack: ccv3Droplet.Stack, 95 Buildpacks: buildpacks, 96 Image: ccv3Droplet.Image, 97 } 98 }