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  }