From ecd3e4d377b26cb07be8a96b5ec3042098ff1e2b Mon Sep 17 00:00:00 2001 From: rcourtman Date: Sun, 24 May 2026 14:21:25 +0100 Subject: [PATCH] Add Kubernetes networking native table --- .../subsystems/frontend-primitives.md | 5 +- .../v6/internal/subsystems/monitoring.md | 14 +- .../internal/subsystems/unified-resources.md | 8 + .../kubernetes/KubernetesInventoryTable.tsx | 7 +- .../kubernetes/KubernetesNetworkingTable.tsx | 352 ++++++++++++++++++ .../kubernetes/KubernetesPageSurface.tsx | 4 +- .../KubernetesNetworkingTable.test.tsx | 95 +++++ .../KubernetesPageSurface.contract.test.tsx | 61 +++ internal/mock/demo_scenarios.go | 3 + internal/mock/generator.go | 60 +++ internal/mock/generator_test.go | 24 ++ .../mock/platform_support_contract_test.go | 14 + 12 files changed, 633 insertions(+), 14 deletions(-) create mode 100644 frontend-modern/src/features/kubernetes/KubernetesNetworkingTable.tsx create mode 100644 frontend-modern/src/features/kubernetes/__tests__/KubernetesNetworkingTable.test.tsx diff --git a/docs/release-control/v6/internal/subsystems/frontend-primitives.md b/docs/release-control/v6/internal/subsystems/frontend-primitives.md index 48183f3b4..2e1950f41 100644 --- a/docs/release-control/v6/internal/subsystems/frontend-primitives.md +++ b/docs/release-control/v6/internal/subsystems/frontend-primitives.md @@ -182,7 +182,10 @@ through a dedicated native tab, not only the overview stack, while retaining the shared `PlatformSectionTabs` shell. Kubernetes storage inventory must likewise stay on the shared tab, toolbar, table, table-alignment, and inline-detail primitives while the unified-resource owner supplies StorageClass, -PersistentVolume, and PersistentVolumeClaim-specific columns. +PersistentVolume, and PersistentVolumeClaim-specific columns. Kubernetes +networking inventory follows that same primitive boundary while the +unified-resource owner supplies Service, Ingress, and EndpointSlice-specific +columns. 1. `frontend-modern/src/components/Settings/APIAccessPanel.tsx` shared with `security-privacy`: the API Access settings intro is both a security/privacy token-management trust surface and a canonical settings-shell presentation boundary. The panel may own shell placement and local action layout, but diff --git a/docs/release-control/v6/internal/subsystems/monitoring.md b/docs/release-control/v6/internal/subsystems/monitoring.md index 33b62b108..64aee3a6c 100644 --- a/docs/release-control/v6/internal/subsystems/monitoring.md +++ b/docs/release-control/v6/internal/subsystems/monitoring.md @@ -63,8 +63,9 @@ truth for live infrastructure data. 39. `internal/models/converters.go` 40. `internal/models/deepcopy.go` 41. `internal/mock/generator.go` -42. `internal/kubernetesagent/agent.go` -43. `pkg/agents/kubernetes/report.go` +42. `internal/mock/demo_scenarios.go` +43. `internal/kubernetesagent/agent.go` +44. `pkg/agents/kubernetes/report.go` ## Shared Boundaries @@ -197,11 +198,12 @@ truth for live infrastructure data. the report contract. Mock/demo Kubernetes ConfigMap and Secret inventory must mirror the current metadata-only trust boundary rather than seeding payload key names. Mock/demo Kubernetes inventory must also seed - representative storage-class, persistent-volume, and persistent-volume-claim - rows so the native storage tab exercises the same report/resource contract - as live agents. Monitoring must preserve those objects as native cluster + representative Service, Ingress, EndpointSlice, storage-class, + persistent-volume, and persistent-volume-claim rows so the native + networking and storage tabs exercise the same report/resource contract as + live agents. Monitoring must preserve those objects as native cluster inventory instead of flattening them into pods, deployments, or generic - storage/configuration rows. + networking, storage, or configuration rows. ## Forbidden Paths diff --git a/docs/release-control/v6/internal/subsystems/unified-resources.md b/docs/release-control/v6/internal/subsystems/unified-resources.md index 9fb5e95ea..21b3e82ce 100644 --- a/docs/release-control/v6/internal/subsystems/unified-resources.md +++ b/docs/release-control/v6/internal/subsystems/unified-resources.md @@ -130,6 +130,7 @@ cross-source deduplication. 106. `frontend-modern/src/features/kubernetes/KubernetesDeploymentsTable.tsx` 107. `frontend-modern/src/features/kubernetes/KubernetesNodesTable.tsx` 108. `frontend-modern/src/features/kubernetes/KubernetesStorageTable.tsx` +109. `frontend-modern/src/features/kubernetes/KubernetesNetworkingTable.tsx` ## Shared Boundaries @@ -278,6 +279,13 @@ reintroduce false Swarm capability surfaces. or phase, class, size/request, access/reclaim policy, provisioner, and PV/PVC binding targets instead of routing those API objects through the generic Kubernetes inventory table. + Kubernetes networking inventory follows the same native-table rule: + `/kubernetes/networking` must render Service, Ingress, and EndpointSlice + rows through a networking-specific table that preserves cluster/namespace + scope, Service type, ClusterIP/external IPs, service ports, selectors, + Ingress class, hosts and addresses, EndpointSlice address type, ready + endpoint counts, endpoint ports, and service targets instead of routing + those API objects through the generic Kubernetes inventory table. 2. Add typed accessors and views in `internal/unifiedresources/views.go` 3. Add source ingestion/adaptation in the adapter layer only Frontend resource platform contracts in diff --git a/frontend-modern/src/features/kubernetes/KubernetesInventoryTable.tsx b/frontend-modern/src/features/kubernetes/KubernetesInventoryTable.tsx index 1d477a301..fa96538b4 100644 --- a/frontend-modern/src/features/kubernetes/KubernetesInventoryTable.tsx +++ b/frontend-modern/src/features/kubernetes/KubernetesInventoryTable.tsx @@ -31,7 +31,6 @@ import type { Resource } from '@/types/resource'; type KubernetesInventoryVariant = | 'controllers' | 'services' - | 'networking' | 'config' | 'policy' | 'autoscaling' @@ -57,8 +56,6 @@ const tableTitle = (variant: KubernetesInventoryVariant, explicit?: string): str return 'Controllers'; case 'services': return 'Services'; - case 'networking': - return 'Networking'; case 'config': return 'Config'; case 'policy': @@ -150,7 +147,7 @@ const KubernetesInventoryHeader: Component<{ variant: KubernetesInventoryVariant > Namespace - + Type