From 76e8f08fa2438d3a02a273c4f5295b22cb0aa337 Mon Sep 17 00:00:00 2001 From: Matthew Clarke Date: Wed, 29 Mar 2023 04:29:10 -0400 Subject: [PATCH] fix: localKubectlProxy auth provider throwing error (#17139) * fix: localKubectlProxy auth provider throwing error Signed-off-by: Matthew Clarke * docs: changeset Signed-off-by: Matthew Clarke --------- Signed-off-by: Matthew Clarke --- .changeset/poor-cars-fold.md | 5 ++ .../src/service/KubernetesFetcher.test.ts | 49 +++++++++++++++++++ .../src/service/KubernetesFetcher.ts | 5 +- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 .changeset/poor-cars-fold.md diff --git a/.changeset/poor-cars-fold.md b/.changeset/poor-cars-fold.md new file mode 100644 index 0000000000..8268a616d8 --- /dev/null +++ b/.changeset/poor-cars-fold.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +fix localKubectlProxy auth provider fetching diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts index 6482ba5f9e..9800780077 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts @@ -235,6 +235,55 @@ describe('KubernetesFetcher', () => { ], }); }); + it('localKubectlProxy authProvider fetches resources correctly', async () => { + worker.use( + rest.get( + 'http://localhost:9999/k8s/clusters/1234/api/v1/services', + (req, res, ctx) => + res( + withLabels(req, ctx, { + items: [{ metadata: { name: 'service-name' } }], + }), + ), + ), + ); + + const result = await sut.fetchObjectsForService({ + serviceId: 'some-service', + clusterDetails: { + name: 'cluster1', + url: 'http://localhost:9999/k8s/clusters/1234', + authProvider: 'localKubectlProxy', + }, + objectTypesToFetch: new Set([ + { + group: '', + apiVersion: 'v1', + plural: 'services', + objectType: 'services', + }, + ]), + labelSelector: '', + customResources: [], + }); + + expect(result).toStrictEqual({ + errors: [], + responses: [ + { + type: 'services', + resources: [ + { + metadata: { + name: 'service-name', + labels: { 'backstage.io/kubernetes-id': 'some-service' }, + }, + }, + ], + }, + ], + }); + }); it('should return pods, services', async () => { worker.use( rest.get('http://localhost:9999/api/v1/pods', (req, res, ctx) => diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts index 6161c040d7..48bea3106b 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts @@ -191,7 +191,10 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher { let url: URL; let requestInit: RequestInit; - if (clusterDetails.serviceAccountToken) { + if ( + clusterDetails.serviceAccountToken || + clusterDetails.authProvider === 'localKubectlProxy' + ) { [url, requestInit] = this.fetchArgsFromClusterDetails(clusterDetails); } else if (fs.pathExistsSync(Config.SERVICEACCOUNT_TOKEN_PATH)) { [url, requestInit] = this.fetchArgsInCluster();