github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/cf/commands/route/routes.go (about) 1 package route 2 3 import ( 4 "errors" 5 "fmt" 6 "strings" 7 8 "code.cloudfoundry.org/cli/cf/flags" 9 . "code.cloudfoundry.org/cli/cf/i18n" 10 11 "code.cloudfoundry.org/cli/cf/api" 12 "code.cloudfoundry.org/cli/cf/commandregistry" 13 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 14 "code.cloudfoundry.org/cli/cf/models" 15 "code.cloudfoundry.org/cli/cf/requirements" 16 "code.cloudfoundry.org/cli/cf/terminal" 17 ) 18 19 type ListRoutes struct { 20 ui terminal.UI 21 routeRepo api.RouteRepository 22 domainRepo api.DomainRepository 23 config coreconfig.Reader 24 } 25 26 func init() { 27 commandregistry.Register(&ListRoutes{}) 28 } 29 30 func (cmd *ListRoutes) MetaData() commandregistry.CommandMetadata { 31 fs := make(map[string]flags.FlagSet) 32 fs["orglevel"] = &flags.BoolFlag{Name: "orglevel", Usage: T("List all the routes for all spaces of current organization")} 33 34 return commandregistry.CommandMetadata{ 35 Name: "routes", 36 ShortName: "r", 37 Description: T("List all routes in the current space or the current organization"), 38 Usage: []string{ 39 "CF_NAME routes [--orglevel]", 40 }, 41 Flags: fs, 42 } 43 } 44 45 func (cmd *ListRoutes) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { 46 usageReq := requirements.NewUsageRequirement(commandregistry.CLICommandUsagePresenter(cmd), 47 T("No argument required"), 48 func() bool { 49 return len(fc.Args()) != 0 50 }, 51 ) 52 53 reqs := []requirements.Requirement{ 54 usageReq, 55 requirementsFactory.NewLoginRequirement(), 56 } 57 58 orglevel := fc.Bool("orglevel") 59 if !orglevel { 60 reqs = append(reqs, requirementsFactory.NewTargetedSpaceRequirement()) 61 } 62 63 return reqs, nil 64 } 65 66 func (cmd *ListRoutes) SetDependency(deps commandregistry.Dependency, pluginCall bool) commandregistry.Command { 67 cmd.ui = deps.UI 68 cmd.config = deps.Config 69 cmd.routeRepo = deps.RepoLocator.GetRouteRepository() 70 cmd.domainRepo = deps.RepoLocator.GetDomainRepository() 71 return cmd 72 } 73 74 func (cmd *ListRoutes) Execute(c flags.FlagContext) error { 75 orglevel := c.Bool("orglevel") 76 77 if orglevel { 78 cmd.ui.Say(T("Getting routes for org {{.OrgName}} as {{.Username}} ...\n", 79 map[string]interface{}{ 80 "Username": terminal.EntityNameColor(cmd.config.Username()), 81 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 82 })) 83 } else { 84 cmd.ui.Say(T("Getting routes for org {{.OrgName}} / space {{.SpaceName}} as {{.Username}} ...\n", 85 map[string]interface{}{ 86 "Username": terminal.EntityNameColor(cmd.config.Username()), 87 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 88 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 89 })) 90 } 91 92 table := cmd.ui.Table([]string{T("space"), T("host"), T("domain"), T("port"), T("path"), T("type"), T("apps"), T("service")}) 93 94 d := make(map[string]models.DomainFields) 95 err := cmd.domainRepo.ListDomainsForOrg(cmd.config.OrganizationFields().GUID, func(domain models.DomainFields) bool { 96 d[domain.GUID] = domain 97 return true 98 }) 99 if err != nil { 100 return errors.New(T("Failed fetching domains for organization {{.OrgName}}.\n{{.Err}}", 101 map[string]interface{}{ 102 "Err": err.Error(), 103 "OrgName": cmd.config.OrganizationFields().Name, 104 }, 105 )) 106 } 107 108 var routesFound bool 109 cb := func(route models.Route) bool { 110 routesFound = true 111 appNames := []string{} 112 for _, app := range route.Apps { 113 appNames = append(appNames, app.Name) 114 } 115 116 var port string 117 if route.Port != 0 { 118 port = fmt.Sprintf("%d", route.Port) 119 } 120 121 domain := d[route.Domain.GUID] 122 123 table.Add( 124 route.Space.Name, 125 route.Host, 126 route.Domain.Name, 127 port, 128 route.Path, 129 domain.RouterGroupType, 130 strings.Join(appNames, ","), 131 route.ServiceInstance.Name, 132 ) 133 return true 134 } 135 136 if orglevel { 137 err = cmd.routeRepo.ListAllRoutes(cb) 138 } else { 139 err = cmd.routeRepo.ListRoutes(cb) 140 } 141 if err != nil { 142 return errors.New(T("Failed fetching routes.\n{{.Err}}", map[string]interface{}{"Err": err.Error()})) 143 } 144 145 err = table.Print() 146 if err != nil { 147 return err 148 } 149 150 if !routesFound { 151 cmd.ui.Say(T("No routes found")) 152 } 153 return nil 154 }