github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/command/v7/map_route_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/command/flag" 6 ) 7 8 type MapRouteCommand struct { 9 BaseCommand 10 11 RequiredArgs flag.AppDomain `positional-args:"yes"` 12 Hostname string `long:"hostname" short:"n" description:"Hostname for the HTTP route (required for shared domains)"` 13 Path flag.V7RoutePath `long:"path" description:"Path for the HTTP route"` 14 Port int `long:"port" description:"Port for the TCP route (default: random port)"` 15 relatedCommands interface{} `related_commands:"create-route, routes, unmap-route"` 16 } 17 18 func (cmd MapRouteCommand) Usage() string { 19 return ` 20 Map an HTTP route: 21 CF_NAME map-route APP_NAME DOMAIN [--hostname HOSTNAME] [--path PATH] 22 23 Map a TCP route: 24 CF_NAME map-route APP_NAME DOMAIN [--port PORT]` 25 } 26 27 func (cmd MapRouteCommand) Examples() string { 28 return ` 29 CF_NAME map-route my-app example.com # example.com 30 CF_NAME map-route my-app example.com --hostname myhost # myhost.example.com 31 CF_NAME map-route my-app example.com --hostname myhost --path foo # myhost.example.com/foo 32 CF_NAME map-route my-app example.com --port 5000 # example.com:5000` 33 } 34 35 func (cmd MapRouteCommand) Execute(args []string) error { 36 err := cmd.SharedActor.CheckTarget(true, true) 37 if err != nil { 38 return err 39 } 40 41 user, err := cmd.Config.CurrentUser() 42 if err != nil { 43 return err 44 } 45 46 domain, warnings, err := cmd.Actor.GetDomainByName(cmd.RequiredArgs.Domain) 47 cmd.UI.DisplayWarnings(warnings) 48 if err != nil { 49 return err 50 } 51 52 spaceGUID := cmd.Config.TargetedSpace().GUID 53 app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.App, spaceGUID) 54 cmd.UI.DisplayWarnings(warnings) 55 if err != nil { 56 return err 57 } 58 59 path := cmd.Path.Path 60 route, warnings, err := cmd.Actor.GetRouteByAttributes(domain, cmd.Hostname, path, cmd.Port) 61 url := desiredURL(domain.Name, cmd.Hostname, path, cmd.Port) 62 cmd.UI.DisplayWarnings(warnings) 63 if err != nil { 64 if _, ok := err.(actionerror.RouteNotFoundError); !ok { 65 return err 66 } 67 cmd.UI.DisplayTextWithFlavor("Creating route {{.URL}} for org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", 68 map[string]interface{}{ 69 "URL": url, 70 "User": user.Name, 71 "SpaceName": cmd.Config.TargetedSpace().Name, 72 "OrgName": cmd.Config.TargetedOrganization().Name, 73 }) 74 route, warnings, err = cmd.Actor.CreateRoute( 75 cmd.Config.TargetedSpace().GUID, 76 domain.Name, 77 cmd.Hostname, 78 path, 79 cmd.Port, 80 ) 81 cmd.UI.DisplayWarnings(warnings) 82 if err != nil { 83 return err 84 } 85 cmd.UI.DisplayOK() 86 } 87 88 cmd.UI.DisplayTextWithFlavor("Mapping route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{ 89 "URL": route.URL, 90 "AppName": cmd.RequiredArgs.App, 91 "User": user.Name, 92 "SpaceName": cmd.Config.TargetedSpace().Name, 93 "OrgName": cmd.Config.TargetedOrganization().Name, 94 }) 95 dest, err := cmd.Actor.GetRouteDestinationByAppGUID(route, app.GUID) 96 if err != nil { 97 if _, ok := err.(actionerror.RouteDestinationNotFoundError); !ok { 98 return err 99 } 100 } 101 if dest.GUID != "" { 102 cmd.UI.DisplayText("App '{{ .AppName }}' is already mapped to route '{{ .URL}}'.", map[string]interface{}{ 103 "AppName": cmd.RequiredArgs.App, 104 "URL": route.URL, 105 }) 106 cmd.UI.DisplayOK() 107 return nil 108 } 109 warnings, err = cmd.Actor.MapRoute(route.GUID, app.GUID) 110 cmd.UI.DisplayWarnings(warnings) 111 if err != nil { 112 return err 113 } 114 cmd.UI.DisplayOK() 115 116 return nil 117 }