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  }