From bb6c03001de8ef9c5ab5fd7dc5c3168c18da5a58 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Mon, 22 Nov 2021 12:55:25 -0600 Subject: [PATCH 1/7] api version overrides Signed-off-by: Andrew Tran --- plugins/kubernetes-backend/schema.d.ts | 9 +++++++++ .../src/service/KubernetesBuilder.ts | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/plugins/kubernetes-backend/schema.d.ts b/plugins/kubernetes-backend/schema.d.ts index e69ac052f1..86f0653b53 100644 --- a/plugins/kubernetes-backend/schema.d.ts +++ b/plugins/kubernetes-backend/schema.d.ts @@ -63,5 +63,14 @@ export interface Config { apiVersion: string; plural: string; }>; + apiVersionOverrides?: { + pods?: string; + services?: string; + configmaps?: string; + deployments?: string; + replicasets?: string; + horizontalpodautoscalers?: string; + ingresses?: string; + }; }; } diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index 11cca4917f..1e1bf03b43 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -243,6 +243,10 @@ export class KubernetesBuilder { 'kubernetes.objectTypes', ) as KubernetesObjectTypes[]; + const apiVersionOverrides = this.env.config.getOptionalConfig( + 'kubernetes.apiVersionOverrides', + ); + let objectTypesToFetch; if (objectTypesToFetchStrings) { @@ -250,6 +254,17 @@ export class KubernetesBuilder { objectTypesToFetchStrings.includes(obj.objectType), ); } + + if (apiVersionOverrides) { + objectTypesToFetch = objectTypesToFetch ?? DEFAULT_OBJECTS; + + for (const obj of objectTypesToFetch) { + if (apiVersionOverrides.getOptionalString(obj.objectType)) { + obj.apiVersion = apiVersionOverrides.getString(obj.objectType); + } + } + } + return objectTypesToFetch; } } From 65ddccb5e83d9b41e62117a51ae8d5c7dd725978 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Tue, 23 Nov 2021 14:23:04 -0600 Subject: [PATCH 2/7] add changeset Signed-off-by: Andrew Tran --- .changeset/early-bees-think.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/early-bees-think.md diff --git a/.changeset/early-bees-think.md b/.changeset/early-bees-think.md new file mode 100644 index 0000000000..4be5cc4006 --- /dev/null +++ b/.changeset/early-bees-think.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +--- + +Added apiVersionOverrides config to allow for specifying api versions to use for kubernetes objects From 3a01096ddd472682d72890d21fce4f4f05f479ce Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Mon, 29 Nov 2021 09:48:49 -0600 Subject: [PATCH 3/7] add doc comment, add cronjobs/jobs Signed-off-by: Andrew Tran --- plugins/kubernetes-backend/schema.d.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/kubernetes-backend/schema.d.ts b/plugins/kubernetes-backend/schema.d.ts index 86f0653b53..fa8c35253d 100644 --- a/plugins/kubernetes-backend/schema.d.ts +++ b/plugins/kubernetes-backend/schema.d.ts @@ -63,6 +63,13 @@ export interface Config { apiVersion: string; plural: string; }>; + + /** + * (Optional) API Version Overrides + * If set, the specified api version will be used to make requests for the corresponding object. + * If running a legacy Kubernetes version, you may use this to override the default api versions + * that are not supported in your cluster. + */ apiVersionOverrides?: { pods?: string; services?: string; @@ -70,6 +77,8 @@ export interface Config { deployments?: string; replicasets?: string; horizontalpodautoscalers?: string; + cronjobs?: string; + jobs?: string; ingresses?: string; }; }; From 346c3a6516a210842c4f1d423dc04071d8b20c02 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Mon, 29 Nov 2021 09:59:48 -0600 Subject: [PATCH 4/7] update typing to be more easily extendible Signed-off-by: Andrew Tran --- plugins/kubernetes-backend/schema.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/kubernetes-backend/schema.d.ts b/plugins/kubernetes-backend/schema.d.ts index fa8c35253d..7f5183e337 100644 --- a/plugins/kubernetes-backend/schema.d.ts +++ b/plugins/kubernetes-backend/schema.d.ts @@ -80,6 +80,6 @@ export interface Config { cronjobs?: string; jobs?: string; ingresses?: string; - }; + } & { [pluralKind: string]: string }; }; } From 24af47761bd41c28653a976c4876697e2904b748 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Mon, 29 Nov 2021 11:05:10 -0600 Subject: [PATCH 5/7] update docs Signed-off-by: Andrew Tran --- docs/features/kubernetes/configuration.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md index 6b3991144b..bac9e4c9c1 100644 --- a/docs/features/kubernetes/configuration.md +++ b/docs/features/kubernetes/configuration.md @@ -219,6 +219,12 @@ The custom resource's apiVersion. The plural representing the custom resource. +### `apiVersionOverrides` (optional) + +Overrides for the API versions used to make requests for the corresponding +objects. If using a legacy Kubernetes version, you may use this config to +override the default API versions to ones that are supported by your cluster. + ### Role Based Access Control The current RBAC permissions required are read-only cluster wide, for the From 4dab6ffaad8663fcf1ac371d9d7770f0e115fd96 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Tue, 30 Nov 2021 16:04:39 -0600 Subject: [PATCH 6/7] update changeset, fix pr nits Signed-off-by: Andrew Tran --- .changeset/early-bees-think.md | 2 +- docs/features/kubernetes/configuration.md | 7 +++++++ .../kubernetes-backend/src/service/KubernetesBuilder.ts | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.changeset/early-bees-think.md b/.changeset/early-bees-think.md index 4be5cc4006..ea77fa04c7 100644 --- a/.changeset/early-bees-think.md +++ b/.changeset/early-bees-think.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-kubernetes-backend': minor +'@backstage/plugin-kubernetes-backend': patch --- Added apiVersionOverrides config to allow for specifying api versions to use for kubernetes objects diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md index bac9e4c9c1..aa28cf8840 100644 --- a/docs/features/kubernetes/configuration.md +++ b/docs/features/kubernetes/configuration.md @@ -225,6 +225,13 @@ Overrides for the API versions used to make requests for the corresponding objects. If using a legacy Kubernetes version, you may use this config to override the default API versions to ones that are supported by your cluster. +```yaml +--- +kubernetes: + apiVersionOverrides: + cronjobs: 'v1beta1' +``` + ### Role Based Access Control The current RBAC permissions required are read-only cluster wide, for the diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index 1e1bf03b43..3333f7a0fc 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -259,7 +259,7 @@ export class KubernetesBuilder { objectTypesToFetch = objectTypesToFetch ?? DEFAULT_OBJECTS; for (const obj of objectTypesToFetch) { - if (apiVersionOverrides.getOptionalString(obj.objectType)) { + if (apiVersionOverrides.has(obj.objectType)) { obj.apiVersion = apiVersionOverrides.getString(obj.objectType); } } From 1a792a7ef61196b5ae3f4d41b137709ba6016797 Mon Sep 17 00:00:00 2001 From: Andrew Tran Date: Tue, 30 Nov 2021 16:12:21 -0600 Subject: [PATCH 7/7] update docs Signed-off-by: Andrew Tran --- docs/features/kubernetes/configuration.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md index aa28cf8840..a7f9b0cd1e 100644 --- a/docs/features/kubernetes/configuration.md +++ b/docs/features/kubernetes/configuration.md @@ -225,6 +225,8 @@ Overrides for the API versions used to make requests for the corresponding objects. If using a legacy Kubernetes version, you may use this config to override the default API versions to ones that are supported by your cluster. +Example: + ```yaml --- kubernetes: @@ -232,6 +234,11 @@ kubernetes: cronjobs: 'v1beta1' ``` +For more information on which API versions are supported by your cluster, please +view the Kubernetes API docs for your Kubernetes version (e.g. +[API Groups for v1.22](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#-strong-api-groups-strong-) +) + ### Role Based Access Control The current RBAC permissions required are read-only cluster wide, for the