diff --git a/.changeset/nasty-cherries-exercise.md b/.changeset/nasty-cherries-exercise.md new file mode 100644 index 0000000000..bb4386e978 --- /dev/null +++ b/.changeset/nasty-cherries-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +fix "undefined" kind for custom resources diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 314010f574..1c62384411 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -65,6 +65,7 @@ "@backstage/plugin-kubernetes-common": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", + "@backstage/types": "workspace:^", "@google-cloud/container": "^4.0.0", "@jest-mock/express": "^2.0.1", "@kubernetes/client-node": "0.18.1", diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts index 9800780077..1a603a7a98 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts @@ -351,6 +351,7 @@ describe('KubernetesFetcher', () => { res( checkToken(req, ctx, 'token'), withLabels(req, ctx, { + kind: 'PodList', items: [{ metadata: { name: 'pod-name' } }], }), ), @@ -359,6 +360,7 @@ describe('KubernetesFetcher', () => { res( checkToken(req, ctx, 'token'), withLabels(req, ctx, { + kind: 'ServiceList', items: [{ metadata: { name: 'service-name' } }], }), ), @@ -369,6 +371,7 @@ describe('KubernetesFetcher', () => { res( checkToken(req, ctx, 'token'), withLabels(req, ctx, { + kind: 'ThingList', items: [{ metadata: { name: 'something-else' } }], }), ), @@ -424,6 +427,7 @@ describe('KubernetesFetcher', () => { type: 'customresources', resources: [ { + kind: 'Thing', metadata: { name: 'something-else', labels: { 'backstage.io/kubernetes-id': 'some-service' }, diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts index b2be199d50..25bade3e97 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts @@ -41,6 +41,7 @@ import { import fetch, { RequestInit, Response } from 'node-fetch'; import * as https from 'https'; import fs from 'fs-extra'; +import { JsonObject } from '@backstage/types'; export interface KubernetesClientBasedFetcherOptions { logger: Logger; @@ -104,9 +105,15 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher { (r: Response): Promise => r.ok ? r.json().then( - ({ items }): FetchResponse => ({ + ({ kind, items }): FetchResponse => ({ type: objectType, - resources: items, + resources: + objectType === 'customresources' + ? items.map((item: JsonObject) => ({ + ...item, + kind: kind.replace(/(List)$/, ''), + })) + : items, }), ) : this.handleUnsuccessfulResponse(params.clusterDetails.name, r), diff --git a/yarn.lock b/yarn.lock index 894756af39..23bad4a0ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7434,6 +7434,7 @@ __metadata: "@backstage/plugin-kubernetes-common": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" + "@backstage/types": "workspace:^" "@google-cloud/container": ^4.0.0 "@jest-mock/express": ^2.0.1 "@kubernetes/client-node": 0.18.1