@backstage/plugin-kubernetes-backend 0.21.1-next.0 → 0.21.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @backstage/plugin-kubernetes-backend
|
|
2
2
|
|
|
3
|
+
## 0.21.1-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/plugin-catalog-node@2.0.0-next.1
|
|
9
|
+
- @backstage/catalog-client@1.12.2-next.0
|
|
10
|
+
- @backstage/backend-plugin-api@1.7.0-next.1
|
|
11
|
+
- @backstage/plugin-kubernetes-node@0.4.1-next.1
|
|
12
|
+
- @backstage/plugin-permission-node@0.10.10-next.0
|
|
13
|
+
|
|
14
|
+
## 0.21.1-next.1
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- ce3639c: Add PersistentVolume and PersistentVolumeClaims Rendering
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
- @backstage/plugin-kubernetes-common@0.9.10-next.1
|
|
21
|
+
- @backstage/plugin-kubernetes-node@0.4.1-next.1
|
|
22
|
+
- @backstage/backend-plugin-api@1.7.0-next.1
|
|
23
|
+
|
|
3
24
|
## 0.21.1-next.0
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/dist/package.json.cjs.js
CHANGED
|
@@ -89,6 +89,18 @@ const ALL_OBJECTS = [
|
|
|
89
89
|
plural: "secrets",
|
|
90
90
|
objectType: "secrets"
|
|
91
91
|
},
|
|
92
|
+
{
|
|
93
|
+
group: "",
|
|
94
|
+
apiVersion: "v1",
|
|
95
|
+
plural: "persistentvolumes",
|
|
96
|
+
objectType: "persistentvolumes"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
group: "",
|
|
100
|
+
apiVersion: "v1",
|
|
101
|
+
plural: "persistentvolumeclaims",
|
|
102
|
+
objectType: "persistentvolumeclaims"
|
|
103
|
+
},
|
|
92
104
|
...DEFAULT_OBJECTS
|
|
93
105
|
];
|
|
94
106
|
const isPodFetchResponse = (fr) => fr.type === "pods" || fr.type === "customresources" && fr.resources.length > 0 && fr.resources[0].apiVersion === "v1" && fr.resources[0].kind === "Pod";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KubernetesFanOutHandler.cjs.js","sources":["../../src/service/KubernetesFanOutHandler.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport {\n KubernetesObjectsProviderOptions,\n ObjectsByEntityRequest,\n} from '../types/types';\nimport {\n ClientContainerStatus,\n ClientCurrentResourceUsage,\n ClientPodStatus,\n ClusterObjects,\n CustomResourceMatcher,\n FetchResponse,\n KUBERNETES_ANNOTATION,\n KUBERNETES_LABEL_SELECTOR_QUERY_ANNOTATION,\n KubernetesRequestAuth,\n ObjectsByEntityResponse,\n PodFetchResponse,\n PodStatusFetchResponse,\n} from '@backstage/plugin-kubernetes-common';\nimport type {\n ContainerStatus,\n CurrentResourceUsage,\n PodStatus,\n} from '@kubernetes/client-node';\nimport {\n AuthenticationStrategy,\n ClusterDetails,\n CustomResource,\n CustomResourcesByEntity,\n FetchResponseWrapper,\n KubernetesCredential,\n KubernetesFetcher,\n KubernetesObjectsByEntity,\n KubernetesObjectsProvider,\n KubernetesServiceLocator,\n ObjectToFetch,\n} from '@backstage/plugin-kubernetes-node';\nimport {\n BackstageCredentials,\n LoggerService,\n} from '@backstage/backend-plugin-api';\n\n/**\n *\n * @public\n */\nexport const DEFAULT_OBJECTS: ObjectToFetch[] = [\n {\n group: '',\n apiVersion: 'v1',\n plural: 'pods',\n objectType: 'pods',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'services',\n objectType: 'services',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'configmaps',\n objectType: 'configmaps',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'limitranges',\n objectType: 'limitranges',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'resourcequotas',\n objectType: 'resourcequotas',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'deployments',\n objectType: 'deployments',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'replicasets',\n objectType: 'replicasets',\n },\n {\n group: 'autoscaling',\n apiVersion: 'v2',\n plural: 'horizontalpodautoscalers',\n objectType: 'horizontalpodautoscalers',\n },\n {\n group: 'batch',\n apiVersion: 'v1',\n plural: 'jobs',\n objectType: 'jobs',\n },\n {\n group: 'batch',\n apiVersion: 'v1',\n plural: 'cronjobs',\n objectType: 'cronjobs',\n },\n {\n group: 'networking.k8s.io',\n apiVersion: 'v1',\n plural: 'ingresses',\n objectType: 'ingresses',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'statefulsets',\n objectType: 'statefulsets',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'daemonsets',\n objectType: 'daemonsets',\n },\n];\n\nexport const ALL_OBJECTS: ObjectToFetch[] = [\n {\n group: '',\n apiVersion: 'v1',\n plural: 'secrets',\n objectType: 'secrets',\n },\n ...DEFAULT_OBJECTS,\n];\n\nexport interface KubernetesFanOutHandlerOptions\n extends KubernetesObjectsProviderOptions {\n authStrategy: AuthenticationStrategy;\n}\n\nexport interface KubernetesRequestBody extends ObjectsByEntityRequest {}\n\nconst isPodFetchResponse = (fr: FetchResponse): fr is PodFetchResponse =>\n fr.type === 'pods' ||\n (fr.type === 'customresources' &&\n fr.resources.length > 0 &&\n fr.resources[0].apiVersion === 'v1' &&\n fr.resources[0].kind === 'Pod');\nconst isString = (str: string | undefined): str is string => str !== undefined;\n\nconst numberOrBigIntToNumberOrString = (\n value: number | BigInt,\n): number | string => {\n return typeof value === 'bigint' ? value.toString() : (value as number);\n};\n\nconst toClientSafeResource = (\n current: CurrentResourceUsage,\n): ClientCurrentResourceUsage => {\n return {\n currentUsage: numberOrBigIntToNumberOrString(current.CurrentUsage),\n requestTotal: numberOrBigIntToNumberOrString(current.RequestTotal),\n limitTotal: numberOrBigIntToNumberOrString(current.LimitTotal),\n };\n};\n\nconst toClientSafeContainer = (\n container: ContainerStatus,\n): ClientContainerStatus => {\n return {\n container: container.Container,\n cpuUsage: toClientSafeResource(container.CPUUsage),\n memoryUsage: toClientSafeResource(container.MemoryUsage),\n };\n};\n\nconst toClientSafePodMetrics = (\n podMetrics: PodStatusFetchResponse[],\n): ClientPodStatus[] => {\n return podMetrics\n .map(r => r.resources)\n .flat()\n .map((pd: PodStatus): ClientPodStatus => {\n return {\n pod: pd.Pod,\n memory: toClientSafeResource(pd.Memory),\n cpu: toClientSafeResource(pd.CPU),\n containers: pd.Containers.map(toClientSafeContainer),\n };\n });\n};\n\ntype responseWithMetrics = [FetchResponseWrapper, PodStatusFetchResponse[]];\n\nexport class KubernetesFanOutHandler implements KubernetesObjectsProvider {\n private readonly logger: LoggerService;\n private readonly fetcher: KubernetesFetcher;\n private readonly serviceLocator: KubernetesServiceLocator;\n private readonly customResources: CustomResource[];\n private readonly objectTypesToFetch: Set<ObjectToFetch>;\n private readonly authStrategy: AuthenticationStrategy;\n\n constructor({\n logger,\n fetcher,\n serviceLocator,\n customResources,\n objectTypesToFetch = DEFAULT_OBJECTS,\n authStrategy,\n }: KubernetesFanOutHandlerOptions) {\n this.logger = logger;\n this.fetcher = fetcher;\n this.serviceLocator = serviceLocator;\n this.customResources = customResources;\n this.objectTypesToFetch = new Set(objectTypesToFetch);\n this.authStrategy = authStrategy;\n }\n\n async getCustomResourcesByEntity(\n { entity, auth, customResources }: CustomResourcesByEntity,\n options: { credentials: BackstageCredentials },\n ): Promise<ObjectsByEntityResponse> {\n // Don't fetch the default object types only the provided custom resources\n return this.fanOutRequests(\n entity,\n auth,\n { credentials: options.credentials },\n new Set<ObjectToFetch>(),\n customResources,\n );\n }\n\n async getKubernetesObjectsByEntity(\n { entity, auth }: KubernetesObjectsByEntity,\n options: { credentials: BackstageCredentials },\n ): Promise<ObjectsByEntityResponse> {\n return this.fanOutRequests(\n entity,\n auth,\n {\n credentials: options.credentials,\n },\n this.objectTypesToFetch,\n );\n }\n\n private async fanOutRequests(\n entity: Entity,\n auth: KubernetesRequestAuth,\n options: { credentials: BackstageCredentials },\n objectTypesToFetch: Set<ObjectToFetch>,\n customResources?: CustomResourceMatcher[],\n ) {\n const entityName =\n entity.metadata?.annotations?.['backstage.io/kubernetes-id'] ||\n entity.metadata?.name;\n\n const { clusters } = await this.serviceLocator.getClustersByEntity(entity, {\n objectTypesToFetch: objectTypesToFetch,\n customResources: customResources ?? [],\n credentials: options.credentials,\n });\n\n this.logger.info(\n `entity.metadata.name=${entityName} clusterDetails=[${clusters\n .map(c => c.name)\n .join(', ')}]`,\n );\n\n const labelSelector: string =\n entity.metadata?.annotations?.[\n KUBERNETES_LABEL_SELECTOR_QUERY_ANNOTATION\n ] || `${KUBERNETES_ANNOTATION}=${entityName}`;\n\n const namespace =\n entity.metadata?.annotations?.['backstage.io/kubernetes-namespace'];\n\n return Promise.all(\n clusters.map(async clusterDetails => {\n const credential = await this.authStrategy.getCredential(\n clusterDetails,\n auth,\n );\n return this.fetcher\n .fetchObjectsForService({\n serviceId: entityName,\n clusterDetails,\n credential,\n objectTypesToFetch,\n labelSelector,\n customResources: (\n customResources ||\n clusterDetails.customResources ||\n this.customResources\n ).map(c => ({\n ...c,\n objectType: 'customresources',\n })),\n namespace,\n })\n .then(result =>\n this.getMetricsForPods(\n clusterDetails,\n credential,\n labelSelector,\n result,\n ),\n )\n .catch(\n (e): Promise<responseWithMetrics> =>\n e.name === 'FetchError'\n ? Promise.resolve([\n {\n errors: [\n { errorType: 'FETCH_ERROR', message: e.message },\n ],\n responses: [],\n },\n [],\n ])\n : Promise.reject(e),\n )\n .then(r => this.toClusterObjects(clusterDetails, r));\n }),\n ).then(this.toObjectsByEntityResponse);\n }\n\n toObjectsByEntityResponse(\n clusterObjects: ClusterObjects[],\n ): ObjectsByEntityResponse {\n return {\n items: clusterObjects.filter(\n item =>\n (item.errors !== undefined && item.errors.length >= 1) ||\n (item.resources !== undefined &&\n item.resources.length >= 1 &&\n item.resources.some(fr => fr.resources?.length >= 1)),\n ),\n };\n }\n\n toClusterObjects(\n clusterDetails: ClusterDetails,\n [result, metrics]: responseWithMetrics,\n ): ClusterObjects {\n const objects: ClusterObjects = {\n cluster: {\n name: clusterDetails.name,\n ...(clusterDetails.title && { title: clusterDetails.title }),\n },\n podMetrics: toClientSafePodMetrics(metrics),\n resources: result.responses,\n errors: result.errors,\n };\n if (clusterDetails.dashboardUrl) {\n objects.cluster.dashboardUrl = clusterDetails.dashboardUrl;\n }\n if (clusterDetails.dashboardApp) {\n objects.cluster.dashboardApp = clusterDetails.dashboardApp;\n }\n if (clusterDetails.dashboardParameters) {\n objects.cluster.dashboardParameters = clusterDetails.dashboardParameters;\n }\n return objects;\n }\n\n async getMetricsForPods(\n clusterDetails: ClusterDetails,\n credential: KubernetesCredential,\n labelSelector: string,\n result: FetchResponseWrapper,\n ): Promise<responseWithMetrics> {\n if (clusterDetails.skipMetricsLookup) {\n return [result, []];\n }\n const namespaces: Set<string> = new Set<string>(\n result.responses\n .filter(isPodFetchResponse)\n .flatMap(r => r.resources)\n .map(p => p.metadata?.namespace)\n .filter(isString),\n );\n\n if (namespaces.size === 0) {\n return [result, []];\n }\n\n const podMetrics = await this.fetcher.fetchPodMetricsByNamespaces(\n clusterDetails,\n credential,\n namespaces,\n labelSelector,\n );\n\n result.errors.push(...podMetrics.errors);\n return [result, podMetrics.responses as PodStatusFetchResponse[]];\n }\n}\n"],"names":["KUBERNETES_LABEL_SELECTOR_QUERY_ANNOTATION","KUBERNETES_ANNOTATION"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"KubernetesFanOutHandler.cjs.js","sources":["../../src/service/KubernetesFanOutHandler.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport {\n KubernetesObjectsProviderOptions,\n ObjectsByEntityRequest,\n} from '../types/types';\nimport {\n ClientContainerStatus,\n ClientCurrentResourceUsage,\n ClientPodStatus,\n ClusterObjects,\n CustomResourceMatcher,\n FetchResponse,\n KUBERNETES_ANNOTATION,\n KUBERNETES_LABEL_SELECTOR_QUERY_ANNOTATION,\n KubernetesRequestAuth,\n ObjectsByEntityResponse,\n PodFetchResponse,\n PodStatusFetchResponse,\n} from '@backstage/plugin-kubernetes-common';\nimport type {\n ContainerStatus,\n CurrentResourceUsage,\n PodStatus,\n} from '@kubernetes/client-node';\nimport {\n AuthenticationStrategy,\n ClusterDetails,\n CustomResource,\n CustomResourcesByEntity,\n FetchResponseWrapper,\n KubernetesCredential,\n KubernetesFetcher,\n KubernetesObjectsByEntity,\n KubernetesObjectsProvider,\n KubernetesServiceLocator,\n ObjectToFetch,\n} from '@backstage/plugin-kubernetes-node';\nimport {\n BackstageCredentials,\n LoggerService,\n} from '@backstage/backend-plugin-api';\n\n/**\n *\n * @public\n */\nexport const DEFAULT_OBJECTS: ObjectToFetch[] = [\n {\n group: '',\n apiVersion: 'v1',\n plural: 'pods',\n objectType: 'pods',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'services',\n objectType: 'services',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'configmaps',\n objectType: 'configmaps',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'limitranges',\n objectType: 'limitranges',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'resourcequotas',\n objectType: 'resourcequotas',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'deployments',\n objectType: 'deployments',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'replicasets',\n objectType: 'replicasets',\n },\n {\n group: 'autoscaling',\n apiVersion: 'v2',\n plural: 'horizontalpodautoscalers',\n objectType: 'horizontalpodautoscalers',\n },\n {\n group: 'batch',\n apiVersion: 'v1',\n plural: 'jobs',\n objectType: 'jobs',\n },\n {\n group: 'batch',\n apiVersion: 'v1',\n plural: 'cronjobs',\n objectType: 'cronjobs',\n },\n {\n group: 'networking.k8s.io',\n apiVersion: 'v1',\n plural: 'ingresses',\n objectType: 'ingresses',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'statefulsets',\n objectType: 'statefulsets',\n },\n {\n group: 'apps',\n apiVersion: 'v1',\n plural: 'daemonsets',\n objectType: 'daemonsets',\n },\n];\n\nexport const ALL_OBJECTS: ObjectToFetch[] = [\n {\n group: '',\n apiVersion: 'v1',\n plural: 'secrets',\n objectType: 'secrets',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'persistentvolumes',\n objectType: 'persistentvolumes',\n },\n {\n group: '',\n apiVersion: 'v1',\n plural: 'persistentvolumeclaims',\n objectType: 'persistentvolumeclaims',\n },\n ...DEFAULT_OBJECTS,\n];\n\nexport interface KubernetesFanOutHandlerOptions\n extends KubernetesObjectsProviderOptions {\n authStrategy: AuthenticationStrategy;\n}\n\nexport interface KubernetesRequestBody extends ObjectsByEntityRequest {}\n\nconst isPodFetchResponse = (fr: FetchResponse): fr is PodFetchResponse =>\n fr.type === 'pods' ||\n (fr.type === 'customresources' &&\n fr.resources.length > 0 &&\n fr.resources[0].apiVersion === 'v1' &&\n fr.resources[0].kind === 'Pod');\nconst isString = (str: string | undefined): str is string => str !== undefined;\n\nconst numberOrBigIntToNumberOrString = (\n value: number | BigInt,\n): number | string => {\n return typeof value === 'bigint' ? value.toString() : (value as number);\n};\n\nconst toClientSafeResource = (\n current: CurrentResourceUsage,\n): ClientCurrentResourceUsage => {\n return {\n currentUsage: numberOrBigIntToNumberOrString(current.CurrentUsage),\n requestTotal: numberOrBigIntToNumberOrString(current.RequestTotal),\n limitTotal: numberOrBigIntToNumberOrString(current.LimitTotal),\n };\n};\n\nconst toClientSafeContainer = (\n container: ContainerStatus,\n): ClientContainerStatus => {\n return {\n container: container.Container,\n cpuUsage: toClientSafeResource(container.CPUUsage),\n memoryUsage: toClientSafeResource(container.MemoryUsage),\n };\n};\n\nconst toClientSafePodMetrics = (\n podMetrics: PodStatusFetchResponse[],\n): ClientPodStatus[] => {\n return podMetrics\n .map(r => r.resources)\n .flat()\n .map((pd: PodStatus): ClientPodStatus => {\n return {\n pod: pd.Pod,\n memory: toClientSafeResource(pd.Memory),\n cpu: toClientSafeResource(pd.CPU),\n containers: pd.Containers.map(toClientSafeContainer),\n };\n });\n};\n\ntype responseWithMetrics = [FetchResponseWrapper, PodStatusFetchResponse[]];\n\nexport class KubernetesFanOutHandler implements KubernetesObjectsProvider {\n private readonly logger: LoggerService;\n private readonly fetcher: KubernetesFetcher;\n private readonly serviceLocator: KubernetesServiceLocator;\n private readonly customResources: CustomResource[];\n private readonly objectTypesToFetch: Set<ObjectToFetch>;\n private readonly authStrategy: AuthenticationStrategy;\n\n constructor({\n logger,\n fetcher,\n serviceLocator,\n customResources,\n objectTypesToFetch = DEFAULT_OBJECTS,\n authStrategy,\n }: KubernetesFanOutHandlerOptions) {\n this.logger = logger;\n this.fetcher = fetcher;\n this.serviceLocator = serviceLocator;\n this.customResources = customResources;\n this.objectTypesToFetch = new Set(objectTypesToFetch);\n this.authStrategy = authStrategy;\n }\n\n async getCustomResourcesByEntity(\n { entity, auth, customResources }: CustomResourcesByEntity,\n options: { credentials: BackstageCredentials },\n ): Promise<ObjectsByEntityResponse> {\n // Don't fetch the default object types only the provided custom resources\n return this.fanOutRequests(\n entity,\n auth,\n { credentials: options.credentials },\n new Set<ObjectToFetch>(),\n customResources,\n );\n }\n\n async getKubernetesObjectsByEntity(\n { entity, auth }: KubernetesObjectsByEntity,\n options: { credentials: BackstageCredentials },\n ): Promise<ObjectsByEntityResponse> {\n return this.fanOutRequests(\n entity,\n auth,\n {\n credentials: options.credentials,\n },\n this.objectTypesToFetch,\n );\n }\n\n private async fanOutRequests(\n entity: Entity,\n auth: KubernetesRequestAuth,\n options: { credentials: BackstageCredentials },\n objectTypesToFetch: Set<ObjectToFetch>,\n customResources?: CustomResourceMatcher[],\n ) {\n const entityName =\n entity.metadata?.annotations?.['backstage.io/kubernetes-id'] ||\n entity.metadata?.name;\n\n const { clusters } = await this.serviceLocator.getClustersByEntity(entity, {\n objectTypesToFetch: objectTypesToFetch,\n customResources: customResources ?? [],\n credentials: options.credentials,\n });\n\n this.logger.info(\n `entity.metadata.name=${entityName} clusterDetails=[${clusters\n .map(c => c.name)\n .join(', ')}]`,\n );\n\n const labelSelector: string =\n entity.metadata?.annotations?.[\n KUBERNETES_LABEL_SELECTOR_QUERY_ANNOTATION\n ] || `${KUBERNETES_ANNOTATION}=${entityName}`;\n\n const namespace =\n entity.metadata?.annotations?.['backstage.io/kubernetes-namespace'];\n\n return Promise.all(\n clusters.map(async clusterDetails => {\n const credential = await this.authStrategy.getCredential(\n clusterDetails,\n auth,\n );\n return this.fetcher\n .fetchObjectsForService({\n serviceId: entityName,\n clusterDetails,\n credential,\n objectTypesToFetch,\n labelSelector,\n customResources: (\n customResources ||\n clusterDetails.customResources ||\n this.customResources\n ).map(c => ({\n ...c,\n objectType: 'customresources',\n })),\n namespace,\n })\n .then(result =>\n this.getMetricsForPods(\n clusterDetails,\n credential,\n labelSelector,\n result,\n ),\n )\n .catch(\n (e): Promise<responseWithMetrics> =>\n e.name === 'FetchError'\n ? Promise.resolve([\n {\n errors: [\n { errorType: 'FETCH_ERROR', message: e.message },\n ],\n responses: [],\n },\n [],\n ])\n : Promise.reject(e),\n )\n .then(r => this.toClusterObjects(clusterDetails, r));\n }),\n ).then(this.toObjectsByEntityResponse);\n }\n\n toObjectsByEntityResponse(\n clusterObjects: ClusterObjects[],\n ): ObjectsByEntityResponse {\n return {\n items: clusterObjects.filter(\n item =>\n (item.errors !== undefined && item.errors.length >= 1) ||\n (item.resources !== undefined &&\n item.resources.length >= 1 &&\n item.resources.some(fr => fr.resources?.length >= 1)),\n ),\n };\n }\n\n toClusterObjects(\n clusterDetails: ClusterDetails,\n [result, metrics]: responseWithMetrics,\n ): ClusterObjects {\n const objects: ClusterObjects = {\n cluster: {\n name: clusterDetails.name,\n ...(clusterDetails.title && { title: clusterDetails.title }),\n },\n podMetrics: toClientSafePodMetrics(metrics),\n resources: result.responses,\n errors: result.errors,\n };\n if (clusterDetails.dashboardUrl) {\n objects.cluster.dashboardUrl = clusterDetails.dashboardUrl;\n }\n if (clusterDetails.dashboardApp) {\n objects.cluster.dashboardApp = clusterDetails.dashboardApp;\n }\n if (clusterDetails.dashboardParameters) {\n objects.cluster.dashboardParameters = clusterDetails.dashboardParameters;\n }\n return objects;\n }\n\n async getMetricsForPods(\n clusterDetails: ClusterDetails,\n credential: KubernetesCredential,\n labelSelector: string,\n result: FetchResponseWrapper,\n ): Promise<responseWithMetrics> {\n if (clusterDetails.skipMetricsLookup) {\n return [result, []];\n }\n const namespaces: Set<string> = new Set<string>(\n result.responses\n .filter(isPodFetchResponse)\n .flatMap(r => r.resources)\n .map(p => p.metadata?.namespace)\n .filter(isString),\n );\n\n if (namespaces.size === 0) {\n return [result, []];\n }\n\n const podMetrics = await this.fetcher.fetchPodMetricsByNamespaces(\n clusterDetails,\n credential,\n namespaces,\n labelSelector,\n );\n\n result.errors.push(...podMetrics.errors);\n return [result, podMetrics.responses as PodStatusFetchResponse[]];\n }\n}\n"],"names":["KUBERNETES_LABEL_SELECTOR_QUERY_ANNOTATION","KUBERNETES_ANNOTATION"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-kubernetes-backend",
|
|
3
|
-
"version": "0.21.1-next.
|
|
3
|
+
"version": "0.21.1-next.2",
|
|
4
4
|
"description": "A Backstage backend plugin that integrates towards Kubernetes",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "backend-plugin",
|
|
@@ -49,17 +49,17 @@
|
|
|
49
49
|
"@aws-crypto/sha256-js": "^5.0.0",
|
|
50
50
|
"@aws-sdk/credential-providers": "^3.350.0",
|
|
51
51
|
"@azure/identity": "^4.0.0",
|
|
52
|
-
"@backstage/backend-plugin-api": "1.7.0-next.
|
|
53
|
-
"@backstage/catalog-client": "1.12.
|
|
52
|
+
"@backstage/backend-plugin-api": "1.7.0-next.1",
|
|
53
|
+
"@backstage/catalog-client": "1.12.2-next.0",
|
|
54
54
|
"@backstage/catalog-model": "1.7.6",
|
|
55
55
|
"@backstage/config": "1.3.6",
|
|
56
56
|
"@backstage/errors": "1.2.7",
|
|
57
57
|
"@backstage/integration-aws-node": "0.1.20-next.0",
|
|
58
|
-
"@backstage/plugin-catalog-node": "
|
|
59
|
-
"@backstage/plugin-kubernetes-common": "0.9.10-next.
|
|
60
|
-
"@backstage/plugin-kubernetes-node": "0.4.1-next.
|
|
61
|
-
"@backstage/plugin-permission-common": "0.9.
|
|
62
|
-
"@backstage/plugin-permission-node": "0.10.
|
|
58
|
+
"@backstage/plugin-catalog-node": "2.0.0-next.1",
|
|
59
|
+
"@backstage/plugin-kubernetes-common": "0.9.10-next.1",
|
|
60
|
+
"@backstage/plugin-kubernetes-node": "0.4.1-next.1",
|
|
61
|
+
"@backstage/plugin-permission-common": "0.9.6-next.0",
|
|
62
|
+
"@backstage/plugin-permission-node": "0.10.10-next.0",
|
|
63
63
|
"@backstage/types": "1.2.2",
|
|
64
64
|
"@google-cloud/container": "^5.0.0",
|
|
65
65
|
"@jest-mock/express": "^2.0.1",
|
|
@@ -75,10 +75,10 @@
|
|
|
75
75
|
"node-fetch": "^2.7.0"
|
|
76
76
|
},
|
|
77
77
|
"devDependencies": {
|
|
78
|
-
"@backstage/backend-defaults": "0.15.
|
|
79
|
-
"@backstage/backend-test-utils": "1.
|
|
80
|
-
"@backstage/cli": "0.35.
|
|
81
|
-
"@backstage/plugin-permission-backend": "0.7.
|
|
78
|
+
"@backstage/backend-defaults": "0.15.2-next.1",
|
|
79
|
+
"@backstage/backend-test-utils": "1.11.0-next.1",
|
|
80
|
+
"@backstage/cli": "0.35.4-next.2",
|
|
81
|
+
"@backstage/plugin-permission-backend": "0.7.9-next.0",
|
|
82
82
|
"@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.16-next.0",
|
|
83
83
|
"@types/express": "^4.17.6",
|
|
84
84
|
"msw": "^1.0.0",
|