From e64e3da1f8e1a53b796a3b788852d282cfc67cd3 Mon Sep 17 00:00:00 2001 From: Nancy <42977925+mantis-toboggan-md@users.noreply.github.com> Date: Mon, 2 Dec 2024 08:31:02 -0800 Subject: [PATCH] Fix editing rke2/k3s clusters in 'pending' state (#12694) * fix cluster isImported check to account for clusters in the process of provisioning * remove tests --- .../management.cattle.io.cluster.test.ts | 42 ------------------- shell/models/management.cattle.io.cluster.js | 24 ----------- .../models/provisioning.cattle.io.cluster.js | 24 ++++++++++- 3 files changed, 23 insertions(+), 67 deletions(-) diff --git a/shell/models/__tests__/management.cattle.io.cluster.test.ts b/shell/models/__tests__/management.cattle.io.cluster.test.ts index 1d90cd61156..0bdc650e7fd 100644 --- a/shell/models/__tests__/management.cattle.io.cluster.test.ts +++ b/shell/models/__tests__/management.cattle.io.cluster.test.ts @@ -4,28 +4,6 @@ jest.mock('@shell/utils/clipboard', () => { return { copyTextToClipboard: jest.fn(() => Promise.resolve({})) }; }); -const importedRKE2ClusterInfo = { status: { driver: 'rke2', provider: 'rke2' } }; - -const provisionedRKE2ClusterInfo = { status: { driver: 'rke2', provider: 'imported' } }; - -const importedK3sClusterInfo = { status: { driver: 'k3s', provider: 'k3s' } }; - -const provisionedK3sClusterInfo = { status: { driver: 'k3s', provider: 'imported' } }; - -const importedAksClusterInfo = { spec: { aksConfig: { imported: true } }, status: { provider: 'aks', driver: 'AKS' } }; - -const provisionedAksClusterInfo = { spec: { aksConfig: { imported: false } }, status: { provider: 'aks', driver: 'AKS' } }; - -const importedRKE1ClusterInfo = { status: { provider: 'rke', driver: 'imported' } }; - -const provisionedRKE1ClusterInfo = { status: { provider: 'rke', driver: 'rancherKubernetesEngine' } }; - -const localRKE1ClusterInfo = { status: { provider: 'rke', driver: 'imported' } }; - -const localRKE2ClusterInfo = { status: { provider: 'rke2', driver: 'rke2' } }; - -const localEKSClusterInfo = { status: { provider: 'eks', driver: 'imported' } }; - describe('class MgmtCluster', () => { describe('provisioner', () => { const testCases = [ @@ -42,24 +20,4 @@ describe('class MgmtCluster', () => { } ); }); - - describe('isImported', () => { - it.each([ - [importedRKE2ClusterInfo, true], - [provisionedRKE2ClusterInfo, false], - [importedK3sClusterInfo, true], - [provisionedK3sClusterInfo, false], - [importedAksClusterInfo, true], - [provisionedAksClusterInfo, false], - [importedRKE1ClusterInfo, true], - [provisionedRKE1ClusterInfo, false], - [localRKE1ClusterInfo, true], - [localRKE2ClusterInfo, true], - [localEKSClusterInfo, true] - ])('should return isImported based on props data', (clusterData, expected) => { - const cluster = new MgmtCluster(clusterData); - - expect(cluster.isImported).toBe(expected); - }); - }); }); diff --git a/shell/models/management.cattle.io.cluster.js b/shell/models/management.cattle.io.cluster.js index 2c080e93516..5c746e706e3 100644 --- a/shell/models/management.cattle.io.cluster.js +++ b/shell/models/management.cattle.io.cluster.js @@ -89,30 +89,6 @@ export default class MgmtCluster extends SteveModel { return pools.filter((x) => x.spec?.clusterName === this.id); } - get isImported() { - if (this.isLocal) { - return false; - } - // imported rke2 and k3s have status.driver === rke2 and k3s respectively - // Provisioned rke2 and k3s have status.driver === imported - if (this.status?.provider === 'k3s' || this.status?.provider === 'rke2') { - return this.status?.driver === this.status?.provider; - } - - // imported KEv2 - const kontainerConfigs = ['aksConfig', 'eksConfig', 'gkeConfig']; - - const isImportedKontainer = kontainerConfigs.filter((key) => { - return this.spec?.[key]?.imported === true; - }).length; - - if (isImportedKontainer) { - return true; - } - - return this.provisioner === 'imported'; - } - get provisioner() { // For imported K3s clusters, this.status.driver is 'k3s.' return this.status?.driver ? this.status.driver : 'imported'; diff --git a/shell/models/provisioning.cattle.io.cluster.js b/shell/models/provisioning.cattle.io.cluster.js index 2503139e5ad..c6278e702cf 100644 --- a/shell/models/provisioning.cattle.io.cluster.js +++ b/shell/models/provisioning.cattle.io.cluster.js @@ -282,7 +282,29 @@ export default class ProvCluster extends SteveModel { } get isImported() { - return this.mgmt?.isImported; + if (this.isLocal) { + return false; + } + + // imported rke2 and k3s have status.driver === rke2 and k3s respectively + // Provisioned rke2 and k3s have status.driver === imported + if (this.mgmt?.status?.provider === 'k3s' || this.mgmt?.status?.provider === 'rke2') { + return this.mgmt?.status?.driver === this.mgmt?.status?.provider; + } + + // imported KEv2 + // we can't rely on this.provisioner to determine imported-ness for these clusters, as it will return 'aks' 'eks' 'gke' for both provisioned and imported clusters + const kontainerConfigs = ['aksConfig', 'eksConfig', 'gkeConfig']; + + const isImportedKontainer = kontainerConfigs.filter((key) => { + return this.mgmt?.spec?.[key]?.imported === true; + }).length; + + if (isImportedKontainer) { + return true; + } + + return this.provisioner === 'imported'; } get isCustom() {