From 8d663f143c80ecbe45622d95d99cddca13b67216 Mon Sep 17 00:00:00 2001 From: Ruben Vallejo Date: Wed, 7 Jun 2023 10:39:17 -0400 Subject: [PATCH] ClusterLocator now takes CRD defined at the cluster level and returns in clusterDetails Signed-off-by: Ruben Vallejo --- .../ConfigClusterLocator.test.ts | 43 +++++++++++++++++++ .../cluster-locator/ConfigClusterLocator.ts | 13 ++++++ 2 files changed, 56 insertions(+) diff --git a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts index 7f545a95de..d84d7e39e8 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.test.ts @@ -271,4 +271,47 @@ describe('ConfigClusterLocator', () => { expect(result).toMatchObject([cluster]); }); + + it('has cluster level defined customResources returns clusterDetails with those CRDs', async () => { + const config: Config = new ConfigReader({ + clusters: [ + { + name: 'cluster1', + url: 'http://localhost:8080', + authProvider: 'serviceAccount', + customResources: [ + { + group: 'argoproj.io', + apiVersion: 'v1alpha1', + plural: 'rollouts', + }, + ], + }, + ], + }); + + const sut = ConfigClusterLocator.fromConfig(config); + + const result = await sut.getClusters(); + + expect(result).toStrictEqual([ + { + name: 'cluster1', + serviceAccountToken: undefined, + url: 'http://localhost:8080', + authProvider: 'serviceAccount', + skipMetricsLookup: false, + skipTLSVerify: false, + caData: undefined, + caFile: undefined, + customResources: [ + { + group: 'argoproj.io', + apiVersion: 'v1alpha1', + plural: 'rollouts', + }, + ], + }, + ]); + }); }); diff --git a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts index a759cb4bb0..8410a4ddcb 100644 --- a/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts +++ b/plugins/kubernetes-backend/src/cluster-locator/ConfigClusterLocator.ts @@ -16,6 +16,7 @@ import { Config } from '@backstage/config'; import { ClusterDetails, KubernetesClustersSupplier } from '../types/types'; +import { CustomResourceMatcher } from '@backstage/plugin-kubernetes-common'; export class ConfigClusterLocator implements KubernetesClustersSupplier { private readonly clusterDetails: ClusterDetails[]; @@ -40,6 +41,18 @@ export class ConfigClusterLocator implements KubernetesClustersSupplier { caFile: c.getOptionalString('caFile'), authProvider: authProvider, }; + + const customResources = c.getOptionalConfigArray('customResources'); + if (customResources) { + clusterDetails.customResources = customResources.map(cr => { + return { + group: cr.getString('group'), + apiVersion: cr.getString('apiVersion'), + plural: cr.getString('plural'), + }; + }); + } + const dashboardUrl = c.getOptionalString('dashboardUrl'); if (dashboardUrl) { clusterDetails.dashboardUrl = dashboardUrl;