@backstage/plugin-kubernetes-backend 0.16.4 → 0.17.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 +70 -3
- package/alpha/package.json +1 -1
- package/dist/alpha.cjs.js +1 -3
- package/dist/alpha.cjs.js.map +1 -1
- package/dist/index.cjs.js +71 -47
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +12 -9
- package/package.json +14 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,79 @@
|
|
|
1
1
|
# @backstage/plugin-kubernetes-backend
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.17.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 6c19c14: **BREAKING**: `KubernetesProxy` now requires the `DiscoveryService` to be passed to the constuctor
|
|
8
|
+
- 5dd8177: **BREAKING** Winston logger has been replaced with `LoggerService`
|
|
4
9
|
|
|
5
10
|
### Patch Changes
|
|
6
11
|
|
|
7
|
-
-
|
|
12
|
+
- f5cec55: Fixing issue where `BackstageCredentials` were not properly forwarded for all calls
|
|
13
|
+
- dd269e9: Fixed a bug where the proxy handler did not properly handle a missing header
|
|
14
|
+
- 9d89aed: Fixed a crash reading `credentials` from `undefined`.
|
|
15
|
+
- e5a2ccc: Updated dependency `@types/http-proxy-middleware` to `^1.0.0`.
|
|
8
16
|
- Updated dependencies
|
|
9
|
-
- @backstage/plugin-kubernetes-node@0.1.
|
|
17
|
+
- @backstage/plugin-kubernetes-node@0.1.11
|
|
18
|
+
- @backstage/backend-common@0.21.7
|
|
19
|
+
- @backstage/plugin-permission-node@0.7.28
|
|
20
|
+
- @backstage/backend-plugin-api@0.6.17
|
|
21
|
+
- @backstage/plugin-auth-node@0.4.12
|
|
22
|
+
- @backstage/catalog-client@1.6.4
|
|
23
|
+
- @backstage/integration-aws-node@0.1.12
|
|
24
|
+
- @backstage/plugin-catalog-node@1.11.1
|
|
25
|
+
- @backstage/catalog-model@1.4.5
|
|
26
|
+
- @backstage/config@1.2.0
|
|
27
|
+
- @backstage/errors@1.2.4
|
|
28
|
+
- @backstage/types@1.1.1
|
|
29
|
+
- @backstage/plugin-kubernetes-common@0.7.5
|
|
30
|
+
- @backstage/plugin-permission-common@0.7.13
|
|
31
|
+
|
|
32
|
+
## 0.17.0-next.1
|
|
33
|
+
|
|
34
|
+
### Minor Changes
|
|
35
|
+
|
|
36
|
+
- 6c19c14: **BREAKING**: `KubernetesProxy` now requires the `DiscoveryService` to be passed to the constuctor
|
|
37
|
+
|
|
38
|
+
### Patch Changes
|
|
39
|
+
|
|
40
|
+
- f5cec55: Fixing issue where `BackstageCredentials` were not properly forwarded for all calls
|
|
41
|
+
- Updated dependencies
|
|
42
|
+
- @backstage/plugin-kubernetes-node@0.1.11-next.1
|
|
43
|
+
- @backstage/backend-common@0.21.7-next.1
|
|
44
|
+
- @backstage/backend-plugin-api@0.6.17-next.1
|
|
45
|
+
- @backstage/plugin-auth-node@0.4.12-next.1
|
|
46
|
+
- @backstage/catalog-client@1.6.4-next.0
|
|
47
|
+
- @backstage/plugin-permission-node@0.7.28-next.1
|
|
48
|
+
- @backstage/catalog-model@1.4.5
|
|
49
|
+
- @backstage/config@1.2.0
|
|
50
|
+
- @backstage/errors@1.2.4
|
|
51
|
+
- @backstage/integration-aws-node@0.1.12
|
|
52
|
+
- @backstage/types@1.1.1
|
|
53
|
+
- @backstage/plugin-catalog-node@1.11.1-next.1
|
|
54
|
+
- @backstage/plugin-kubernetes-common@0.7.5
|
|
55
|
+
- @backstage/plugin-permission-common@0.7.13
|
|
56
|
+
|
|
57
|
+
## 0.16.4-next.0
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- 9d89aed: Fixed a crash reading `credentials` from `undefined`.
|
|
62
|
+
- Updated dependencies
|
|
63
|
+
- @backstage/backend-common@0.21.7-next.0
|
|
64
|
+
- @backstage/plugin-kubernetes-node@0.1.11-next.0
|
|
65
|
+
- @backstage/backend-plugin-api@0.6.17-next.0
|
|
66
|
+
- @backstage/catalog-client@1.6.3
|
|
67
|
+
- @backstage/catalog-model@1.4.5
|
|
68
|
+
- @backstage/config@1.2.0
|
|
69
|
+
- @backstage/errors@1.2.4
|
|
70
|
+
- @backstage/integration-aws-node@0.1.12
|
|
71
|
+
- @backstage/types@1.1.1
|
|
72
|
+
- @backstage/plugin-auth-node@0.4.12-next.0
|
|
73
|
+
- @backstage/plugin-catalog-node@1.11.1-next.0
|
|
74
|
+
- @backstage/plugin-kubernetes-common@0.7.5
|
|
75
|
+
- @backstage/plugin-permission-common@0.7.13
|
|
76
|
+
- @backstage/plugin-permission-node@0.7.28-next.0
|
|
10
77
|
|
|
11
78
|
## 0.16.3
|
|
12
79
|
|
package/alpha/package.json
CHANGED
package/dist/alpha.cjs.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var backendCommon = require('@backstage/backend-common');
|
|
6
5
|
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
7
6
|
var alpha = require('@backstage/plugin-catalog-node/alpha');
|
|
8
7
|
var pluginKubernetesBackend = require('@backstage/plugin-kubernetes-backend');
|
|
@@ -142,9 +141,8 @@ const kubernetesPlugin = backendPluginApi.createBackendPlugin({
|
|
|
142
141
|
auth,
|
|
143
142
|
httpAuth
|
|
144
143
|
}) {
|
|
145
|
-
const winstonLogger = backendCommon.loggerToWinstonLogger(logger);
|
|
146
144
|
const builder = pluginKubernetesBackend.KubernetesBuilder.createBuilder({
|
|
147
|
-
logger
|
|
145
|
+
logger,
|
|
148
146
|
config,
|
|
149
147
|
catalogApi,
|
|
150
148
|
permissions,
|
package/dist/alpha.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha.cjs.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright 2023 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 { loggerToWinstonLogger } from '@backstage/backend-common';\nimport {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\n\nimport { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend';\n\nimport {\n kubernetesAuthStrategyExtensionPoint,\n kubernetesClusterSupplierExtensionPoint,\n kubernetesFetcherExtensionPoint,\n kubernetesObjectsProviderExtensionPoint,\n kubernetesServiceLocatorExtensionPoint,\n type AuthenticationStrategy,\n type KubernetesAuthStrategyExtensionPoint,\n type KubernetesClusterSupplierExtensionPoint,\n type KubernetesClustersSupplier,\n type KubernetesFetcher,\n type KubernetesFetcherExtensionPoint,\n type KubernetesObjectsProvider,\n type KubernetesObjectsProviderExtensionPoint,\n type KubernetesServiceLocator,\n type KubernetesServiceLocatorExtensionPoint,\n} from '@backstage/plugin-kubernetes-node';\n\nclass ObjectsProvider implements KubernetesObjectsProviderExtensionPoint {\n private objectsProvider: KubernetesObjectsProvider | undefined;\n\n getObjectsProvider() {\n return this.objectsProvider;\n }\n\n addObjectsProvider(provider: KubernetesObjectsProvider) {\n if (this.objectsProvider) {\n throw new Error(\n 'Multiple Kubernetes objects provider is not supported at this time',\n );\n }\n this.objectsProvider = provider;\n }\n}\n\nclass ClusterSuplier implements KubernetesClusterSupplierExtensionPoint {\n private clusterSupplier: KubernetesClustersSupplier | undefined;\n\n getClusterSupplier() {\n return this.clusterSupplier;\n }\n\n addClusterSupplier(clusterSupplier: KubernetesClustersSupplier) {\n if (this.clusterSupplier) {\n throw new Error(\n 'Multiple Kubernetes Cluster Suppliers is not supported at this time',\n );\n }\n this.clusterSupplier = clusterSupplier;\n }\n}\n\nclass Fetcher implements KubernetesFetcherExtensionPoint {\n private fetcher: KubernetesFetcher | undefined;\n\n getFetcher() {\n return this.fetcher;\n }\n\n addFetcher(fetcher: KubernetesFetcher) {\n if (this.fetcher) {\n throw new Error(\n 'Multiple Kubernetes Fetchers is not supported at this time',\n );\n }\n this.fetcher = fetcher;\n }\n}\n\nclass ServiceLocator implements KubernetesServiceLocatorExtensionPoint {\n private serviceLocator: KubernetesServiceLocator | undefined;\n\n getServiceLocator() {\n return this.serviceLocator;\n }\n\n addServiceLocator(serviceLocator: KubernetesServiceLocator) {\n if (this.serviceLocator) {\n throw new Error(\n 'Multiple Kubernetes Service Locators is not supported at this time',\n );\n }\n this.serviceLocator = serviceLocator;\n }\n}\n\nclass AuthStrategy implements KubernetesAuthStrategyExtensionPoint {\n private authStrategies: Array<{\n key: string;\n strategy: AuthenticationStrategy;\n }>;\n\n constructor() {\n this.authStrategies = new Array<{\n key: string;\n strategy: AuthenticationStrategy;\n }>();\n }\n\n static addAuthStrategiesFromArray(\n authStrategies: Array<{ key: string; strategy: AuthenticationStrategy }>,\n builder: KubernetesBuilder,\n ) {\n authStrategies.forEach(st => builder.addAuthStrategy(st.key, st.strategy));\n }\n\n getAuthenticationStrategies() {\n return this.authStrategies;\n }\n\n addAuthStrategy(key: string, authStrategy: AuthenticationStrategy) {\n this.authStrategies.push({ key, strategy: authStrategy });\n }\n}\n\n/**\n * This is the backend plugin that provides the Kubernetes integration.\n * @alpha\n */\n\nexport const kubernetesPlugin = createBackendPlugin({\n pluginId: 'kubernetes',\n register(env) {\n const extPointObjectsProvider = new ObjectsProvider();\n const extPointClusterSuplier = new ClusterSuplier();\n const extPointAuthStrategy = new AuthStrategy();\n const extPointFetcher = new Fetcher();\n const extPointServiceLocator = new ServiceLocator();\n\n env.registerExtensionPoint(\n kubernetesObjectsProviderExtensionPoint,\n extPointObjectsProvider,\n );\n env.registerExtensionPoint(\n kubernetesClusterSupplierExtensionPoint,\n extPointClusterSuplier,\n );\n env.registerExtensionPoint(\n kubernetesAuthStrategyExtensionPoint,\n extPointAuthStrategy,\n );\n env.registerExtensionPoint(\n kubernetesFetcherExtensionPoint,\n extPointFetcher,\n );\n env.registerExtensionPoint(\n kubernetesServiceLocatorExtensionPoint,\n extPointServiceLocator,\n );\n\n env.registerInit({\n deps: {\n http: coreServices.httpRouter,\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n discovery: coreServices.discovery,\n catalogApi: catalogServiceRef,\n permissions: coreServices.permissions,\n auth: coreServices.auth,\n httpAuth: coreServices.httpAuth,\n },\n async init({\n http,\n logger,\n config,\n discovery,\n catalogApi,\n permissions,\n auth,\n httpAuth,\n }) {\n const winstonLogger = loggerToWinstonLogger(logger);\n // TODO: expose all of the customization & extension points of the builder here\n const builder: KubernetesBuilder = KubernetesBuilder.createBuilder({\n logger: winstonLogger,\n config,\n catalogApi,\n permissions,\n discovery,\n auth,\n httpAuth,\n })\n .setObjectsProvider(extPointObjectsProvider.getObjectsProvider())\n .setClusterSupplier(extPointClusterSuplier.getClusterSupplier())\n .setFetcher(extPointFetcher.getFetcher())\n .setServiceLocator(extPointServiceLocator.getServiceLocator());\n\n AuthStrategy.addAuthStrategiesFromArray(\n extPointAuthStrategy.getAuthenticationStrategies(),\n builder,\n );\n const { router } = await builder.build();\n http.use(router);\n },\n });\n },\n});\n"],"names":["createBackendPlugin","kubernetesObjectsProviderExtensionPoint","kubernetesClusterSupplierExtensionPoint","kubernetesAuthStrategyExtensionPoint","kubernetesFetcherExtensionPoint","kubernetesServiceLocatorExtensionPoint","coreServices","catalogServiceRef","loggerToWinstonLogger","KubernetesBuilder"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alpha.cjs.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright 2023 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 {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\n\nimport { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend';\n\nimport {\n type AuthenticationStrategy,\n kubernetesAuthStrategyExtensionPoint,\n type KubernetesAuthStrategyExtensionPoint,\n type KubernetesClustersSupplier,\n kubernetesClusterSupplierExtensionPoint,\n type KubernetesClusterSupplierExtensionPoint,\n type KubernetesFetcher,\n kubernetesFetcherExtensionPoint,\n type KubernetesFetcherExtensionPoint,\n type KubernetesObjectsProvider,\n kubernetesObjectsProviderExtensionPoint,\n type KubernetesObjectsProviderExtensionPoint,\n type KubernetesServiceLocator,\n kubernetesServiceLocatorExtensionPoint,\n type KubernetesServiceLocatorExtensionPoint,\n} from '@backstage/plugin-kubernetes-node';\n\nclass ObjectsProvider implements KubernetesObjectsProviderExtensionPoint {\n private objectsProvider: KubernetesObjectsProvider | undefined;\n\n getObjectsProvider() {\n return this.objectsProvider;\n }\n\n addObjectsProvider(provider: KubernetesObjectsProvider) {\n if (this.objectsProvider) {\n throw new Error(\n 'Multiple Kubernetes objects provider is not supported at this time',\n );\n }\n this.objectsProvider = provider;\n }\n}\n\nclass ClusterSuplier implements KubernetesClusterSupplierExtensionPoint {\n private clusterSupplier: KubernetesClustersSupplier | undefined;\n\n getClusterSupplier() {\n return this.clusterSupplier;\n }\n\n addClusterSupplier(clusterSupplier: KubernetesClustersSupplier) {\n if (this.clusterSupplier) {\n throw new Error(\n 'Multiple Kubernetes Cluster Suppliers is not supported at this time',\n );\n }\n this.clusterSupplier = clusterSupplier;\n }\n}\n\nclass Fetcher implements KubernetesFetcherExtensionPoint {\n private fetcher: KubernetesFetcher | undefined;\n\n getFetcher() {\n return this.fetcher;\n }\n\n addFetcher(fetcher: KubernetesFetcher) {\n if (this.fetcher) {\n throw new Error(\n 'Multiple Kubernetes Fetchers is not supported at this time',\n );\n }\n this.fetcher = fetcher;\n }\n}\n\nclass ServiceLocator implements KubernetesServiceLocatorExtensionPoint {\n private serviceLocator: KubernetesServiceLocator | undefined;\n\n getServiceLocator() {\n return this.serviceLocator;\n }\n\n addServiceLocator(serviceLocator: KubernetesServiceLocator) {\n if (this.serviceLocator) {\n throw new Error(\n 'Multiple Kubernetes Service Locators is not supported at this time',\n );\n }\n this.serviceLocator = serviceLocator;\n }\n}\n\nclass AuthStrategy implements KubernetesAuthStrategyExtensionPoint {\n private authStrategies: Array<{\n key: string;\n strategy: AuthenticationStrategy;\n }>;\n\n constructor() {\n this.authStrategies = new Array<{\n key: string;\n strategy: AuthenticationStrategy;\n }>();\n }\n\n static addAuthStrategiesFromArray(\n authStrategies: Array<{ key: string; strategy: AuthenticationStrategy }>,\n builder: KubernetesBuilder,\n ) {\n authStrategies.forEach(st => builder.addAuthStrategy(st.key, st.strategy));\n }\n\n getAuthenticationStrategies() {\n return this.authStrategies;\n }\n\n addAuthStrategy(key: string, authStrategy: AuthenticationStrategy) {\n this.authStrategies.push({ key, strategy: authStrategy });\n }\n}\n\n/**\n * This is the backend plugin that provides the Kubernetes integration.\n * @alpha\n */\n\nexport const kubernetesPlugin = createBackendPlugin({\n pluginId: 'kubernetes',\n register(env) {\n const extPointObjectsProvider = new ObjectsProvider();\n const extPointClusterSuplier = new ClusterSuplier();\n const extPointAuthStrategy = new AuthStrategy();\n const extPointFetcher = new Fetcher();\n const extPointServiceLocator = new ServiceLocator();\n\n env.registerExtensionPoint(\n kubernetesObjectsProviderExtensionPoint,\n extPointObjectsProvider,\n );\n env.registerExtensionPoint(\n kubernetesClusterSupplierExtensionPoint,\n extPointClusterSuplier,\n );\n env.registerExtensionPoint(\n kubernetesAuthStrategyExtensionPoint,\n extPointAuthStrategy,\n );\n env.registerExtensionPoint(\n kubernetesFetcherExtensionPoint,\n extPointFetcher,\n );\n env.registerExtensionPoint(\n kubernetesServiceLocatorExtensionPoint,\n extPointServiceLocator,\n );\n\n env.registerInit({\n deps: {\n http: coreServices.httpRouter,\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n discovery: coreServices.discovery,\n catalogApi: catalogServiceRef,\n permissions: coreServices.permissions,\n auth: coreServices.auth,\n httpAuth: coreServices.httpAuth,\n },\n async init({\n http,\n logger,\n config,\n discovery,\n catalogApi,\n permissions,\n auth,\n httpAuth,\n }) {\n // TODO: expose all of the customization & extension points of the builder here\n const builder: KubernetesBuilder = KubernetesBuilder.createBuilder({\n logger,\n config,\n catalogApi,\n permissions,\n discovery,\n auth,\n httpAuth,\n })\n .setObjectsProvider(extPointObjectsProvider.getObjectsProvider())\n .setClusterSupplier(extPointClusterSuplier.getClusterSupplier())\n .setFetcher(extPointFetcher.getFetcher())\n .setServiceLocator(extPointServiceLocator.getServiceLocator());\n\n AuthStrategy.addAuthStrategiesFromArray(\n extPointAuthStrategy.getAuthenticationStrategies(),\n builder,\n );\n const { router } = await builder.build();\n http.use(router);\n },\n });\n },\n});\n"],"names":["createBackendPlugin","kubernetesObjectsProviderExtensionPoint","kubernetesClusterSupplierExtensionPoint","kubernetesAuthStrategyExtensionPoint","kubernetesFetcherExtensionPoint","kubernetesServiceLocatorExtensionPoint","coreServices","catalogServiceRef","KubernetesBuilder"],"mappings":"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"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -21,7 +21,6 @@ var catalogModel = require('@backstage/catalog-model');
|
|
|
21
21
|
var lodash = require('lodash');
|
|
22
22
|
var fetch = require('node-fetch');
|
|
23
23
|
var https = require('https');
|
|
24
|
-
var pluginAuthNode = require('@backstage/plugin-auth-node');
|
|
25
24
|
var pluginPermissionCommon = require('@backstage/plugin-permission-common');
|
|
26
25
|
var httpProxyMiddleware = require('http-proxy-middleware');
|
|
27
26
|
|
|
@@ -471,7 +470,7 @@ function runPeriodically(fn, delayMs) {
|
|
|
471
470
|
|
|
472
471
|
var name = "@backstage/plugin-kubernetes-backend";
|
|
473
472
|
var description = "A Backstage backend plugin that integrates towards Kubernetes";
|
|
474
|
-
var version = "0.
|
|
473
|
+
var version = "0.17.0";
|
|
475
474
|
var main = "src/index.ts";
|
|
476
475
|
var types = "src/index.ts";
|
|
477
476
|
var license = "Apache-2.0";
|
|
@@ -539,7 +538,7 @@ var dependencies = {
|
|
|
539
538
|
"@jest-mock/express": "^2.0.1",
|
|
540
539
|
"@kubernetes/client-node": "0.20.0",
|
|
541
540
|
"@types/express": "^4.17.6",
|
|
542
|
-
"@types/http-proxy-middleware": "^0.
|
|
541
|
+
"@types/http-proxy-middleware": "^1.0.0",
|
|
543
542
|
"@types/luxon": "^3.0.0",
|
|
544
543
|
compression: "^1.7.4",
|
|
545
544
|
cors: "^2.8.5",
|
|
@@ -882,10 +881,13 @@ const addResourceRoutesToRouter = (router, catalogApi, objectsProvider, auth, ht
|
|
|
882
881
|
};
|
|
883
882
|
router.post("/resources/workloads/query", async (req, res) => {
|
|
884
883
|
const entity = await getEntityByReq(req);
|
|
885
|
-
const response = await objectsProvider.getKubernetesObjectsByEntity(
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
884
|
+
const response = await objectsProvider.getKubernetesObjectsByEntity(
|
|
885
|
+
{
|
|
886
|
+
entity,
|
|
887
|
+
auth: req.body.auth
|
|
888
|
+
},
|
|
889
|
+
{ credentials: await httpAuth.credentials(req) }
|
|
890
|
+
);
|
|
889
891
|
res.json(response);
|
|
890
892
|
});
|
|
891
893
|
router.post("/resources/custom/query", async (req, res) => {
|
|
@@ -897,11 +899,14 @@ const addResourceRoutesToRouter = (router, catalogApi, objectsProvider, auth, ht
|
|
|
897
899
|
} else if (req.body.customResources.length === 0) {
|
|
898
900
|
throw new errors.InputError("at least 1 customResource is required");
|
|
899
901
|
}
|
|
900
|
-
const response = await objectsProvider.getCustomResourcesByEntity(
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
902
|
+
const response = await objectsProvider.getCustomResourcesByEntity(
|
|
903
|
+
{
|
|
904
|
+
entity,
|
|
905
|
+
customResources: req.body.customResources,
|
|
906
|
+
auth: req.body.auth
|
|
907
|
+
},
|
|
908
|
+
{ credentials: await httpAuth.credentials(req) }
|
|
909
|
+
);
|
|
905
910
|
res.json(response);
|
|
906
911
|
});
|
|
907
912
|
};
|
|
@@ -918,11 +923,11 @@ class CatalogRelationServiceLocator {
|
|
|
918
923
|
this.clusterSupplier = clusterSupplier;
|
|
919
924
|
}
|
|
920
925
|
// As this implementation always returns all clusters serviceId is ignored here
|
|
921
|
-
getClustersByEntity(entity,
|
|
926
|
+
getClustersByEntity(entity, requestContext) {
|
|
922
927
|
if (entity.relations && entity.relations.some(
|
|
923
928
|
(r) => r.type === "dependsOn" && r.targetRef.includes("resource:")
|
|
924
929
|
)) {
|
|
925
|
-
return this.clusterSupplier.getClusters().then((clusters) => {
|
|
930
|
+
return this.clusterSupplier.getClusters({ credentials: requestContext.credentials }).then((clusters) => {
|
|
926
931
|
return {
|
|
927
932
|
clusters: clusters.filter(
|
|
928
933
|
(c) => this.doesEntityDependOnCluster(entity, c)
|
|
@@ -954,8 +959,8 @@ class MultiTenantServiceLocator {
|
|
|
954
959
|
this.clusterSupplier = clusterSupplier;
|
|
955
960
|
}
|
|
956
961
|
// As this implementation always returns all clusters serviceId is ignored here
|
|
957
|
-
getClustersByEntity(_entity,
|
|
958
|
-
return this.clusterSupplier.getClusters().then((clusters) => ({ clusters }));
|
|
962
|
+
getClustersByEntity(_entity, requestContext) {
|
|
963
|
+
return this.clusterSupplier.getClusters({ credentials: requestContext.credentials }).then((clusters) => ({ clusters }));
|
|
959
964
|
}
|
|
960
965
|
}
|
|
961
966
|
|
|
@@ -971,8 +976,8 @@ class SingleTenantServiceLocator {
|
|
|
971
976
|
this.clusterSupplier = clusterSupplier;
|
|
972
977
|
}
|
|
973
978
|
// As this implementation always returns all clusters serviceId is ignored here
|
|
974
|
-
getClustersByEntity(_entity,
|
|
975
|
-
return this.clusterSupplier.getClusters().then((clusters) => {
|
|
979
|
+
getClustersByEntity(_entity, requestContext) {
|
|
980
|
+
return this.clusterSupplier.getClusters({ credentials: requestContext.credentials }).then((clusters) => {
|
|
976
981
|
var _a, _b;
|
|
977
982
|
if ((_b = (_a = _entity.metadata) == null ? void 0 : _a.annotations) == null ? void 0 : _b["backstage.io/kubernetes-cluster"]) {
|
|
978
983
|
return {
|
|
@@ -1126,30 +1131,32 @@ class KubernetesFanOutHandler {
|
|
|
1126
1131
|
this.objectTypesToFetch = new Set(objectTypesToFetch);
|
|
1127
1132
|
this.authStrategy = authStrategy;
|
|
1128
1133
|
}
|
|
1129
|
-
async getCustomResourcesByEntity({
|
|
1130
|
-
entity,
|
|
1131
|
-
auth,
|
|
1132
|
-
customResources
|
|
1133
|
-
}) {
|
|
1134
|
+
async getCustomResourcesByEntity({ entity, auth, customResources }, options) {
|
|
1134
1135
|
return this.fanOutRequests(
|
|
1135
1136
|
entity,
|
|
1136
1137
|
auth,
|
|
1138
|
+
{ credentials: options.credentials },
|
|
1137
1139
|
/* @__PURE__ */ new Set(),
|
|
1138
1140
|
customResources
|
|
1139
1141
|
);
|
|
1140
1142
|
}
|
|
1141
|
-
async getKubernetesObjectsByEntity({
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1143
|
+
async getKubernetesObjectsByEntity({ entity, auth }, options) {
|
|
1144
|
+
return this.fanOutRequests(
|
|
1145
|
+
entity,
|
|
1146
|
+
auth,
|
|
1147
|
+
{
|
|
1148
|
+
credentials: options.credentials
|
|
1149
|
+
},
|
|
1150
|
+
this.objectTypesToFetch
|
|
1151
|
+
);
|
|
1146
1152
|
}
|
|
1147
|
-
async fanOutRequests(entity, auth, objectTypesToFetch, customResources) {
|
|
1153
|
+
async fanOutRequests(entity, auth, options, objectTypesToFetch, customResources) {
|
|
1148
1154
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
1149
1155
|
const entityName = ((_b = (_a = entity.metadata) == null ? void 0 : _a.annotations) == null ? void 0 : _b["backstage.io/kubernetes-id"]) || ((_c = entity.metadata) == null ? void 0 : _c.name);
|
|
1150
1156
|
const { clusters } = await this.serviceLocator.getClustersByEntity(entity, {
|
|
1151
1157
|
objectTypesToFetch,
|
|
1152
|
-
customResources: customResources != null ? customResources : []
|
|
1158
|
+
customResources: customResources != null ? customResources : [],
|
|
1159
|
+
credentials: options.credentials
|
|
1153
1160
|
});
|
|
1154
1161
|
this.logger.info(
|
|
1155
1162
|
`entity.metadata.name=${entityName} clusterDetails=[${clusters.map((c) => c.name).join(", ")}]`
|
|
@@ -1466,9 +1473,15 @@ class KubernetesProxy {
|
|
|
1466
1473
|
__publicField$1(this, "logger");
|
|
1467
1474
|
__publicField$1(this, "clusterSupplier");
|
|
1468
1475
|
__publicField$1(this, "authStrategy");
|
|
1476
|
+
__publicField$1(this, "httpAuth");
|
|
1469
1477
|
this.logger = options.logger;
|
|
1470
1478
|
this.clusterSupplier = options.clusterSupplier;
|
|
1471
1479
|
this.authStrategy = options.authStrategy;
|
|
1480
|
+
const legacy = backendCommon.createLegacyAuthAdapters({
|
|
1481
|
+
discovery: options.discovery,
|
|
1482
|
+
httpAuth: options.httpAuth
|
|
1483
|
+
});
|
|
1484
|
+
this.httpAuth = legacy.httpAuth;
|
|
1472
1485
|
}
|
|
1473
1486
|
createRequestHandler(options) {
|
|
1474
1487
|
const { permissionApi } = options;
|
|
@@ -1477,9 +1490,7 @@ class KubernetesProxy {
|
|
|
1477
1490
|
const authorizeResponse = await permissionApi.authorize(
|
|
1478
1491
|
[{ permission: pluginKubernetesCommon.kubernetesProxyPermission }],
|
|
1479
1492
|
{
|
|
1480
|
-
|
|
1481
|
-
req.header("authorization")
|
|
1482
|
-
)
|
|
1493
|
+
credentials: await this.httpAuth.credentials(req)
|
|
1483
1494
|
}
|
|
1484
1495
|
);
|
|
1485
1496
|
const auth = authorizeResponse[0];
|
|
@@ -1504,7 +1515,8 @@ class KubernetesProxy {
|
|
|
1504
1515
|
if (!middleware) {
|
|
1505
1516
|
const logger = this.logger.child({ cluster: originalCluster.name });
|
|
1506
1517
|
middleware = httpProxyMiddleware.createProxyMiddleware({
|
|
1507
|
-
|
|
1518
|
+
// TODO: Add 'log' to LoggerService
|
|
1519
|
+
logProvider: () => backendCommon.loggerToWinstonLogger(logger),
|
|
1508
1520
|
ws: true,
|
|
1509
1521
|
secure: !originalCluster.skipTLSVerify,
|
|
1510
1522
|
changeOrigin: true,
|
|
@@ -1529,8 +1541,8 @@ class KubernetesProxy {
|
|
|
1529
1541
|
cluster.caData
|
|
1530
1542
|
)) == null ? void 0 : _a.toString()
|
|
1531
1543
|
};
|
|
1532
|
-
const authHeader = req.
|
|
1533
|
-
if (authHeader) {
|
|
1544
|
+
const authHeader = req.headers[HEADER_KUBERNETES_AUTH.toLocaleLowerCase("en-US")];
|
|
1545
|
+
if (typeof authHeader === "string") {
|
|
1534
1546
|
req.headers.authorization = authHeader;
|
|
1535
1547
|
} else {
|
|
1536
1548
|
const authObj = KubernetesProxy.authHeadersToKubernetesRequestAuth(
|
|
@@ -1553,7 +1565,7 @@ class KubernetesProxy {
|
|
|
1553
1565
|
`Cluster '${originalCluster.name}' request error`,
|
|
1554
1566
|
error
|
|
1555
1567
|
);
|
|
1556
|
-
logger.error(wrappedError);
|
|
1568
|
+
logger.error("Kubernetes proxy error", wrappedError);
|
|
1557
1569
|
const body = {
|
|
1558
1570
|
error: errors.serializeError(wrappedError, {
|
|
1559
1571
|
includeStack: process.env.NODE_ENV === "development"
|
|
@@ -1570,7 +1582,9 @@ class KubernetesProxy {
|
|
|
1570
1582
|
}
|
|
1571
1583
|
async getClusterForRequest(req) {
|
|
1572
1584
|
const clusterName = req.headers[HEADER_KUBERNETES_CLUSTER.toLowerCase()];
|
|
1573
|
-
const clusters = await this.clusterSupplier.getClusters(
|
|
1585
|
+
const clusters = await this.clusterSupplier.getClusters({
|
|
1586
|
+
credentials: await this.httpAuth.credentials(req)
|
|
1587
|
+
});
|
|
1574
1588
|
if (!clusters || clusters.length <= 0) {
|
|
1575
1589
|
throw new errors.NotFoundError(`No Clusters configured`);
|
|
1576
1590
|
}
|
|
@@ -1677,7 +1691,12 @@ class KubernetesBuilder {
|
|
|
1677
1691
|
const fetcher = this.getFetcher();
|
|
1678
1692
|
const clusterSupplier = this.getClusterSupplier();
|
|
1679
1693
|
const authStrategyMap = this.getAuthStrategyMap();
|
|
1680
|
-
const proxy = this.getProxy(
|
|
1694
|
+
const proxy = this.getProxy(
|
|
1695
|
+
logger,
|
|
1696
|
+
clusterSupplier,
|
|
1697
|
+
this.env.discovery,
|
|
1698
|
+
httpAuth
|
|
1699
|
+
);
|
|
1681
1700
|
const serviceLocator = this.getServiceLocator();
|
|
1682
1701
|
const objectsProvider = this.getObjectsProvider({
|
|
1683
1702
|
logger,
|
|
@@ -1818,7 +1837,7 @@ class KubernetesBuilder {
|
|
|
1818
1837
|
buildHttpServiceLocator(_clusterSupplier) {
|
|
1819
1838
|
throw new Error("not implemented");
|
|
1820
1839
|
}
|
|
1821
|
-
buildProxy(logger, clusterSupplier) {
|
|
1840
|
+
buildProxy(logger, clusterSupplier, discovery, httpAuth) {
|
|
1822
1841
|
const authStrategyMap = this.getAuthStrategyMap();
|
|
1823
1842
|
const authStrategy = new DispatchStrategy({
|
|
1824
1843
|
authStrategyMap
|
|
@@ -1826,7 +1845,9 @@ class KubernetesBuilder {
|
|
|
1826
1845
|
this.proxy = new KubernetesProxy({
|
|
1827
1846
|
logger,
|
|
1828
1847
|
clusterSupplier,
|
|
1829
|
-
authStrategy
|
|
1848
|
+
authStrategy,
|
|
1849
|
+
discovery,
|
|
1850
|
+
httpAuth
|
|
1830
1851
|
});
|
|
1831
1852
|
return this.proxy;
|
|
1832
1853
|
}
|
|
@@ -1844,10 +1865,13 @@ class KubernetesBuilder {
|
|
|
1844
1865
|
const serviceId = req.params.serviceId;
|
|
1845
1866
|
const requestBody = req.body;
|
|
1846
1867
|
try {
|
|
1847
|
-
const response = await objectsProvider.getKubernetesObjectsByEntity(
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1868
|
+
const response = await objectsProvider.getKubernetesObjectsByEntity(
|
|
1869
|
+
{
|
|
1870
|
+
entity: requestBody.entity,
|
|
1871
|
+
auth: requestBody.auth || {}
|
|
1872
|
+
},
|
|
1873
|
+
{ credentials: await httpAuth.credentials(req) }
|
|
1874
|
+
);
|
|
1851
1875
|
res.json(response);
|
|
1852
1876
|
} catch (e) {
|
|
1853
1877
|
logger.error(
|
|
@@ -1957,9 +1981,9 @@ class KubernetesBuilder {
|
|
|
1957
1981
|
}
|
|
1958
1982
|
return objectTypesToFetch;
|
|
1959
1983
|
}
|
|
1960
|
-
getProxy(logger, clusterSupplier) {
|
|
1984
|
+
getProxy(logger, clusterSupplier, discovery, httpAuth) {
|
|
1961
1985
|
var _a;
|
|
1962
|
-
return (_a = this.proxy) != null ? _a : this.buildProxy(logger, clusterSupplier);
|
|
1986
|
+
return (_a = this.proxy) != null ? _a : this.buildProxy(logger, clusterSupplier, discovery, httpAuth);
|
|
1963
1987
|
}
|
|
1964
1988
|
getAuthStrategyMap() {
|
|
1965
1989
|
var _a;
|