github.com/arunkumar7540/cli@v6.45.0+incompatible/actor/v7action/package.go (about)

     1  package v7action
     2  
     3  import (
     4  	"io"
     5  	"time"
     6  
     7  	"code.cloudfoundry.org/cli/actor/actionerror"
     8  	"code.cloudfoundry.org/cli/actor/sharedaction"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
    11  	log "github.com/sirupsen/logrus"
    12  )
    13  
    14  const (
    15  	DefaultFolderPermissions      = 0755
    16  	DefaultArchiveFilePermissions = 0744
    17  )
    18  
    19  type Package ccv3.Package
    20  
    21  type DockerImageCredentials struct {
    22  	Path     string
    23  	Username string
    24  	Password string
    25  }
    26  
    27  func (actor Actor) CreateDockerPackageByApplication(appGUID string, dockerImageCredentials DockerImageCredentials) (Package, Warnings, error) {
    28  	inputPackage := ccv3.Package{
    29  		Type: constant.PackageTypeDocker,
    30  		Relationships: ccv3.Relationships{
    31  			constant.RelationshipTypeApplication: ccv3.Relationship{GUID: appGUID},
    32  		},
    33  		DockerImage:    dockerImageCredentials.Path,
    34  		DockerUsername: dockerImageCredentials.Username,
    35  		DockerPassword: dockerImageCredentials.Password,
    36  	}
    37  	pkg, warnings, err := actor.CloudControllerClient.CreatePackage(inputPackage)
    38  	return Package(pkg), Warnings(warnings), err
    39  }
    40  
    41  func (actor Actor) CreateDockerPackageByApplicationNameAndSpace(appName string, spaceGUID string, dockerImageCredentials DockerImageCredentials) (Package, Warnings, error) {
    42  	app, getWarnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID)
    43  	if err != nil {
    44  		return Package{}, getWarnings, err
    45  	}
    46  	pkg, warnings, err := actor.CreateDockerPackageByApplication(app.GUID, dockerImageCredentials)
    47  	return pkg, append(getWarnings, warnings...), err
    48  }
    49  
    50  // GetApplicationPackages returns a list of package of an app.
    51  func (actor *Actor) GetApplicationPackages(appName string, spaceGUID string) ([]Package, Warnings, error) {
    52  	app, allWarnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID)
    53  	if err != nil {
    54  		return nil, allWarnings, err
    55  	}
    56  
    57  	ccv3Packages, warnings, err := actor.CloudControllerClient.GetPackages(
    58  		ccv3.Query{Key: ccv3.AppGUIDFilter, Values: []string{app.GUID}},
    59  	)
    60  	allWarnings = append(allWarnings, warnings...)
    61  	if err != nil {
    62  		return nil, allWarnings, err
    63  	}
    64  
    65  	var packages []Package
    66  	for _, ccv3Package := range ccv3Packages {
    67  		packages = append(packages, Package(ccv3Package))
    68  	}
    69  
    70  	return packages, allWarnings, nil
    71  }
    72  
    73  func (actor Actor) CreateBitsPackageByApplication(appGUID string) (Package, Warnings, error) {
    74  	inputPackage := ccv3.Package{
    75  		Type: constant.PackageTypeBits,
    76  		Relationships: ccv3.Relationships{
    77  			constant.RelationshipTypeApplication: ccv3.Relationship{GUID: appGUID},
    78  		},
    79  	}
    80  
    81  	pkg, warnings, err := actor.CloudControllerClient.CreatePackage(inputPackage)
    82  	if err != nil {
    83  		return Package{}, Warnings(warnings), err
    84  	}
    85  
    86  	return Package(pkg), Warnings(warnings), err
    87  }
    88  
    89  func (actor Actor) UploadBitsPackage(pkg Package, matchedResources []sharedaction.V3Resource, newResources io.Reader, newResourcesLength int64) (Package, Warnings, error) {
    90  	apiResources := make([]ccv3.Resource, 0, len(matchedResources)) // Explicitly done to prevent nils
    91  
    92  	for _, resource := range matchedResources {
    93  		apiResources = append(apiResources, ccv3.Resource(resource))
    94  	}
    95  
    96  	appPkg, warnings, err := actor.CloudControllerClient.UploadBitsPackage(ccv3.Package(pkg), apiResources, newResources, newResourcesLength)
    97  	return Package(appPkg), Warnings(warnings), err
    98  }
    99  
   100  // PollPackage returns a package of an app.
   101  func (actor Actor) PollPackage(pkg Package) (Package, Warnings, error) {
   102  	var allWarnings Warnings
   103  
   104  	for pkg.State != constant.PackageReady && pkg.State != constant.PackageFailed && pkg.State != constant.PackageExpired {
   105  		time.Sleep(actor.Config.PollingInterval())
   106  		ccPkg, warnings, err := actor.CloudControllerClient.GetPackage(pkg.GUID)
   107  		log.WithFields(log.Fields{
   108  			"package_guid": pkg.GUID,
   109  			"state":        pkg.State,
   110  		}).Debug("polling package state")
   111  
   112  		allWarnings = append(allWarnings, warnings...)
   113  		if err != nil {
   114  			return Package{}, allWarnings, err
   115  		}
   116  
   117  		pkg = Package(ccPkg)
   118  	}
   119  
   120  	if pkg.State == constant.PackageFailed {
   121  		return Package{}, allWarnings, actionerror.PackageProcessingFailedError{}
   122  	} else if pkg.State == constant.PackageExpired {
   123  		return Package{}, allWarnings, actionerror.PackageProcessingExpiredError{}
   124  	}
   125  
   126  	return pkg, allWarnings, nil
   127  }