github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/actor/v3action/droplet.go (about) 1 package v3action 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 "code.cloudfoundry.org/cli/resources" 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 []Buildpack 19 } 20 21 type Buildpack resources.DropletBuildpack 22 23 // SetApplicationDropletByApplicationNameAndSpace sets the droplet for an application. 24 func (actor Actor) SetApplicationDropletByApplicationNameAndSpace(appName string, spaceGUID string, dropletGUID string) (Warnings, error) { 25 allWarnings := Warnings{} 26 application, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 27 allWarnings = append(allWarnings, warnings...) 28 if err != nil { 29 return allWarnings, err 30 } 31 _, apiWarnings, err := actor.CloudControllerClient.SetApplicationDroplet(application.GUID, dropletGUID) 32 actorWarnings := Warnings(apiWarnings) 33 allWarnings = append(allWarnings, actorWarnings...) 34 35 if newErr, ok := err.(ccerror.UnprocessableEntityError); ok { 36 return allWarnings, actionerror.AssignDropletError{Message: newErr.Message} 37 } 38 39 return allWarnings, err 40 } 41 42 func (actor Actor) SetApplicationDroplet(appGUID string, dropletGUID string) (Warnings, error) { 43 _, warnings, err := actor.CloudControllerClient.SetApplicationDroplet(appGUID, dropletGUID) 44 45 if newErr, ok := err.(ccerror.UnprocessableEntityError); ok { 46 return Warnings(warnings), actionerror.AssignDropletError{Message: newErr.Message} 47 } 48 49 return Warnings(warnings), err 50 } 51 52 // GetApplicationDroplets returns the list of droplets that belong to applicaiton. 53 func (actor Actor) GetApplicationDroplets(appName string, spaceGUID string) ([]Droplet, Warnings, error) { 54 allWarnings := Warnings{} 55 application, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 56 allWarnings = append(allWarnings, warnings...) 57 if err != nil { 58 return nil, allWarnings, err 59 } 60 61 ccv3Droplets, apiWarnings, err := actor.CloudControllerClient.GetDroplets( 62 ccv3.Query{Key: ccv3.AppGUIDFilter, Values: []string{application.GUID}}, 63 ) 64 actorWarnings := Warnings(apiWarnings) 65 allWarnings = append(allWarnings, actorWarnings...) 66 if err != nil { 67 return nil, allWarnings, err 68 } 69 70 var droplets []Droplet 71 for _, ccv3Droplet := range ccv3Droplets { 72 droplets = append(droplets, actor.convertCCToActorDroplet(ccv3Droplet)) 73 } 74 75 return droplets, allWarnings, err 76 } 77 78 func (actor Actor) GetCurrentDropletByApplication(appGUID string) (Droplet, Warnings, error) { 79 droplet, warnings, err := actor.CloudControllerClient.GetApplicationDropletCurrent(appGUID) 80 switch err.(type) { 81 case ccerror.ApplicationNotFoundError: 82 return Droplet{}, Warnings(warnings), actionerror.ApplicationNotFoundError{GUID: appGUID} 83 case ccerror.DropletNotFoundError: 84 return Droplet{}, Warnings(warnings), actionerror.DropletNotFoundError{AppGUID: appGUID} 85 } 86 return actor.convertCCToActorDroplet(droplet), Warnings(warnings), err 87 } 88 89 func (actor Actor) convertCCToActorDroplet(ccDroplet resources.Droplet) Droplet { 90 var buildpacks []Buildpack 91 for _, ccBuildpack := range ccDroplet.Buildpacks { 92 buildpacks = append(buildpacks, Buildpack(ccBuildpack)) 93 } 94 95 return Droplet{ 96 GUID: ccDroplet.GUID, 97 State: constant.DropletState(ccDroplet.State), 98 CreatedAt: ccDroplet.CreatedAt, 99 Stack: ccDroplet.Stack, 100 Buildpacks: buildpacks, 101 Image: ccDroplet.Image, 102 } 103 }