github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/create_route_command.go (about) 1 package v6 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v2action" 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/command/translatableerror" 10 "code.cloudfoundry.org/cli/command/v6/shared" 11 ) 12 13 //go:generate counterfeiter . CreateRouteActor 14 15 type CreateRouteActor interface { 16 CloudControllerAPIVersion() string 17 CreateRouteWithExistenceCheck(orgGUID string, spaceName string, route v2action.Route, generatePort bool) (v2action.Route, v2action.Warnings, error) 18 } 19 20 type CreateRouteCommand struct { 21 RequiredArgs flag.SpaceDomain `positional-args:"yes"` 22 Hostname string `long:"hostname" short:"n" description:"Hostname for the HTTP route (required for shared domains)"` 23 Path string `long:"path" description:"Path for the HTTP route"` 24 Port flag.Port `long:"port" description:"Port for the TCP route"` 25 RandomPort bool `long:"random-port" description:"Create a random port for the TCP route"` 26 usage interface{} `usage:"Create an HTTP route:\n CF_NAME create-route SPACE DOMAIN [--hostname HOSTNAME] [--path PATH]\n\n Create a TCP route:\n CF_NAME create-route SPACE DOMAIN (--port PORT | --random-port)\n\nEXAMPLES:\n CF_NAME create-route my-space example.com # example.com\n CF_NAME create-route my-space example.com --hostname myapp # myapp.example.com\n CF_NAME create-route my-space example.com --hostname myapp --path foo # myapp.example.com/foo\n CF_NAME create-route my-space example.com --port 5000 # example.com:5000"` 27 relatedCommands interface{} `related_commands:"check-route, domains, map-route"` 28 29 UI command.UI 30 Config command.Config 31 SharedActor command.SharedActor 32 Actor CreateRouteActor 33 } 34 35 func (cmd *CreateRouteCommand) Setup(config command.Config, ui command.UI) error { 36 cmd.Config = config 37 cmd.UI = ui 38 cmd.SharedActor = sharedaction.NewActor(config) 39 40 ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui) 41 if err != nil { 42 return err 43 } 44 cmd.Actor = v2action.NewActor(ccClient, uaaClient, config) 45 46 return nil 47 } 48 49 func (cmd CreateRouteCommand) Execute(args []string) error { 50 err := cmd.validateArguments() 51 if err != nil { 52 return err 53 } 54 55 err = cmd.SharedActor.CheckTarget(true, false) 56 if err != nil { 57 return err 58 } 59 60 user, err := cmd.Config.CurrentUser() 61 if err != nil { 62 return err 63 } 64 65 route := v2action.Route{ 66 Domain: v2action.Domain{Name: cmd.RequiredArgs.Domain}, 67 Host: cmd.Hostname, 68 Path: cmd.Path, 69 Port: cmd.Port.NullInt, 70 } 71 72 cmd.UI.DisplayTextWithFlavor("Creating route {{.Route}} for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 73 "Route": route, 74 "OrgName": cmd.Config.TargetedOrganization().Name, 75 "SpaceName": cmd.RequiredArgs.Space, 76 "Username": user.Name, 77 }) 78 79 createdRoute, warnings, err := cmd.Actor.CreateRouteWithExistenceCheck(cmd.Config.TargetedOrganization().GUID, cmd.RequiredArgs.Space, route, cmd.RandomPort) 80 cmd.UI.DisplayWarnings(warnings) 81 if err != nil { 82 if _, ok := err.(actionerror.RouteAlreadyExistsError); ok { 83 cmd.UI.DisplayWarning("Route {{.Route}} already exists.", map[string]interface{}{ 84 "Route": route, 85 }) 86 cmd.UI.DisplayOK() 87 return nil 88 } 89 90 return err 91 } 92 93 cmd.UI.DisplayTextWithFlavor("Route {{.Route}} has been created.", map[string]interface{}{ 94 "Route": createdRoute, 95 }) 96 97 cmd.UI.DisplayOK() 98 99 return nil 100 } 101 102 func (cmd CreateRouteCommand) validateArguments() error { 103 var failedArgs []string 104 105 if cmd.Hostname != "" { 106 failedArgs = append(failedArgs, "--hostname") 107 } 108 if cmd.Path != "" { 109 failedArgs = append(failedArgs, "--path") 110 } 111 if cmd.Port.IsSet { 112 failedArgs = append(failedArgs, "--port") 113 } 114 if cmd.RandomPort { 115 failedArgs = append(failedArgs, "--random-port") 116 } 117 118 switch { 119 case (cmd.Hostname != "" || cmd.Path != "") && (cmd.Port.IsSet || cmd.RandomPort), 120 cmd.Port.IsSet && cmd.RandomPort: 121 return translatableerror.ArgumentCombinationError{Args: failedArgs} 122 } 123 124 return nil 125 }