@backstage/plugin-kubernetes-backend 0.18.6 → 0.18.7-next.1

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.
Files changed (59) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/alpha/package.json +1 -1
  3. package/dist/alpha.cjs.js +3 -150
  4. package/dist/alpha.cjs.js.map +1 -1
  5. package/dist/auth/AksStrategy.cjs.js +17 -0
  6. package/dist/auth/AksStrategy.cjs.js.map +1 -0
  7. package/dist/auth/AnonymousStrategy.cjs.js +16 -0
  8. package/dist/auth/AnonymousStrategy.cjs.js.map +1 -0
  9. package/dist/auth/AwsIamStrategy.cjs.js +80 -0
  10. package/dist/auth/AwsIamStrategy.cjs.js.map +1 -0
  11. package/dist/auth/AzureIdentityStrategy.cjs.js +58 -0
  12. package/dist/auth/AzureIdentityStrategy.cjs.js.map +1 -0
  13. package/dist/auth/DispatchStrategy.cjs.js +37 -0
  14. package/dist/auth/DispatchStrategy.cjs.js.map +1 -0
  15. package/dist/auth/GoogleServiceAccountStrategy.cjs.js +45 -0
  16. package/dist/auth/GoogleServiceAccountStrategy.cjs.js.map +1 -0
  17. package/dist/auth/GoogleStrategy.cjs.js +22 -0
  18. package/dist/auth/GoogleStrategy.cjs.js.map +1 -0
  19. package/dist/auth/OidcStrategy.cjs.js +34 -0
  20. package/dist/auth/OidcStrategy.cjs.js.map +1 -0
  21. package/dist/auth/ServiceAccountStrategy.cjs.js +33 -0
  22. package/dist/auth/ServiceAccountStrategy.cjs.js.map +1 -0
  23. package/dist/cluster-locator/CatalogClusterLocator.cjs.js +73 -0
  24. package/dist/cluster-locator/CatalogClusterLocator.cjs.js.map +1 -0
  25. package/dist/cluster-locator/ConfigClusterLocator.cjs.js +100 -0
  26. package/dist/cluster-locator/ConfigClusterLocator.cjs.js.map +1 -0
  27. package/dist/cluster-locator/GkeClusterLocator.cjs.js +126 -0
  28. package/dist/cluster-locator/GkeClusterLocator.cjs.js.map +1 -0
  29. package/dist/cluster-locator/LocalKubectlProxyLocator.cjs.js +35 -0
  30. package/dist/cluster-locator/LocalKubectlProxyLocator.cjs.js.map +1 -0
  31. package/dist/cluster-locator/index.cjs.js +67 -0
  32. package/dist/cluster-locator/index.cjs.js.map +1 -0
  33. package/dist/index.cjs.js +31 -1904
  34. package/dist/index.cjs.js.map +1 -1
  35. package/dist/package.json.cjs.js +156 -0
  36. package/dist/package.json.cjs.js.map +1 -0
  37. package/dist/plugin.cjs.js +155 -0
  38. package/dist/plugin.cjs.js.map +1 -0
  39. package/dist/routes/resourcesRoutes.cjs.js +65 -0
  40. package/dist/routes/resourcesRoutes.cjs.js.map +1 -0
  41. package/dist/service/KubernetesBuilder.cjs.js +367 -0
  42. package/dist/service/KubernetesBuilder.cjs.js.map +1 -0
  43. package/dist/service/KubernetesFanOutHandler.cjs.js +254 -0
  44. package/dist/service/KubernetesFanOutHandler.cjs.js.map +1 -0
  45. package/dist/service/KubernetesFetcher.cjs.js +231 -0
  46. package/dist/service/KubernetesFetcher.cjs.js.map +1 -0
  47. package/dist/service/KubernetesProxy.cjs.js +195 -0
  48. package/dist/service/KubernetesProxy.cjs.js.map +1 -0
  49. package/dist/service/router.cjs.js +11 -0
  50. package/dist/service/router.cjs.js.map +1 -0
  51. package/dist/service/runPeriodically.cjs.js +29 -0
  52. package/dist/service/runPeriodically.cjs.js.map +1 -0
  53. package/dist/service-locator/CatalogRelationServiceLocator.cjs.js +31 -0
  54. package/dist/service-locator/CatalogRelationServiceLocator.cjs.js.map +1 -0
  55. package/dist/service-locator/MultiTenantServiceLocator.cjs.js +15 -0
  56. package/dist/service-locator/MultiTenantServiceLocator.cjs.js.map +1 -0
  57. package/dist/service-locator/SingleTenantServiceLocator.cjs.js +24 -0
  58. package/dist/service-locator/SingleTenantServiceLocator.cjs.js.map +1 -0
  59. package/package.json +21 -20
