github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/v3/v3_create_package_command.go (about)

     1  package v3
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"code.cloudfoundry.org/cli/actor/sharedaction"
     7  	"code.cloudfoundry.org/cli/actor/v3action"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
    10  	"code.cloudfoundry.org/cli/command"
    11  	"code.cloudfoundry.org/cli/command/flag"
    12  	"code.cloudfoundry.org/cli/command/translatableerror"
    13  	"code.cloudfoundry.org/cli/command/v3/shared"
    14  )
    15  
    16  //go:generate counterfeiter . V3CreatePackageActor
    17  
    18  type V3CreatePackageActor interface {
    19  	CloudControllerAPIVersion() string
    20  	CreateDockerPackageByApplicationNameAndSpace(appName string, spaceGUID string, dockerImageCredentials v3action.DockerImageCredentials) (v3action.Package, v3action.Warnings, error)
    21  	CreateAndUploadBitsPackageByApplicationNameAndSpace(appName string, spaceGUID string, bitsPath string) (v3action.Package, v3action.Warnings, error)
    22  }
    23  
    24  type V3CreatePackageCommand struct {
    25  	RequiredArgs flag.AppName     `positional-args:"yes"`
    26  	DockerImage  flag.DockerImage `long:"docker-image" short:"o" description:"Docker-image to be used (e.g. user/docker-image-name)"`
    27  	usage        interface{}      `usage:"CF_NAME v3-create-package APP_NAME [--docker-image [REGISTRY_HOST:PORT/]IMAGE[:TAG]]"`
    28  
    29  	UI          command.UI
    30  	Config      command.Config
    31  	SharedActor command.SharedActor
    32  	Actor       V3CreatePackageActor
    33  
    34  	PackageDisplayer shared.PackageDisplayer
    35  }
    36  
    37  func (cmd *V3CreatePackageCommand) Setup(config command.Config, ui command.UI) error {
    38  	cmd.UI = ui
    39  	cmd.Config = config
    40  	sharedActor := sharedaction.NewActor(config)
    41  	cmd.SharedActor = sharedActor
    42  
    43  	client, _, err := shared.NewClients(config, ui, true)
    44  	if err != nil {
    45  		if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound {
    46  			return translatableerror.MinimumAPIVersionNotMetError{MinimumVersion: ccversion.MinVersionV3}
    47  		}
    48  
    49  		return err
    50  	}
    51  	cmd.Actor = v3action.NewActor(sharedActor, client, config)
    52  
    53  	cmd.PackageDisplayer = shared.NewPackageDisplayer(cmd.UI, cmd.Config)
    54  
    55  	return nil
    56  }
    57  
    58  func (cmd V3CreatePackageCommand) Execute(args []string) error {
    59  	cmd.UI.DisplayText(command.ExperimentalWarning)
    60  	cmd.UI.DisplayNewline()
    61  
    62  	err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionV3)
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	err = cmd.SharedActor.CheckTarget(cmd.Config, true, true)
    68  	if err != nil {
    69  		return shared.HandleError(err)
    70  	}
    71  
    72  	isDockerImage := (cmd.DockerImage.Path != "")
    73  	err = cmd.PackageDisplayer.DisplaySetupMessage(cmd.RequiredArgs.AppName, isDockerImage)
    74  	if err != nil {
    75  		return shared.HandleError(err)
    76  	}
    77  
    78  	var (
    79  		pkg      v3action.Package
    80  		warnings v3action.Warnings
    81  	)
    82  	if isDockerImage {
    83  		pkg, warnings, err = cmd.Actor.CreateDockerPackageByApplicationNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID, v3action.DockerImageCredentials{Path: cmd.DockerImage.Path})
    84  	} else {
    85  		pkg, warnings, err = cmd.Actor.CreateAndUploadBitsPackageByApplicationNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID, "")
    86  	}
    87  
    88  	cmd.UI.DisplayWarnings(warnings)
    89  	if err != nil {
    90  		return shared.HandleError(err)
    91  	}
    92  
    93  	cmd.UI.DisplayText("package guid: {{.PackageGuid}}", map[string]interface{}{
    94  		"PackageGuid": pkg.GUID,
    95  	})
    96  	cmd.UI.DisplayOK()
    97  
    98  	return nil
    99  }