From ea47c9676b1c33c00c49010272492e7e4eda61a5 Mon Sep 17 00:00:00 2001 From: dror1212 Date: Tue, 4 Aug 2026 11:46:00 +0300 Subject: [PATCH 1/3] Handle hosted clusters without SSH keys Signed-off-by: dror1212 --- frontend/src/resources/hosted-cluster.ts | 2 +- frontend/src/resources/utils/get-cluster.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/resources/hosted-cluster.ts b/frontend/src/resources/hosted-cluster.ts index b01cf4aa8e5..696710fb5ae 100644 --- a/frontend/src/resources/hosted-cluster.ts +++ b/frontend/src/resources/hosted-cluster.ts @@ -37,7 +37,7 @@ export interface HostedCluster extends IResource { pullSecret: { name: string } - sshKey: { + sshKey?: { name: string } networking: { diff --git a/frontend/src/resources/utils/get-cluster.ts b/frontend/src/resources/utils/get-cluster.ts index 4b52a9ce6dc..0736b74af81 100644 --- a/frontend/src/resources/utils/get-cluster.ts +++ b/frontend/src/resources/utils/get-cluster.ts @@ -600,7 +600,7 @@ export function getCluster({ ? { agent: !!hostedCluster.spec.platform?.agent, nodePools: clusterNodePools, - secretNames: [hostedCluster.spec?.sshKey.name || '', hostedCluster.spec?.pullSecret?.name || ''].filter( + secretNames: [hostedCluster.spec?.sshKey?.name || '', hostedCluster.spec?.pullSecret?.name || ''].filter( (name) => !!name ), hostingNamespace: hostedCluster.metadata?.namespace || '', From bf5c75d8d33e0680b1f3bcfc9bc3291e28509fb7 Mon Sep 17 00:00:00 2001 From: dror1212 Date: Tue, 4 Aug 2026 12:08:55 +0300 Subject: [PATCH 2/3] Add coverage for hosted clusters without SSH keys Signed-off-by: dror1212 --- .../src/resources/utils/get-cluster.test.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/frontend/src/resources/utils/get-cluster.test.ts b/frontend/src/resources/utils/get-cluster.test.ts index 7af3bad2f0c..2d2a24df93a 100644 --- a/frontend/src/resources/utils/get-cluster.test.ts +++ b/frontend/src/resources/utils/get-cluster.test.ts @@ -5,6 +5,7 @@ import { ClusterCurator, ClusterCuratorApiVersion, ClusterCuratorKind } from '.. import { ClusterDeployment, ClusterDeploymentApiVersion, ClusterDeploymentKind } from '../cluster-deployment' import { ClusterStatus, + getCluster, getClusterStatus, getDistributionInfo, getHCUpgradePercent, @@ -1026,6 +1027,22 @@ const mockClusterCuratorPosthookFailed: ClusterCurator = { }, } +describe('getCluster', () => { + it('should handle a hosted cluster without an SSH key', () => { + const { sshKey: _sshKey, ...spec } = mockHostedCluster.spec + const hostedCluster = { ...mockHostedCluster, spec } as HostedClusterK8sResource + + const cluster = getCluster({ + hostedCluster, + managedClusterAddOns: [], + clusterManagementAddOns: {}, + nodePools: [], + }) + + expect(cluster.hypershift?.secretNames).toEqual(['psecret']) + }) +}) + describe('getDistributionInfo', () => { it('should have correct available updates and available channels', () => { const d = getDistributionInfo( From 2f0294c0e61a21fe3e2ccc3dc7cdb5f57ab89373 Mon Sep 17 00:00:00 2001 From: Kevin Cormier Date: Mon, 10 Aug 2026 11:01:40 -0400 Subject: [PATCH 3/3] Tweak code Signed-off-by: Kevin Cormier --- frontend/src/resources/hosted-cluster.ts | 2 +- frontend/src/resources/utils/get-cluster.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/resources/hosted-cluster.ts b/frontend/src/resources/hosted-cluster.ts index 696710fb5ae..37965f468f6 100644 --- a/frontend/src/resources/hosted-cluster.ts +++ b/frontend/src/resources/hosted-cluster.ts @@ -34,7 +34,7 @@ export interface HostedCluster extends IResource { release: { image: string } - pullSecret: { + pullSecret?: { name: string } sshKey?: { diff --git a/frontend/src/resources/utils/get-cluster.ts b/frontend/src/resources/utils/get-cluster.ts index 0736b74af81..30778eb3114 100644 --- a/frontend/src/resources/utils/get-cluster.ts +++ b/frontend/src/resources/utils/get-cluster.ts @@ -600,7 +600,7 @@ export function getCluster({ ? { agent: !!hostedCluster.spec.platform?.agent, nodePools: clusterNodePools, - secretNames: [hostedCluster.spec?.sshKey?.name || '', hostedCluster.spec?.pullSecret?.name || ''].filter( + secretNames: [hostedCluster.spec?.sshKey?.name, hostedCluster.spec?.pullSecret?.name].filter( (name) => !!name ), hostingNamespace: hostedCluster.metadata?.namespace || '',