@@ -0,0 +1,155 @@
1
+ 'use strict';
2
+
3
+ var backendPluginApi = require('@backstage/backend-plugin-api');
4
+ var alpha = require('@backstage/plugin-catalog-node/alpha');
5
+ var pluginKubernetesBackend = require('@backstage/plugin-kubernetes-backend');
6
+ var pluginKubernetesNode = require('@backstage/plugin-kubernetes-node');
7
+
8
+ class ObjectsProvider {
9
+ objectsProvider;
10
+ getObjectsProvider() {
11
+ return this.objectsProvider;
12
+ }
13
+ addObjectsProvider(provider) {
14
+ if (this.objectsProvider) {
15
+ throw new Error(
16
+ "Multiple Kubernetes objects provider is not supported at this time"
17
+ );
18
+ }
19
+ this.objectsProvider = provider;
20
+ }
21
+ }
22
+ class ClusterSuplier {
23
+ clusterSupplier;
24
+ getClusterSupplier() {
25
+ return this.clusterSupplier;
26
+ }
27
+ addClusterSupplier(clusterSupplier) {
28
+ if (this.clusterSupplier) {
29
+ throw new Error(
30
+ "Multiple Kubernetes Cluster Suppliers is not supported at this time"
31
+ );
32
+ }
33
+ this.clusterSupplier = clusterSupplier;
34
+ }
35
+ }
36
+ class Fetcher {
37
+ fetcher;
38
+ getFetcher() {
39
+ return this.fetcher;
40
+ }
41
+ addFetcher(fetcher) {
42
+ if (this.fetcher) {
43
+ throw new Error(
44
+ "Multiple Kubernetes Fetchers is not supported at this time"
45
+ );
46
+ }
47
+ this.fetcher = fetcher;
48
+ }
49
+ }
50
+ class ServiceLocator {
51
+ serviceLocator;
52
+ getServiceLocator() {
53
+ return this.serviceLocator;
54
+ }
55
+ addServiceLocator(serviceLocator) {
56
+ if (this.serviceLocator) {
57
+ throw new Error(
58
+ "Multiple Kubernetes Service Locators is not supported at this time"
59
+ );
60
+ }
61
+ this.serviceLocator = serviceLocator;
62
+ }
63
+ }
64
+ class AuthStrategy {
65
+ authStrategies;
66
+ constructor() {
67
+ this.authStrategies = new Array();
68
+ }
69
+ static addAuthStrategiesFromArray(authStrategies, builder) {
70
+ authStrategies.forEach((st) => builder.addAuthStrategy(st.key, st.strategy));
71
+ }
72
+ getAuthenticationStrategies() {
73
+ return this.authStrategies;
74
+ }
75
+ addAuthStrategy(key, authStrategy) {
76
+ this.authStrategies.push({ key, strategy: authStrategy });
77
+ }
78
+ }
79
+ const kubernetesPlugin = backendPluginApi.createBackendPlugin({
80
+ pluginId: "kubernetes",
81
+ register(env) {
82
+ const extPointObjectsProvider = new ObjectsProvider();
83
+ const extPointClusterSuplier = new ClusterSuplier();
84
+ const extPointAuthStrategy = new AuthStrategy();
85
+ const extPointFetcher = new Fetcher();
86
+ const extPointServiceLocator = new ServiceLocator();
87
+ env.registerExtensionPoint(
88
+ pluginKubernetesNode.kubernetesObjectsProviderExtensionPoint,
89
+ extPointObjectsProvider
90
+ );
91
+ env.registerExtensionPoint(
92
+ pluginKubernetesNode.kubernetesClusterSupplierExtensionPoint,
93
+ extPointClusterSuplier
94
+ );
95
+ env.registerExtensionPoint(
96
+ pluginKubernetesNode.kubernetesAuthStrategyExtensionPoint,
97
+ extPointAuthStrategy
98
+ );
99
+ env.registerExtensionPoint(
100
+ pluginKubernetesNode.kubernetesFetcherExtensionPoint,
101
+ extPointFetcher
102
+ );
103
+ env.registerExtensionPoint(
104
+ pluginKubernetesNode.kubernetesServiceLocatorExtensionPoint,
105
+ extPointServiceLocator
106
+ );
107
+ env.registerInit({
108
+ deps: {
109
+ http: backendPluginApi.coreServices.httpRouter,
110
+ logger: backendPluginApi.coreServices.logger,
111
+ config: backendPluginApi.coreServices.rootConfig,
112
+ discovery: backendPluginApi.coreServices.discovery,
113
+ catalogApi: alpha.catalogServiceRef,
114
+ permissions: backendPluginApi.coreServices.permissions,
115
+ auth: backendPluginApi.coreServices.auth,
116
+ httpAuth: backendPluginApi.coreServices.httpAuth
117
+ },
118
+ async init({
119
+ http,
120
+ logger,
121
+ config,
122
+ discovery,
123
+ catalogApi,
124
+ permissions,
125
+ auth,
126
+ httpAuth
127
+ }) {
128
+ if (config.has("kubernetes")) {
129
+ const builder = pluginKubernetesBackend.KubernetesBuilder.createBuilder({
130
+ logger,
131
+ config,
132
+ catalogApi,
133
+ permissions,
134
+ discovery,
135
+ auth,
136
+ httpAuth
137
+ }).setObjectsProvider(extPointObjectsProvider.getObjectsProvider()).setClusterSupplier(extPointClusterSuplier.getClusterSupplier()).setFetcher(extPointFetcher.getFetcher()).setServiceLocator(extPointServiceLocator.getServiceLocator());
138
+ AuthStrategy.addAuthStrategiesFromArray(
139
+ extPointAuthStrategy.getAuthenticationStrategies(),
140
+ builder
141
+ );
142
+ const { router } = await builder.build();
143
+ http.use(router);
144
+ } else {
145
+ logger.warn(
146
+ "Failed to initialize kubernetes backend: valid kubernetes config is missing"
147
+ );
148
+ }
149
+ }
150
+ });
151
+ }
152
+ });
153
+
154
+ exports.kubernetesPlugin = kubernetesPlugin;
155
+ //# sourceMappingURL=plugin.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.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 if (config.has('kubernetes')) {\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 } else {\n logger.warn(\n 'Failed to initialize kubernetes backend: valid kubernetes config is missing',\n );\n }\n },\n });\n },\n});\n"],"names":["createBackendPlugin","kubernetesObjectsProviderExtensionPoint","kubernetesClusterSupplierExtensionPoint","kubernetesAuthStrategyExtensionPoint","kubernetesFetcherExtensionPoint","kubernetesServiceLocatorExtensionPoint","coreServices","catalogServiceRef","KubernetesBuilder"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ var catalogModel = require('@backstage/catalog-model');
4
+ var errors = require('@backstage/errors');
5
+
6
+ const addResourceRoutesToRouter = (router, catalogApi, objectsProvider, auth, httpAuth) => {
7
+ const getEntityByReq = async (req) => {
8
+ const rawEntityRef = req.body.entityRef;
9
+ if (rawEntityRef && typeof rawEntityRef !== "string") {
10
+ throw new errors.InputError(`entity query must be a string`);
11
+ } else if (!rawEntityRef) {
12
+ throw new errors.InputError("entity is a required field");
13
+ }
14
+ let entityRef = void 0;
15
+ try {
16
+ entityRef = catalogModel.parseEntityRef(rawEntityRef);
17
+ } catch (error) {
18
+ throw new errors.InputError(`Invalid entity ref, ${error}`);
19
+ }
20
+ const { token } = await auth.getPluginRequestToken({
21
+ onBehalfOf: await httpAuth.credentials(req),
22
+ targetPluginId: "catalog"
23
+ });
24
+ const entity = await catalogApi.getEntityByRef(entityRef, { token });
25
+ if (!entity) {
26
+ throw new errors.InputError(
27
+ `Entity ref missing, ${catalogModel.stringifyEntityRef(entityRef)}`
28
+ );
29
+ }
30
+ return entity;
31
+ };
32
+ router.post("/resources/workloads/query", async (req, res) => {
33
+ const entity = await getEntityByReq(req);
34
+ const response = await objectsProvider.getKubernetesObjectsByEntity(
35
+ {
36
+ entity,
37
+ auth: req.body.auth
38
+ },
39
+ { credentials: await httpAuth.credentials(req) }
40
+ );
41
+ res.json(response);
42
+ });
43
+ router.post("/resources/custom/query", async (req, res) => {
44
+ const entity = await getEntityByReq(req);
45
+ if (!req.body.customResources) {
46
+ throw new errors.InputError("customResources is a required field");
47
+ } else if (!Array.isArray(req.body.customResources)) {
48
+ throw new errors.InputError("customResources must be an array");
49
+ } else if (req.body.customResources.length === 0) {
50
+ throw new errors.InputError("at least 1 customResource is required");
51
+ }
52
+ const response = await objectsProvider.getCustomResourcesByEntity(
53
+ {
54
+ entity,
55
+ customResources: req.body.customResources,
56
+ auth: req.body.auth
57
+ },
58
+ { credentials: await httpAuth.credentials(req) }
59
+ );
60
+ res.json(response);
61
+ });
62
+ };
63
+
64
+ exports.addResourceRoutesToRouter = addResourceRoutesToRouter;
65
+ //# sourceMappingURL=resourcesRoutes.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourcesRoutes.cjs.js","sources":["../../src/routes/resourcesRoutes.ts"],"sourcesContent":["/*\n * Copyright 2022 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 */\nimport {\n CompoundEntityRef,\n parseEntityRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { CatalogApi } from '@backstage/catalog-client';\nimport { InputError } from '@backstage/errors';\nimport express, { Request } from 'express';\nimport { KubernetesObjectsProvider } from '@backstage/plugin-kubernetes-node';\nimport { AuthService, HttpAuthService } from '@backstage/backend-plugin-api';\n\nexport const addResourceRoutesToRouter = (\n router: express.Router,\n catalogApi: CatalogApi,\n objectsProvider: KubernetesObjectsProvider,\n auth: AuthService,\n httpAuth: HttpAuthService,\n) => {\n const getEntityByReq = async (req: Request<any>) => {\n const rawEntityRef = req.body.entityRef;\n if (rawEntityRef && typeof rawEntityRef !== 'string') {\n throw new InputError(`entity query must be a string`);\n } else if (!rawEntityRef) {\n throw new InputError('entity is a required field');\n }\n let entityRef: CompoundEntityRef | undefined = undefined;\n\n try {\n entityRef = parseEntityRef(rawEntityRef);\n } catch (error) {\n throw new InputError(`Invalid entity ref, ${error}`);\n }\n\n const { token } = await auth.getPluginRequestToken({\n onBehalfOf: await httpAuth.credentials(req),\n targetPluginId: 'catalog',\n });\n\n const entity = await catalogApi.getEntityByRef(entityRef, { token });\n if (!entity) {\n throw new InputError(\n `Entity ref missing, ${stringifyEntityRef(entityRef)}`,\n );\n }\n\n return entity;\n };\n\n router.post('/resources/workloads/query', async (req, res) => {\n const entity = await getEntityByReq(req);\n const response = await objectsProvider.getKubernetesObjectsByEntity(\n {\n entity,\n auth: req.body.auth,\n },\n { credentials: await httpAuth.credentials(req) },\n );\n res.json(response);\n });\n\n router.post('/resources/custom/query', async (req, res) => {\n const entity = await getEntityByReq(req);\n\n if (!req.body.customResources) {\n throw new InputError('customResources is a required field');\n } else if (!Array.isArray(req.body.customResources)) {\n throw new InputError('customResources must be an array');\n } else if (req.body.customResources.length === 0) {\n throw new InputError('at least 1 customResource is required');\n }\n\n const response = await objectsProvider.getCustomResourcesByEntity(\n {\n entity,\n customResources: req.body.customResources,\n auth: req.body.auth,\n },\n { credentials: await httpAuth.credentials(req) },\n );\n res.json(response);\n });\n};\n"],"names":["InputError","parseEntityRef","stringifyEntityRef"],"mappings":"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"}
@@ -0,0 +1,367 @@
1
+ 'use strict';
2
+
3
+ var pluginKubernetesCommon = require('@backstage/plugin-kubernetes-common');
4
+ var pluginPermissionNode = require('@backstage/plugin-permission-node');
5
+ var express = require('express');
6
+ var Router = require('express-promise-router');
7
+ var luxon = require('luxon');
8
+ var AksStrategy = require('../auth/AksStrategy.cjs.js');
9
+ var AnonymousStrategy = require('../auth/AnonymousStrategy.cjs.js');
10
+ var AwsIamStrategy = require('../auth/AwsIamStrategy.cjs.js');
11
+ var AzureIdentityStrategy = require('../auth/AzureIdentityStrategy.cjs.js');
12
+ var GoogleStrategy = require('../auth/GoogleStrategy.cjs.js');
13
+ var GoogleServiceAccountStrategy = require('../auth/GoogleServiceAccountStrategy.cjs.js');
14
+ var DispatchStrategy = require('../auth/DispatchStrategy.cjs.js');
15
+ var ServiceAccountStrategy = require('../auth/ServiceAccountStrategy.cjs.js');
16
+ var OidcStrategy = require('../auth/OidcStrategy.cjs.js');
17
+ var index = require('../cluster-locator/index.cjs.js');
18
+ var backendCommon = require('@backstage/backend-common');
19
+ var resourcesRoutes = require('../routes/resourcesRoutes.cjs.js');
20
+ var CatalogRelationServiceLocator = require('../service-locator/CatalogRelationServiceLocator.cjs.js');
21
+ var MultiTenantServiceLocator = require('../service-locator/MultiTenantServiceLocator.cjs.js');
22
+ var SingleTenantServiceLocator = require('../service-locator/SingleTenantServiceLocator.cjs.js');
23
+ var KubernetesFanOutHandler = require('./KubernetesFanOutHandler.cjs.js');
24
+ var KubernetesFetcher = require('./KubernetesFetcher.cjs.js');
25
+ var KubernetesProxy = require('./KubernetesProxy.cjs.js');
26
+
27
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
28
+
29
+ var express__default = /*#__PURE__*/_interopDefaultCompat(express);
30
+ var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
31
+
32
+ class KubernetesBuilder {
33
+ constructor(env) {
34
+ this.env = env;
35
+ }
36
+ clusterSupplier;
37
+ defaultClusterRefreshInterval = luxon.Duration.fromObject({
38
+ minutes: 60
39
+ });
40
+ objectsProvider;
41
+ fetcher;
42
+ serviceLocator;
43
+ proxy;
44
+ authStrategyMap;
45
+ static createBuilder(env) {
46
+ return new KubernetesBuilder(env);
47
+ }
48
+ async build() {
49
+ const logger = this.env.logger;
50
+ const config = this.env.config;
51
+ const permissions = this.env.permissions;
52
+ logger.info("Initializing Kubernetes backend");
53
+ if (!config.has("kubernetes")) {
54
+ if (process.env.NODE_ENV !== "development") {
55
+ throw new Error("Kubernetes configuration is missing");
56
+ }
57
+ logger.warn(
58
+ "Failed to initialize kubernetes backend: kubernetes config is missing"
59
+ );
60
+ return {
61
+ router: Router__default.default()
62
+ };
63
+ }
64
+ const { auth, httpAuth } = backendCommon.createLegacyAuthAdapters({
65
+ auth: this.env.auth,
66
+ httpAuth: this.env.httpAuth,
67
+ discovery: this.env.discovery
68
+ });
69
+ const customResources = this.buildCustomResources();
70
+ const fetcher = this.getFetcher();
71
+ const clusterSupplier = this.getClusterSupplier();
72
+ const authStrategyMap = this.getAuthStrategyMap();
73
+ const proxy = this.getProxy(
74
+ logger,
75
+ clusterSupplier,
76
+ this.env.discovery,
77
+ httpAuth
78
+ );
79
+ const serviceLocator = this.getServiceLocator();
80
+ const objectsProvider = this.getObjectsProvider({
81
+ logger,
82
+ fetcher,
83
+ config,
84
+ serviceLocator,
85
+ customResources,
86
+ objectTypesToFetch: this.getObjectTypesToFetch()
87
+ });
88
+ const router = this.buildRouter(
89
+ objectsProvider,
90
+ clusterSupplier,
91
+ this.env.catalogApi,
92
+ proxy,
93
+ permissions,
94
+ auth,
95
+ httpAuth
96
+ );
97
+ return {
98
+ clusterSupplier,
99
+ customResources,
100
+ fetcher,
101
+ proxy,
102
+ objectsProvider,
103
+ router,
104
+ serviceLocator,
105
+ authStrategyMap
106
+ };
107
+ }
108
+ setClusterSupplier(clusterSupplier) {
109
+ this.clusterSupplier = clusterSupplier;
110
+ return this;
111
+ }
112
+ setDefaultClusterRefreshInterval(refreshInterval) {
113
+ this.defaultClusterRefreshInterval = refreshInterval;
114
+ return this;
115
+ }
116
+ setObjectsProvider(objectsProvider) {
117
+ this.objectsProvider = objectsProvider;
118
+ return this;
119
+ }
120
+ setFetcher(fetcher) {
121
+ this.fetcher = fetcher;
122
+ return this;
123
+ }
124
+ setServiceLocator(serviceLocator) {
125
+ this.serviceLocator = serviceLocator;
126
+ return this;
127
+ }
128
+ setProxy(proxy) {
129
+ this.proxy = proxy;
130
+ return this;
131
+ }
132
+ setAuthStrategyMap(authStrategyMap) {
133
+ this.authStrategyMap = authStrategyMap;
134
+ }
135
+ addAuthStrategy(key, strategy) {
136
+ if (key.includes("-")) {
137
+ throw new Error("Strategy name can not include dashes");
138
+ }
139
+ this.getAuthStrategyMap()[key] = strategy;
140
+ return this;
141
+ }
142
+ buildCustomResources() {
143
+ const customResources = (this.env.config.getOptionalConfigArray("kubernetes.customResources") ?? []).map(
144
+ (c) => ({
145
+ group: c.getString("group"),
146
+ apiVersion: c.getString("apiVersion"),
147
+ plural: c.getString("plural"),
148
+ objectType: "customresources"
149
+ })
150
+ );
151
+ this.env.logger.info(
152
+ `action=LoadingCustomResources numOfCustomResources=${customResources.length}`
153
+ );
154
+ return customResources;
155
+ }
156
+ buildClusterSupplier(refreshInterval) {
157
+ const config = this.env.config;
158
+ const { auth } = backendCommon.createLegacyAuthAdapters(this.env);
159
+ this.clusterSupplier = index.getCombinedClusterSupplier(
160
+ config,
161
+ this.env.catalogApi,
162
+ new DispatchStrategy.DispatchStrategy({ authStrategyMap: this.getAuthStrategyMap() }),
163
+ this.env.logger,
164
+ refreshInterval,
165
+ auth
166
+ );
167
+ return this.clusterSupplier;
168
+ }
169
+ buildObjectsProvider(options) {
170
+ const authStrategyMap = this.getAuthStrategyMap();
171
+ this.objectsProvider = new KubernetesFanOutHandler.KubernetesFanOutHandler({
172
+ ...options,
173
+ authStrategy: new DispatchStrategy.DispatchStrategy({
174
+ authStrategyMap
175
+ })
176
+ });
177
+ return this.objectsProvider;
178
+ }
179
+ buildFetcher() {
180
+ this.fetcher = new KubernetesFetcher.KubernetesClientBasedFetcher({
181
+ logger: this.env.logger
182
+ });
183
+ return this.fetcher;
184
+ }
185
+ buildServiceLocator(method, clusterSupplier) {
186
+ switch (method) {
187
+ case "multiTenant":
188
+ this.serviceLocator = this.buildMultiTenantServiceLocator(clusterSupplier);
189
+ break;
190
+ case "singleTenant":
191
+ this.serviceLocator = this.buildSingleTenantServiceLocator(clusterSupplier);
192
+ break;
193
+ case "catalogRelation":
194
+ this.serviceLocator = this.buildCatalogRelationServiceLocator(clusterSupplier);
195
+ break;
196
+ case "http":
197
+ this.serviceLocator = this.buildHttpServiceLocator(clusterSupplier);
198
+ break;
199
+ default:
200
+ throw new Error(
201
+ `Unsupported kubernetes.serviceLocatorMethod "${method}"`
202
+ );
203
+ }
204
+ return this.serviceLocator;
205
+ }
206
+ buildMultiTenantServiceLocator(clusterSupplier) {
207
+ return new MultiTenantServiceLocator.MultiTenantServiceLocator(clusterSupplier);
208
+ }
209
+ buildSingleTenantServiceLocator(clusterSupplier) {
210
+ return new SingleTenantServiceLocator.SingleTenantServiceLocator(clusterSupplier);
211
+ }
212
+ buildCatalogRelationServiceLocator(clusterSupplier) {
213
+ return new CatalogRelationServiceLocator.CatalogRelationServiceLocator(clusterSupplier);
214
+ }
215
+ buildHttpServiceLocator(_clusterSupplier) {
216
+ throw new Error("not implemented");
217
+ }
218
+ buildProxy(logger, clusterSupplier, discovery, httpAuth) {
219
+ const authStrategyMap = this.getAuthStrategyMap();
220
+ const authStrategy = new DispatchStrategy.DispatchStrategy({
221
+ authStrategyMap
222
+ });
223
+ this.proxy = new KubernetesProxy.KubernetesProxy({
224
+ logger,
225
+ clusterSupplier,
226
+ authStrategy,
227
+ discovery,
228
+ httpAuth
229
+ });
230
+ return this.proxy;
231
+ }
232
+ buildRouter(objectsProvider, clusterSupplier, catalogApi, proxy, permissionApi, authService, httpAuth) {
233
+ const logger = this.env.logger;
234
+ const router = Router__default.default();
235
+ router.use("/proxy", proxy.createRequestHandler({ permissionApi }));
236
+ router.use(express__default.default.json());
237
+ router.use(
238
+ pluginPermissionNode.createPermissionIntegrationRouter({
239
+ permissions: pluginKubernetesCommon.kubernetesPermissions
240
+ })
241
+ );
242
+ router.post("/services/:serviceId", async (req, res) => {
243
+ const serviceId = req.params.serviceId;
244
+ const requestBody = req.body;
245
+ try {
246
+ const response = await objectsProvider.getKubernetesObjectsByEntity(
247
+ {
248
+ entity: requestBody.entity,
249
+ auth: requestBody.auth || {}
250
+ },
251
+ { credentials: await httpAuth.credentials(req) }
252
+ );
253
+ res.json(response);
254
+ } catch (e) {
255
+ logger.error(
256
+ `action=retrieveObjectsByServiceId service=${serviceId}, error=${e}`
257
+ );
258
+ res.status(500).json({ error: e.message });
259
+ }
260
+ });
261
+ router.get("/clusters", async (req, res) => {
262
+ const credentials = await httpAuth.credentials(req);
263
+ const clusterDetails = await this.fetchClusterDetails(clusterSupplier, {
264
+ credentials
265
+ });
266
+ res.json({
267
+ items: clusterDetails.map((cd) => {
268
+ const oidcTokenProvider = cd.authMetadata[pluginKubernetesCommon.ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER];
269
+ const authProvider = cd.authMetadata[pluginKubernetesCommon.ANNOTATION_KUBERNETES_AUTH_PROVIDER];
270
+ const strategy = this.getAuthStrategyMap()[authProvider];
271
+ let auth = {};
272
+ if (strategy) {
273
+ auth = strategy.presentAuthMetadata(cd.authMetadata);
274
+ }
275
+ return {
276
+ name: cd.name,
277
+ title: cd.title,
278
+ dashboardUrl: cd.dashboardUrl,
279
+ authProvider,
280
+ ...oidcTokenProvider && { oidcTokenProvider },
281
+ ...auth && Object.keys(auth).length !== 0 && { auth }
282
+ };
283
+ })
284
+ });
285
+ });
286
+ resourcesRoutes.addResourceRoutesToRouter(
287
+ router,
288
+ catalogApi,
289
+ objectsProvider,
290
+ authService,
291
+ httpAuth
292
+ );
293
+ return router;
294
+ }
295
+ buildAuthStrategyMap() {
296
+ this.authStrategyMap = {
297
+ aks: new AksStrategy.AksStrategy(),
298
+ aws: new AwsIamStrategy.AwsIamStrategy({ config: this.env.config }),
299
+ azure: new AzureIdentityStrategy.AzureIdentityStrategy(this.env.logger),
300
+ google: new GoogleStrategy.GoogleStrategy(),
301
+ googleServiceAccount: new GoogleServiceAccountStrategy.GoogleServiceAccountStrategy(),
302
+ localKubectlProxy: new AnonymousStrategy.AnonymousStrategy(),
303
+ oidc: new OidcStrategy.OidcStrategy(),
304
+ serviceAccount: new ServiceAccountStrategy.ServiceAccountStrategy()
305
+ };
306
+ return this.authStrategyMap;
307
+ }
308
+ async fetchClusterDetails(clusterSupplier, options) {
309
+ const clusterDetails = await clusterSupplier.getClusters(options);
310
+ this.env.logger.info(
311
+ `action=loadClusterDetails numOfClustersLoaded=${clusterDetails.length}`
312
+ );
313
+ return clusterDetails;
314
+ }
315
+ getServiceLocatorMethod() {
316
+ return this.env.config.getString(
317
+ "kubernetes.serviceLocatorMethod.type"
318
+ );
319
+ }
320
+ getFetcher() {
321
+ return this.fetcher ?? this.buildFetcher();
322
+ }
323
+ getClusterSupplier() {
324
+ return this.clusterSupplier ?? this.buildClusterSupplier(this.defaultClusterRefreshInterval);
325
+ }
326
+ getServiceLocator() {
327
+ return this.serviceLocator ?? this.buildServiceLocator(
328
+ this.getServiceLocatorMethod(),
329
+ this.getClusterSupplier()
330
+ );
331
+ }
332
+ getObjectsProvider(options) {
333
+ return this.objectsProvider ?? this.buildObjectsProvider(options);
334
+ }
335
+ getObjectTypesToFetch() {
336
+ const objectTypesToFetchStrings = this.env.config.getOptionalStringArray(
337
+ "kubernetes.objectTypes"
338
+ );
339
+ const apiVersionOverrides = this.env.config.getOptionalConfig(
340
+ "kubernetes.apiVersionOverrides"
341
+ );
342
+ let objectTypesToFetch;
343
+ if (objectTypesToFetchStrings) {
344
+ objectTypesToFetch = KubernetesFanOutHandler.DEFAULT_OBJECTS.filter(
345
+ (obj) => objectTypesToFetchStrings.includes(obj.objectType)
346
+ );
347
+ }
348
+ if (apiVersionOverrides) {
349
+ objectTypesToFetch = objectTypesToFetch ?? KubernetesFanOutHandler.DEFAULT_OBJECTS;
350
+ for (const obj of objectTypesToFetch) {
351
+ if (apiVersionOverrides.has(obj.objectType)) {
352
+ obj.apiVersion = apiVersionOverrides.getString(obj.objectType);
353
+ }
354
+ }
355
+ }
356
+ return objectTypesToFetch;
357
+ }
358
+ getProxy(logger, clusterSupplier, discovery, httpAuth) {
359
+ return this.proxy ?? this.buildProxy(logger, clusterSupplier, discovery, httpAuth);
360
+ }
361
+ getAuthStrategyMap() {
362
+ return this.authStrategyMap ?? this.buildAuthStrategyMap();
363
+ }
364
+ }
365
+
366
+ exports.KubernetesBuilder = KubernetesBuilder;
367
+ //# sourceMappingURL=KubernetesBuilder.cjs.js.map