From ee4cfd66ca59036ba01bdd8248cebb5b2c64a5b2 Mon Sep 17 00:00:00 2001 From: Chai Bot Date: Thu, 24 Sep 2026 14:57:29 +0000 Subject: [PATCH] OSAC-5615: add networking section to cluster detail page Add a dedicated Networking tab to the cluster detail page displaying: - Subnet and security groups from the cluster spec - Pod CIDR and service CIDR network configuration - API and Ingress endpoints with provisioning state awareness - Inline "Auto-provisioned" label next to endpoints when the cluster has autoExternalIpAttachment enabled Co-Authored-By: Claude Opus 4.6 Signed-off-by: Chai Bot --- osac-ui/libs/i18n/locales/en/translation.json | 3 + osac-ui/libs/types/src/index.ts | 1 + .../Details/ClusterConfigurationCard.tsx | 12 -- .../Details/ClusterDetailsPageContent.tsx | 19 +- .../Details/ClusterNetworkingCard.test.tsx | 190 ++++++++++++++++++ .../Cluster/Details/ClusterNetworkingCard.tsx | 119 +++++++++++ .../Details/ClusterNetworkingDetailsTab.tsx | 11 + .../Cluster/Details/ClusterOverviewTab.tsx | 10 +- .../Primitives/CreateDropdownButton.test.tsx | 6 +- 9 files changed, 355 insertions(+), 16 deletions(-) create mode 100644 osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterNetworkingCard.test.tsx create mode 100644 osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterNetworkingCard.tsx create mode 100644 osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterNetworkingDetailsTab.tsx diff --git a/osac-ui/libs/i18n/locales/en/translation.json b/osac-ui/libs/i18n/locales/en/translation.json index 064ea8194f..c0326f1832 100644 --- a/osac-ui/libs/i18n/locales/en/translation.json +++ b/osac-ui/libs/i18n/locales/en/translation.json @@ -43,6 +43,7 @@ "Allocated": "Allocated", "An external IP is required": "An external IP is required", "An external IP pool is required": "An external IP pool is required", + "API endpoint": "API endpoint", "API URL": "API URL", "Architecture": "Architecture", "Architecture is required": "Architecture is required", @@ -72,6 +73,7 @@ "Auto-provisioned External IPs and External IP Attachments will be permanently deleted.": "Auto-provisioned External IPs and External IP Attachments will be permanently deleted.", "Automatically provision external IPs for the cluster API and ingress endpoints.": "Automatically provision external IPs for the cluster API and ingress endpoints.", "Available": "Available", + "Awaiting provisioning": "Awaiting provisioning", "Back": "Back", "Backend": "Backend", "Backend associations": "Backend associations", @@ -476,6 +478,7 @@ "Inbound Rules": "Inbound Rules", "Infrastructure": "Infrastructure", "Infrastructure Networking": "Infrastructure Networking", + "Ingress endpoint": "Ingress endpoint", "Instance type": "Instance type", "Instance types": "Instance types", "Interface": "Interface", diff --git a/osac-ui/libs/types/src/index.ts b/osac-ui/libs/types/src/index.ts index 37852ecd9a..181a9bbadc 100644 --- a/osac-ui/libs/types/src/index.ts +++ b/osac-ui/libs/types/src/index.ts @@ -39,6 +39,7 @@ export * from './osac/public/v1/external_ip_type_pb.js' export * from './osac/public/v1/external_ips_service_pb.js' export * from './osac/public/v1/external_ip_attachment_type_pb.js' export * from './osac/public/v1/external_ip_attachments_service_pb.js' +export * from './osac/public/v1/external_ip_attribution_type_pb.js' export * from './osac/public/v1/nat_gateway_type_pb.js' export * from './osac/public/v1/nat_gateways_service_pb.js' diff --git a/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterConfigurationCard.tsx b/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterConfigurationCard.tsx index afe0305845..884ea31ccf 100644 --- a/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterConfigurationCard.tsx +++ b/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterConfigurationCard.tsx @@ -59,18 +59,6 @@ export const ClusterConfigurationCard = ({ cluster }: ClusterConfigurationCardPr - - Pod CIDR - - {displayValue(cluster.spec?.network?.podCidr)} - - - - Service CIDR - - {displayValue(cluster.spec?.network?.serviceCidr)} - - Created diff --git a/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterDetailsPageContent.tsx b/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterDetailsPageContent.tsx index b42c0c197f..c08d3730d7 100644 --- a/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterDetailsPageContent.tsx +++ b/osac-ui/libs/ui-components/src/components/Cluster/Details/ClusterDetailsPageContent.tsx @@ -22,6 +22,7 @@ import type { Cluster } from '@osac/types'; import ClusterDetailsActionButtons from './ClusterDetailsActionButtons'; import ClusterDetailsSummary from './ClusterDetailsSummary'; +import { ClusterNetworkingDetailsTab } from './ClusterNetworkingDetailsTab'; import ClusterNodeSetsTab from './ClusterNetworkingTab'; import { ClusterOverviewTab } from './ClusterOverviewTab'; import { useTranslation } from '../../../hooks/useTranslation'; @@ -34,6 +35,7 @@ interface ClusterDetailViewProps { } const CLUSTER_DETAIL_OVERVIEW_TAB_ID = 'cluster-detail-overview'; +const CLUSTER_DETAIL_NETWORKING_TAB_ID = 'cluster-detail-networking'; const CLUSTER_DETAIL_NODE_SETS_TAB_ID = 'cluster-detail-node-sets'; const ClusterDetailsPageContent = ({ cluster }: ClusterDetailViewProps) => { @@ -83,6 +85,11 @@ const ClusterDetailsPageContent = ({ cluster }: ClusterDetailViewProps) => { /> {t('Networking')}} + tabContentId={CLUSTER_DETAIL_NETWORKING_TAB_ID} + /> + {t('Node sets')}} tabContentId={CLUSTER_DETAIL_NODE_SETS_TAB_ID} /> @@ -106,9 +113,19 @@ const ClusterDetailsPageContent = ({ cluster }: ClusterDetailViewProps) => { +