github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/create_app_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/sharedaction" 5 "code.cloudfoundry.org/cli/actor/v7action" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/flag" 10 "code.cloudfoundry.org/cli/command/v7/shared" 11 "code.cloudfoundry.org/clock" 12 ) 13 14 //go:generate counterfeiter . CreateAppActor 15 16 type CreateAppActor interface { 17 CreateApplicationInSpace(app v7action.Application, spaceGUID string) (v7action.Application, v7action.Warnings, error) 18 } 19 20 type CreateAppCommand struct { 21 RequiredArgs flag.AppName `positional-args:"yes"` 22 AppType flag.AppType `long:"app-type" choice:"buildpack" choice:"docker" description:"App lifecycle type to stage and run the app" default:"buildpack"` 23 usage interface{} `usage:"CF_NAME create-app APP_NAME [--app-type (buildpack | docker)]"` 24 relatedCommands interface{} `related_commands:"app, apps, push"` 25 26 UI command.UI 27 Config command.Config 28 SharedActor command.SharedActor 29 Actor CreateAppActor 30 } 31 32 func (cmd *CreateAppCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 cmd.SharedActor = sharedaction.NewActor(config) 36 37 client, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 38 if err != nil { 39 return err 40 } 41 cmd.Actor = v7action.NewActor(client, config, nil, nil, clock.NewClock()) 42 43 return nil 44 } 45 46 func (cmd CreateAppCommand) Execute(args []string) error { 47 err := cmd.SharedActor.CheckTarget(true, true) 48 if err != nil { 49 return err 50 } 51 52 user, err := cmd.Config.CurrentUser() 53 if err != nil { 54 return err 55 } 56 57 cmd.UI.DisplayTextWithFlavor("Creating app {{.AppName}} in org {{.CurrentOrg}} / space {{.CurrentSpace}} as {{.CurrentUser}}...", map[string]interface{}{ 58 "AppName": cmd.RequiredArgs.AppName, 59 "CurrentSpace": cmd.Config.TargetedSpace().Name, 60 "CurrentOrg": cmd.Config.TargetedOrganization().Name, 61 "CurrentUser": user.Name, 62 }) 63 64 _, warnings, err := cmd.Actor.CreateApplicationInSpace( 65 v7action.Application{ 66 Name: cmd.RequiredArgs.AppName, 67 LifecycleType: constant.AppLifecycleType(cmd.AppType), 68 }, 69 cmd.Config.TargetedSpace().GUID, 70 ) 71 cmd.UI.DisplayWarnings(warnings) 72 if err != nil { 73 switch err.(type) { 74 case ccerror.NameNotUniqueInSpaceError: 75 cmd.UI.DisplayText(err.Error()) 76 default: 77 return err 78 } 79 } 80 81 cmd.UI.DisplayOK() 82 83 return nil 84 }