github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/create_route_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v7action" 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/command/v7/shared" 10 "code.cloudfoundry.org/clock" 11 ) 12 13 //go:generate counterfeiter . CreateRouteActor 14 15 type CreateRouteActor interface { 16 CreateRoute(spaceGUID, domainName, hostname, path string) (v7action.Route, v7action.Warnings, error) 17 } 18 19 type CreateRouteCommand struct { 20 RequiredArgs flag.Domain `positional-args:"yes"` 21 usage interface{} `usage:"CF_NAME create-route DOMAIN [--hostname HOSTNAME] [--path PATH]\n\nEXAMPLES:\n CF_NAME create-route example.com # example.com\n CF_NAME create-route example.com --hostname myapp # myapp.example.com\n CF_NAME create-route example.com --hostname myapp --path foo # myapp.example.com/foo"` 22 Hostname string `long:"hostname" short:"n" description:"Hostname for the HTTP route (required for shared domains)"` 23 Path flag.V7RoutePath `long:"path" description:"Path for the HTTP route"` 24 relatedCommands interface{} `related_commands:"check-route, domains, map-route, routes, unmap-route"` 25 26 UI command.UI 27 Config command.Config 28 Actor CreateRouteActor 29 SharedActor command.SharedActor 30 } 31 32 func (cmd *CreateRouteCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 sharedActor := sharedaction.NewActor(config) 36 cmd.SharedActor = sharedActor 37 38 ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 39 if err != nil { 40 return err 41 } 42 cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock()) 43 return nil 44 } 45 46 func (cmd CreateRouteCommand) 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 domain := cmd.RequiredArgs.Domain 58 hostname := cmd.Hostname 59 pathName := cmd.Path.Path 60 spaceName := cmd.Config.TargetedSpace().Name 61 orgName := cmd.Config.TargetedOrganization().Name 62 spaceGUID := cmd.Config.TargetedSpace().GUID 63 fqdn := desiredFQDN(domain, hostname, pathName) 64 65 cmd.UI.DisplayTextWithFlavor("Creating route {{.FQDN}} for org {{.Organization}} / space {{.Space}} as {{.User}}...", 66 map[string]interface{}{ 67 "FQDN": fqdn, 68 "User": user.Name, 69 "Space": spaceName, 70 "Organization": orgName, 71 }) 72 73 _, warnings, err := cmd.Actor.CreateRoute(spaceGUID, domain, hostname, pathName) 74 75 cmd.UI.DisplayWarnings(warnings) 76 if err != nil { 77 if _, ok := err.(actionerror.RouteAlreadyExistsError); ok { 78 cmd.UI.DisplayWarning(err.Error()) 79 cmd.UI.DisplayOK() 80 return nil 81 } 82 return err 83 } 84 85 cmd.UI.DisplayText("Route {{.FQDN}} has been created.", 86 map[string]interface{}{ 87 "FQDN": fqdn, 88 }) 89 90 cmd.UI.DisplayOK() 91 return nil 92 } 93 94 func desiredFQDN(domain, hostname, path string) string { 95 fqdn := "" 96 97 if hostname != "" { 98 fqdn += hostname + "." 99 } 100 fqdn += domain 101 102 if path != "" { 103 fqdn += path 104 } 105 106 return fqdn 107 }