github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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/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 . MapRouteActor 14 15 type MapRouteActor interface { 16 GetApplicationByNameAndSpace(appName string, spaceGUID string) (v7action.Application, v7action.Warnings, error) 17 GetRouteByAttributes(domainName string, domainGUID string, hostname string, path string) (v7action.Route, v7action.Warnings, error) 18 GetDomainByName(domainName string) (v7action.Domain, v7action.Warnings, error) 19 CreateRoute(spaceGUID, domainName, hostname, path string) (v7action.Route, v7action.Warnings, error) 20 GetRouteDestinationByAppGUID(routeGUID string, appGUID string) (v7action.RouteDestination, v7action.Warnings, error) 21 MapRoute(routeGUID string, appGUID string) (v7action.Warnings, error) 22 } 23 24 type MapRouteCommand struct { 25 RequiredArgs flag.AppDomain `positional-args:"yes"` 26 usage interface{} `usage:"CF_NAME map-route APP_NAME DOMAIN [--hostname HOSTNAME] [--path PATH]\n\nEXAMPLES:\n CF_NAME map-route my-app example.com # example.com\n CF_NAME map-route my-app example.com --hostname myhost # myhost.example.com\n CF_NAME map-route my-app example.com --hostname myhost --path foo # myhost.example.com/foo"` 27 Hostname string `long:"hostname" short:"n" description:"Hostname for the HTTP route (required for shared domains)"` 28 Path flag.V7RoutePath `long:"path" description:"Path for the HTTP route"` 29 relatedCommands interface{} `related_commands:"create-route, routes, unmap-route"` 30 31 UI command.UI 32 Config command.Config 33 Actor MapRouteActor 34 SharedActor command.SharedActor 35 } 36 37 func (cmd *MapRouteCommand) 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 ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 44 if err != nil { 45 return err 46 } 47 cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock()) 48 return nil 49 } 50 51 func (cmd MapRouteCommand) Execute(args []string) error { 52 err := cmd.SharedActor.CheckTarget(true, true) 53 if err != nil { 54 return err 55 } 56 57 user, err := cmd.Config.CurrentUser() 58 if err != nil { 59 return err 60 } 61 62 domain, warnings, err := cmd.Actor.GetDomainByName(cmd.RequiredArgs.Domain) 63 cmd.UI.DisplayWarnings(warnings) 64 if err != nil { 65 return err 66 } 67 68 spaceGUID := cmd.Config.TargetedSpace().GUID 69 app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.App, spaceGUID) 70 cmd.UI.DisplayWarnings(warnings) 71 if err != nil { 72 return err 73 } 74 75 path := cmd.Path.Path 76 route, warnings, err := cmd.Actor.GetRouteByAttributes(domain.Name, domain.GUID, cmd.Hostname, path) 77 fqdn := desiredFQDN(domain.Name, cmd.Hostname, path) 78 cmd.UI.DisplayWarnings(warnings) 79 if err != nil { 80 if _, ok := err.(actionerror.RouteNotFoundError); !ok { 81 return err 82 } 83 cmd.UI.DisplayTextWithFlavor("Creating route {{.FQDN}} for org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", 84 map[string]interface{}{ 85 "FQDN": fqdn, 86 "User": user.Name, 87 "SpaceName": cmd.Config.TargetedSpace().Name, 88 "OrgName": cmd.Config.TargetedOrganization().Name, 89 }) 90 route, warnings, err = cmd.Actor.CreateRoute( 91 cmd.Config.TargetedSpace().GUID, 92 domain.Name, 93 cmd.Hostname, 94 path, 95 ) 96 cmd.UI.DisplayWarnings(warnings) 97 if err != nil { 98 return err 99 } 100 cmd.UI.DisplayOK() 101 } 102 103 cmd.UI.DisplayTextWithFlavor("Mapping route {{.FQDN}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.User}}...", map[string]interface{}{ 104 "FQDN": fqdn, 105 "AppName": cmd.RequiredArgs.App, 106 "User": user.Name, 107 "SpaceName": cmd.Config.TargetedSpace().Name, 108 "OrgName": cmd.Config.TargetedOrganization().Name, 109 }) 110 dest, warnings, err := cmd.Actor.GetRouteDestinationByAppGUID(route.GUID, app.GUID) 111 cmd.UI.DisplayWarnings(warnings) 112 if err != nil { 113 if _, ok := err.(actionerror.RouteDestinationNotFoundError); !ok { 114 return err 115 } 116 } 117 if dest.GUID != "" { 118 cmd.UI.DisplayText("App '{{ .AppName }}' is already mapped to route '{{ .FQDN }}'.", map[string]interface{}{ 119 "AppName": cmd.RequiredArgs.App, 120 "FQDN": fqdn, 121 }) 122 cmd.UI.DisplayOK() 123 return nil 124 } 125 warnings, err = cmd.Actor.MapRoute(route.GUID, app.GUID) 126 cmd.UI.DisplayWarnings(warnings) 127 if err != nil { 128 return err 129 } 130 cmd.UI.DisplayOK() 131 132 return nil 133 }