Skip to content

Add UDPRoute reference navigation and curated columns - #2014

Open
nadaverell wants to merge 1 commit into
feature/relationship-gateway-identitiesfrom
feature/relationship-gateway-udp-route
Open

nadaverell wants to merge 1 commit into
feature/relationship-gateway-identitiesfrom
feature/relationship-gateway-udp-route

Conversation

@nadaverell

@nadaverell nadaverell commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

UDPRoute currently falls through to the generic drawer even though its Gateway API references share the same contract as the existing L4 route renderer. Reuse that renderer and the exact-identity reference helpers from #2006, so a declared parent or backend opens the correct API group, namespace and Kind. Add the corresponding Parents/Backends/Rules columns and existing controller-evidence status treatment.

The new dispatch and curated columns are gated to gateway.networking.k8s.io; an unrelated CRD with the udproutes plural stays generic. A route without controller reports stays Unknown. Accepted describes current controller conditions, not UDP traffic health.

Surfaces: shared drawer/table/status and existing generic resource reads. Backend topology/context, diagnose/trace/detectors, traffic graph, startup collection, timeline/home prioritization and broader Gateway integration are separate. The integration-read baseline explicitly withholds UDPRoute permission; this PR grants no new access. This is a stack on #2006, which supplies the shared reference identity fix.

Validation: 451 focused tests, make tsc, complete make build, and the full shared UI suite (4160 passed, one skipped). Actual Gateway API v1.4.0 experimental CRDs in an isolated kind fixture: the UDPRoute drawer opened its Gateway, core UDP Service, and cross-namespace custom Widget with exact identities, with zero page errors. No Gateway controller or UDP network probe was run; this proves declared-reference navigation. Visual-test: one inspected capture attached. Focused self/product review complete; independent review deferred per request.

Primary contract: Gateway API v1.4.0 UDPRoute types.

gateway-udp-route


Note

Low Risk
UI-only changes with apiGroup gating; integration permissions explicitly withheld and no backend collection or topology changes.

Overview
Adds first-class UI support for Gateway API UDPRoute (gateway.networking.k8s.io), reusing the existing L4 SimpleRouteRenderer and RouteCell table path so parents, backends, and rules show with the same reference navigation as TCP/TLS routes.

Gating: Dispatch, drawer rendering, and route status only apply when apiVersion is gateway.networking.k8s.io; other CRDs that share the udproutes plural keep the generic drawer. Status stays controller-evidence based (getRouteStatus), not UDP traffic health.

Table: New curated columns (status, parents, backends, rules, age) and group ownership for udproutes; display name mapping in formatKindName.

Policy: Integration-read baseline documents udproutes as withhold—experimental drawer only; no new Radar Cloud read grants in this PR.

Tests update curated-column counts and add dispatch/reference coverage for UDPRoute.

Reviewed by Cursor Bugbot for commit 96ca8b9. Bugbot is set up for automated code reviews on this repo. Configure here.

@nadaverell
nadaverell requested a review from hisco as a code owner October 7, 2026 07:17
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Add group-scoped UDPRoute navigation and curated columns

✨ Enhancement 🧪 Tests ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Reuse the L4 route drawer for UDPRoute parent and backend navigation.
• Add Gateway API-scoped columns and controller-evidence status while preserving generic handling
 for foreign CRDs.
• Cover dispatch, reference identity, and columns; explicitly withhold new integration read access.
Diagram

graph TD
  A["Resource data"] --> B{"Gateway API?"} -->|yes| C["Route renderer"] --> D["Reference identity"] --> E["Target drawer"]
  B -->|yes| F["Curated columns"] --> G["Route status"]
  B -->|no| H["Generic view"]
Loading
High-Level Assessment

Reusing the L4 renderer and existing reference helpers fits UDPRoute's shared route contract. A separate renderer would duplicate navigation and status presentation; plural-only dispatch would incorrectly claim unrelated CRDs. Keep the explicit permission withhold until collection and topology support are addressed separately.

Files changed (10) +98 / -11

Enhancement (5) +20 / -6
ResourcesView.tsxAdd Gateway API-scoped UDPRoute table columns +11/-0

Add Gateway API-scoped UDPRoute table columns

• Adds Parents, Backends, Rules, and controller-evidence Status alongside standard columns. Declares Gateway API ownership and uses the shared route cell renderer.

packages/k8s-ui/src/components/resources/ResourcesView.tsx

SimpleRouteRenderer.tsxAllow UDPRoute in the shared L4 route drawer +1/-1

Allow UDPRoute in the shared L4 route drawer

• Extends the renderer's accepted route kinds to UDPRoute. Its existing parent and backend badges use the shared Gateway reference-identity helpers.

packages/k8s-ui/src/components/resources/renderers/SimpleRouteRenderer.tsx

resource-utils.tsInclude UDPRoute in route-status filtering +2/-2

Include UDPRoute in route-status filtering

• Uses shared route status text for UDPRoute status filters only when its API version belongs to the Gateway API group. Updates the route-utility comment to reflect the additional consumer.

packages/k8s-ui/src/components/resources/resource-utils.ts

ResourceRendererDispatch.tsxDispatch official UDPRoute to shared rendering and status +5/-2

Dispatch official UDPRoute to shared rendering and status

• Recognizes UDPRoute as a specialized kind only for the Gateway API group and renders it with SimpleRouteRenderer. Applies shared controller-evidence route status under the same group check.

packages/k8s-ui/src/components/shared/ResourceRendererDispatch.tsx

drawer-components.tsxDisplay the UDPRoute kind name in drawers +1/-1

Display the UDPRoute kind name in drawers

• Adds the UDPRoute plural to the drawer's kind-name mapping.

packages/k8s-ui/src/components/ui/drawer-components.tsx

Tests (4) +71 / -5
curated-column-ownership.test.tsAccount for UDPRoute in curated-column ownership checks +3/-3

Account for UDPRoute in curated-column ownership checks

• Updates expected curated and owned column-set counts so the extraction and ownership guards continue covering the complete tables.

packages/k8s-ui/src/components/resources/curated-column-ownership.test.ts

GatewayRouteReferences.test.tsxVerify UDPRoute reference-click identity +1/-1

Verify UDPRoute reference-click identity

• Extends shared route navigation coverage to UDPRoute, checking explicit parent and backend identities and default Service identity.

packages/k8s-ui/src/components/resources/renderers/GatewayRouteReferences.test.tsx

UDPRouteDispatch.test.tsxTest UDPRoute dispatch and status isolation +66/-0

Test UDPRoute dispatch and status isolation

• Checks that an official UDPRoute receives route sections, while a foreign resource with the colliding plural stays generic. Also verifies Unknown without controller reports, Accepted with supporting conditions, and no Accepted verdict for a foreign API version.

packages/k8s-ui/src/components/resources/renderers/UDPRouteDispatch.test.tsx

rules-column-width.test.tsGuard UDPRoute Rules column width +1/-1

Guard UDPRoute Rules column width

• Adds UDPRoute to the existing check that route Rules columns have at least the required width.

packages/k8s-ui/src/components/resources/rules-column-width.test.ts

Other (1) +7 / -0
integration-read-baseline.yamlRecord UDPRoute integration access as withheld +7/-0

Record UDPRoute integration access as withheld

• Adds an explicit, namespaced Gateway API UDPRoute policy entry. It withholds integration-read permission because startup collection and backend topology are outside this PR.

deploy/helm/radar/files/integration-read-baseline.yaml

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can route each severity your way: inline, summary, both, or drop

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant