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  }