@backstage/plugin-kubernetes-react 0.1.0-next.0 → 0.1.0

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,39 @@
1
1
  # @backstage/plugin-kubernetes-react
2
2
 
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 2d8151061c: Refactor Kubernetes plugins in line with ADR 11, no breaking changes yet
8
+
9
+ ### Patch Changes
10
+
11
+ - 4262e12921: Handle mixed decimals and bigint when calculating k8s resource usage
12
+ - 9a1fce352e: Updated dependency `@testing-library/jest-dom` to `^6.0.0`.
13
+ - 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage
14
+ - 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies
15
+ - Updated dependencies
16
+ - @backstage/core-plugin-api@1.7.0
17
+ - @backstage/core-components@0.13.6
18
+ - @backstage/catalog-model@1.4.3
19
+ - @backstage/errors@1.2.3
20
+ - @backstage/plugin-kubernetes-common@0.7.0
21
+ - @backstage/types@1.1.1
22
+
23
+ ## 0.1.0-next.1
24
+
25
+ ### Patch Changes
26
+
27
+ - 95518765ee: Add Kubernetes cluster plugin. Viewing Kubernetes clusters as an Admin from Backstage
28
+ - 5dac12e435: The kubernetes APIs invokes Authentication Strategies when Backstage-Kubernetes-Authorization-X-X headers are provided, this enable the possibility to invoke strategies that executes additional steps to get a kubernetes token like on pinniped or custom strategies
29
+ - Updated dependencies
30
+ - @backstage/core-components@0.13.6-next.2
31
+ - @backstage/core-plugin-api@1.7.0-next.1
32
+ - @backstage/catalog-model@1.4.3-next.0
33
+ - @backstage/errors@1.2.3-next.0
34
+ - @backstage/plugin-kubernetes-common@0.7.0-next.1
35
+ - @backstage/types@1.1.1
36
+
3
37
  ## 0.1.0-next.0
4
38
 
5
39
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -105,8 +105,14 @@ interface KubernetesApi {
105
105
  getClusters(): Promise<{
106
106
  name: string;
107
107
  authProvider: string;
108
- oidcTokenProvider?: string | undefined;
108
+ oidcTokenProvider?: string;
109
109
  }[]>;
110
+ getCluster(clusterName: string): Promise<{
111
+ name: string;
112
+ authProvider: string;
113
+ oidcTokenProvider?: string;
114
+ dashboardUrl?: string;
115
+ } | undefined>;
110
116
  getWorkloadsByEntity(request: WorkloadsByEntityRequest): Promise<ObjectsByEntityResponse>;
111
117
  getCustomObjectsByEntity(request: CustomObjectsByEntityRequest): Promise<ObjectsByEntityResponse>;
112
118
  proxy(options: {
@@ -219,7 +225,11 @@ declare class KubernetesBackendClient implements KubernetesApi {
219
225
  });
220
226
  private handleResponse;
221
227
  private postRequired;
222
- private getCluster;
228
+ getCluster(clusterName: string): Promise<{
229
+ name: string;
230
+ authProvider: string;
231
+ oidcTokenProvider?: string;
232
+ }>;
223
233
  private getCredentials;
224
234
  getObjectsByEntity(requestBody: KubernetesRequestBody): Promise<ObjectsByEntityResponse>;
225
235
  getWorkloadsByEntity(request: WorkloadsByEntityRequest): Promise<ObjectsByEntityResponse>;
@@ -233,6 +243,8 @@ declare class KubernetesBackendClient implements KubernetesApi {
233
243
  path: string;
234
244
  init?: RequestInit;
235
245
  }): Promise<Response>;
246
+ private static getKubernetesHeaders;
247
+ private static getKubernetesAuthHeaderByAuthProvider;
236
248
  }
237
249
 
238
250
  /**
package/dist/index.esm.js CHANGED
@@ -453,22 +453,44 @@ class KubernetesBackendClient {
453
453
  return (await this.handleResponse(response)).items;
454
454
  }
455
455
  async proxy(options) {
456
- var _a;
457
- const { authProvider } = await this.getCluster(options.clusterName);
458
- const { token: k8sToken } = await this.getCredentials(authProvider);
456
+ const { authProvider, oidcTokenProvider } = await this.getCluster(
457
+ options.clusterName
458
+ );
459
+ const kubernetesCredentials = await this.getCredentials(authProvider);
459
460
  const url = `${await this.discoveryApi.getBaseUrl("kubernetes")}/proxy${options.path}`;
460
461
  const identityResponse = await this.identityApi.getCredentials();
461
- const headers = {
462
+ const headers = KubernetesBackendClient.getKubernetesHeaders(
463
+ options,
464
+ kubernetesCredentials == null ? void 0 : kubernetesCredentials.token,
465
+ identityResponse,
466
+ authProvider,
467
+ oidcTokenProvider
468
+ );
469
+ return await fetch(url, { ...options.init, headers });
470
+ }
471
+ static getKubernetesHeaders(options, k8sToken, identityResponse, authProvider, oidcTokenProvider) {
472
+ var _a;
473
+ const kubernetesAuthHeader = KubernetesBackendClient.getKubernetesAuthHeaderByAuthProvider(
474
+ authProvider,
475
+ oidcTokenProvider
476
+ );
477
+ return {
462
478
  ...(_a = options.init) == null ? void 0 : _a.headers,
463
479
  [`Backstage-Kubernetes-Cluster`]: options.clusterName,
464
480
  ...k8sToken && {
465
- [`Backstage-Kubernetes-Authorization`]: `Bearer ${k8sToken}`
481
+ [kubernetesAuthHeader]: k8sToken
466
482
  },
467
483
  ...identityResponse.token && {
468
484
  Authorization: `Bearer ${identityResponse.token}`
469
485
  }
470
486
  };
471
- return await fetch(url, { ...options.init, headers });
487
+ }
488
+ static getKubernetesAuthHeaderByAuthProvider(authProvider, oidcTokenProvider) {
489
+ let header = "Backstage-Kubernetes-Authorization";
490
+ header = header.concat("-", authProvider);
491
+ if (oidcTokenProvider)
492
+ header = header.concat("-", oidcTokenProvider);
493
+ return header;
472
494
  }
473
495
  }
474
496
 
@@ -1892,8 +1914,12 @@ const currentToDeclaredResourceToPerc = (current, resource) => {
1892
1914
  if (typeof current === "number" && typeof resource === "number") {
1893
1915
  return `${Math.round(current / resource * 100)}%`;
1894
1916
  }
1895
- const numerator = BigInt(current);
1896
- const denominator = BigInt(resource);
1917
+ const numerator = BigInt(
1918
+ typeof current === "number" ? Math.round(current) : current
1919
+ );
1920
+ const denominator = BigInt(
1921
+ typeof resource === "number" ? Math.round(resource) : resource
1922
+ );
1897
1923
  return `${numerator * BigInt(100) / denominator}%`;
1898
1924
  };
1899
1925
  const podStatusToCpuUtil = (podStatus) => {