@backstage/plugin-kubernetes-backend 0.19.9-next.0 → 0.20.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 +34 -0
- package/config.d.ts +7 -0
- package/dist/auth/AksStrategy.cjs.js.map +1 -1
- package/dist/auth/AnonymousStrategy.cjs.js.map +1 -1
- package/dist/auth/AwsIamStrategy.cjs.js.map +1 -1
- package/dist/auth/AzureIdentityStrategy.cjs.js.map +1 -1
- package/dist/auth/DispatchStrategy.cjs.js.map +1 -1
- package/dist/auth/GoogleServiceAccountStrategy.cjs.js +22 -2
- package/dist/auth/GoogleServiceAccountStrategy.cjs.js.map +1 -1
- package/dist/auth/GoogleStrategy.cjs.js.map +1 -1
- package/dist/auth/OidcStrategy.cjs.js.map +1 -1
- package/dist/auth/ServiceAccountStrategy.cjs.js.map +1 -1
- package/dist/auth/buildDefaultAuthStrategyMap.cjs.js +27 -0
- package/dist/auth/buildDefaultAuthStrategyMap.cjs.js.map +1 -0
- package/dist/auth/requirePermission.cjs.js.map +1 -1
- package/dist/cluster-locator/CatalogClusterLocator.cjs.js +7 -10
- package/dist/cluster-locator/CatalogClusterLocator.cjs.js.map +1 -1
- package/dist/cluster-locator/ConfigClusterLocator.cjs.js.map +1 -1
- package/dist/cluster-locator/GkeClusterLocator.cjs.js.map +1 -1
- package/dist/cluster-locator/LocalKubectlProxyLocator.cjs.js.map +1 -1
- package/dist/cluster-locator/index.cjs.js +2 -2
- package/dist/cluster-locator/index.cjs.js.map +1 -1
- package/dist/index.cjs.js +0 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +62 -220
- package/dist/package.json.cjs.js +2 -147
- package/dist/package.json.cjs.js.map +1 -1
- package/dist/plugin.cjs.js +60 -32
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/routes/resourcesRoutes.cjs.js +3 -5
- package/dist/routes/resourcesRoutes.cjs.js.map +1 -1
- package/dist/service/KubernetesFanOutHandler.cjs.js.map +1 -1
- package/dist/service/KubernetesFetcher.cjs.js.map +1 -1
- package/dist/service/KubernetesInitializer.cjs.js +143 -0
- package/dist/service/KubernetesInitializer.cjs.js.map +1 -0
- package/dist/service/KubernetesProxy.cjs.js +1 -6
- package/dist/service/KubernetesProxy.cjs.js.map +1 -1
- package/dist/service/KubernetesRouter.cjs.js +167 -0
- package/dist/service/KubernetesRouter.cjs.js.map +1 -0
- package/dist/service/runPeriodically.cjs.js.map +1 -1
- package/dist/service-locator/CatalogRelationServiceLocator.cjs.js.map +1 -1
- package/dist/service-locator/MultiTenantServiceLocator.cjs.js.map +1 -1
- package/dist/service-locator/SingleTenantServiceLocator.cjs.js.map +1 -1
- package/dist/service-locator/buildDefaultServiceLocator.cjs.js +31 -0
- package/dist/service-locator/buildDefaultServiceLocator.cjs.js.map +1 -0
- package/package.json +31 -51
- package/dist/alpha.cjs.js +0 -10
- package/dist/alpha.cjs.js.map +0 -1
- package/dist/alpha.d.ts +0 -6
- package/dist/service/KubernetesBuilder.cjs.js +0 -381
- package/dist/service/KubernetesBuilder.cjs.js.map +0 -1
- package/dist/service/router.cjs.js +0 -11
- package/dist/service/router.cjs.js.map +0 -1
|
@@ -1,381 +0,0 @@
|
|
|
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
|
-
var requirePermission = require('../auth/requirePermission.cjs.js');
|
|
27
|
-
|
|
28
|
-
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
29
|
-
|
|
30
|
-
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
|
|
31
|
-
var Router__default = /*#__PURE__*/_interopDefaultCompat(Router);
|
|
32
|
-
|
|
33
|
-
class KubernetesBuilder {
|
|
34
|
-
constructor(env) {
|
|
35
|
-
this.env = env;
|
|
36
|
-
}
|
|
37
|
-
clusterSupplier;
|
|
38
|
-
defaultClusterRefreshInterval = luxon.Duration.fromObject({
|
|
39
|
-
minutes: 60
|
|
40
|
-
});
|
|
41
|
-
objectsProvider;
|
|
42
|
-
fetcher;
|
|
43
|
-
serviceLocator;
|
|
44
|
-
proxy;
|
|
45
|
-
authStrategyMap;
|
|
46
|
-
static createBuilder(env) {
|
|
47
|
-
return new KubernetesBuilder(env);
|
|
48
|
-
}
|
|
49
|
-
async build() {
|
|
50
|
-
const logger = this.env.logger;
|
|
51
|
-
const config = this.env.config;
|
|
52
|
-
const permissions = this.env.permissions;
|
|
53
|
-
logger.info("Initializing Kubernetes backend");
|
|
54
|
-
if (!config.has("kubernetes")) {
|
|
55
|
-
if (process.env.NODE_ENV !== "development") {
|
|
56
|
-
throw new Error("Kubernetes configuration is missing");
|
|
57
|
-
}
|
|
58
|
-
logger.warn(
|
|
59
|
-
"Failed to initialize kubernetes backend: kubernetes config is missing"
|
|
60
|
-
);
|
|
61
|
-
return {
|
|
62
|
-
router: Router__default.default()
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
const { auth, httpAuth } = backendCommon.createLegacyAuthAdapters({
|
|
66
|
-
auth: this.env.auth,
|
|
67
|
-
httpAuth: this.env.httpAuth,
|
|
68
|
-
discovery: this.env.discovery
|
|
69
|
-
});
|
|
70
|
-
const customResources = this.buildCustomResources();
|
|
71
|
-
const fetcher = this.getFetcher();
|
|
72
|
-
const clusterSupplier = this.getClusterSupplier();
|
|
73
|
-
const authStrategyMap = this.getAuthStrategyMap();
|
|
74
|
-
const proxy = this.getProxy(
|
|
75
|
-
logger,
|
|
76
|
-
clusterSupplier,
|
|
77
|
-
this.env.discovery,
|
|
78
|
-
httpAuth
|
|
79
|
-
);
|
|
80
|
-
const serviceLocator = this.getServiceLocator();
|
|
81
|
-
const objectsProvider = this.getObjectsProvider({
|
|
82
|
-
logger,
|
|
83
|
-
fetcher,
|
|
84
|
-
config,
|
|
85
|
-
serviceLocator,
|
|
86
|
-
customResources,
|
|
87
|
-
objectTypesToFetch: this.getObjectTypesToFetch()
|
|
88
|
-
});
|
|
89
|
-
const router = this.buildRouter(
|
|
90
|
-
objectsProvider,
|
|
91
|
-
clusterSupplier,
|
|
92
|
-
this.env.catalogApi,
|
|
93
|
-
proxy,
|
|
94
|
-
permissions,
|
|
95
|
-
auth,
|
|
96
|
-
httpAuth
|
|
97
|
-
);
|
|
98
|
-
return {
|
|
99
|
-
clusterSupplier,
|
|
100
|
-
customResources,
|
|
101
|
-
fetcher,
|
|
102
|
-
proxy,
|
|
103
|
-
objectsProvider,
|
|
104
|
-
router,
|
|
105
|
-
serviceLocator,
|
|
106
|
-
authStrategyMap
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
setClusterSupplier(clusterSupplier) {
|
|
110
|
-
this.clusterSupplier = clusterSupplier;
|
|
111
|
-
return this;
|
|
112
|
-
}
|
|
113
|
-
setDefaultClusterRefreshInterval(refreshInterval) {
|
|
114
|
-
this.defaultClusterRefreshInterval = refreshInterval;
|
|
115
|
-
return this;
|
|
116
|
-
}
|
|
117
|
-
setObjectsProvider(objectsProvider) {
|
|
118
|
-
this.objectsProvider = objectsProvider;
|
|
119
|
-
return this;
|
|
120
|
-
}
|
|
121
|
-
setFetcher(fetcher) {
|
|
122
|
-
this.fetcher = fetcher;
|
|
123
|
-
return this;
|
|
124
|
-
}
|
|
125
|
-
setServiceLocator(serviceLocator) {
|
|
126
|
-
this.serviceLocator = serviceLocator;
|
|
127
|
-
return this;
|
|
128
|
-
}
|
|
129
|
-
setProxy(proxy) {
|
|
130
|
-
this.proxy = proxy;
|
|
131
|
-
return this;
|
|
132
|
-
}
|
|
133
|
-
setAuthStrategyMap(authStrategyMap) {
|
|
134
|
-
this.authStrategyMap = authStrategyMap;
|
|
135
|
-
}
|
|
136
|
-
addAuthStrategy(key, strategy) {
|
|
137
|
-
if (key.includes("-")) {
|
|
138
|
-
throw new Error("Strategy name can not include dashes");
|
|
139
|
-
}
|
|
140
|
-
this.getAuthStrategyMap()[key] = strategy;
|
|
141
|
-
return this;
|
|
142
|
-
}
|
|
143
|
-
buildCustomResources() {
|
|
144
|
-
const customResources = (this.env.config.getOptionalConfigArray("kubernetes.customResources") ?? []).map(
|
|
145
|
-
(c) => ({
|
|
146
|
-
group: c.getString("group"),
|
|
147
|
-
apiVersion: c.getString("apiVersion"),
|
|
148
|
-
plural: c.getString("plural"),
|
|
149
|
-
objectType: "customresources"
|
|
150
|
-
})
|
|
151
|
-
);
|
|
152
|
-
this.env.logger.info(
|
|
153
|
-
`action=LoadingCustomResources numOfCustomResources=${customResources.length}`
|
|
154
|
-
);
|
|
155
|
-
return customResources;
|
|
156
|
-
}
|
|
157
|
-
buildClusterSupplier(refreshInterval) {
|
|
158
|
-
const config = this.env.config;
|
|
159
|
-
const { auth } = backendCommon.createLegacyAuthAdapters(this.env);
|
|
160
|
-
this.clusterSupplier = index.getCombinedClusterSupplier(
|
|
161
|
-
config,
|
|
162
|
-
this.env.catalogApi,
|
|
163
|
-
new DispatchStrategy.DispatchStrategy({ authStrategyMap: this.getAuthStrategyMap() }),
|
|
164
|
-
this.env.logger,
|
|
165
|
-
refreshInterval,
|
|
166
|
-
auth
|
|
167
|
-
);
|
|
168
|
-
return this.clusterSupplier;
|
|
169
|
-
}
|
|
170
|
-
buildObjectsProvider(options) {
|
|
171
|
-
const authStrategyMap = this.getAuthStrategyMap();
|
|
172
|
-
this.objectsProvider = new KubernetesFanOutHandler.KubernetesFanOutHandler({
|
|
173
|
-
...options,
|
|
174
|
-
authStrategy: new DispatchStrategy.DispatchStrategy({
|
|
175
|
-
authStrategyMap
|
|
176
|
-
})
|
|
177
|
-
});
|
|
178
|
-
return this.objectsProvider;
|
|
179
|
-
}
|
|
180
|
-
buildFetcher() {
|
|
181
|
-
this.fetcher = new KubernetesFetcher.KubernetesClientBasedFetcher({
|
|
182
|
-
logger: this.env.logger
|
|
183
|
-
});
|
|
184
|
-
return this.fetcher;
|
|
185
|
-
}
|
|
186
|
-
buildServiceLocator(method, clusterSupplier) {
|
|
187
|
-
switch (method) {
|
|
188
|
-
case "multiTenant":
|
|
189
|
-
this.serviceLocator = this.buildMultiTenantServiceLocator(clusterSupplier);
|
|
190
|
-
break;
|
|
191
|
-
case "singleTenant":
|
|
192
|
-
this.serviceLocator = this.buildSingleTenantServiceLocator(clusterSupplier);
|
|
193
|
-
break;
|
|
194
|
-
case "catalogRelation":
|
|
195
|
-
this.serviceLocator = this.buildCatalogRelationServiceLocator(clusterSupplier);
|
|
196
|
-
break;
|
|
197
|
-
case "http":
|
|
198
|
-
this.serviceLocator = this.buildHttpServiceLocator(clusterSupplier);
|
|
199
|
-
break;
|
|
200
|
-
default:
|
|
201
|
-
throw new Error(
|
|
202
|
-
`Unsupported kubernetes.serviceLocatorMethod "${method}"`
|
|
203
|
-
);
|
|
204
|
-
}
|
|
205
|
-
return this.serviceLocator;
|
|
206
|
-
}
|
|
207
|
-
buildMultiTenantServiceLocator(clusterSupplier) {
|
|
208
|
-
return new MultiTenantServiceLocator.MultiTenantServiceLocator(clusterSupplier);
|
|
209
|
-
}
|
|
210
|
-
buildSingleTenantServiceLocator(clusterSupplier) {
|
|
211
|
-
return new SingleTenantServiceLocator.SingleTenantServiceLocator(clusterSupplier);
|
|
212
|
-
}
|
|
213
|
-
buildCatalogRelationServiceLocator(clusterSupplier) {
|
|
214
|
-
return new CatalogRelationServiceLocator.CatalogRelationServiceLocator(clusterSupplier);
|
|
215
|
-
}
|
|
216
|
-
buildHttpServiceLocator(_clusterSupplier) {
|
|
217
|
-
throw new Error("not implemented");
|
|
218
|
-
}
|
|
219
|
-
buildProxy(logger, clusterSupplier, discovery, httpAuth) {
|
|
220
|
-
const authStrategyMap = this.getAuthStrategyMap();
|
|
221
|
-
const authStrategy = new DispatchStrategy.DispatchStrategy({
|
|
222
|
-
authStrategyMap
|
|
223
|
-
});
|
|
224
|
-
this.proxy = new KubernetesProxy.KubernetesProxy({
|
|
225
|
-
logger,
|
|
226
|
-
clusterSupplier,
|
|
227
|
-
authStrategy,
|
|
228
|
-
discovery,
|
|
229
|
-
httpAuth
|
|
230
|
-
});
|
|
231
|
-
return this.proxy;
|
|
232
|
-
}
|
|
233
|
-
buildRouter(objectsProvider, clusterSupplier, catalogApi, proxy, permissionApi, authService, httpAuth) {
|
|
234
|
-
const logger = this.env.logger;
|
|
235
|
-
const router = Router__default.default();
|
|
236
|
-
router.use("/proxy", proxy.createRequestHandler({ permissionApi }));
|
|
237
|
-
router.use(express__default.default.json());
|
|
238
|
-
router.use(
|
|
239
|
-
pluginPermissionNode.createPermissionIntegrationRouter({
|
|
240
|
-
permissions: pluginKubernetesCommon.kubernetesPermissions
|
|
241
|
-
})
|
|
242
|
-
);
|
|
243
|
-
router.post("/services/:serviceId", async (req, res) => {
|
|
244
|
-
await requirePermission.requirePermission(
|
|
245
|
-
permissionApi,
|
|
246
|
-
pluginKubernetesCommon.kubernetesResourcesReadPermission,
|
|
247
|
-
httpAuth,
|
|
248
|
-
req
|
|
249
|
-
);
|
|
250
|
-
const serviceId = req.params.serviceId;
|
|
251
|
-
const requestBody = req.body;
|
|
252
|
-
try {
|
|
253
|
-
const response = await objectsProvider.getKubernetesObjectsByEntity(
|
|
254
|
-
{
|
|
255
|
-
entity: requestBody.entity,
|
|
256
|
-
auth: requestBody.auth || {}
|
|
257
|
-
},
|
|
258
|
-
{ credentials: await httpAuth.credentials(req) }
|
|
259
|
-
);
|
|
260
|
-
res.json(response);
|
|
261
|
-
} catch (e) {
|
|
262
|
-
logger.error(
|
|
263
|
-
`action=retrieveObjectsByServiceId service=${serviceId}, error=${e}`
|
|
264
|
-
);
|
|
265
|
-
res.status(500).json({ error: e.message });
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
router.get("/clusters", async (req, res) => {
|
|
269
|
-
await requirePermission.requirePermission(
|
|
270
|
-
permissionApi,
|
|
271
|
-
pluginKubernetesCommon.kubernetesClustersReadPermission,
|
|
272
|
-
httpAuth,
|
|
273
|
-
req
|
|
274
|
-
);
|
|
275
|
-
const credentials = await httpAuth.credentials(req);
|
|
276
|
-
const clusterDetails = await this.fetchClusterDetails(clusterSupplier, {
|
|
277
|
-
credentials
|
|
278
|
-
});
|
|
279
|
-
res.json({
|
|
280
|
-
items: clusterDetails.map((cd) => {
|
|
281
|
-
const oidcTokenProvider = cd.authMetadata[pluginKubernetesCommon.ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER];
|
|
282
|
-
const authProvider = cd.authMetadata[pluginKubernetesCommon.ANNOTATION_KUBERNETES_AUTH_PROVIDER];
|
|
283
|
-
const strategy = this.getAuthStrategyMap()[authProvider];
|
|
284
|
-
let auth = {};
|
|
285
|
-
if (strategy) {
|
|
286
|
-
auth = strategy.presentAuthMetadata(cd.authMetadata);
|
|
287
|
-
}
|
|
288
|
-
return {
|
|
289
|
-
name: cd.name,
|
|
290
|
-
title: cd.title,
|
|
291
|
-
dashboardUrl: cd.dashboardUrl,
|
|
292
|
-
authProvider,
|
|
293
|
-
...oidcTokenProvider && { oidcTokenProvider },
|
|
294
|
-
...auth && Object.keys(auth).length !== 0 && { auth }
|
|
295
|
-
};
|
|
296
|
-
})
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
resourcesRoutes.addResourceRoutesToRouter(
|
|
300
|
-
router,
|
|
301
|
-
catalogApi,
|
|
302
|
-
objectsProvider,
|
|
303
|
-
authService,
|
|
304
|
-
httpAuth,
|
|
305
|
-
permissionApi
|
|
306
|
-
);
|
|
307
|
-
return router;
|
|
308
|
-
}
|
|
309
|
-
buildAuthStrategyMap() {
|
|
310
|
-
this.authStrategyMap = {
|
|
311
|
-
aks: new AksStrategy.AksStrategy(),
|
|
312
|
-
aws: new AwsIamStrategy.AwsIamStrategy({ config: this.env.config }),
|
|
313
|
-
azure: new AzureIdentityStrategy.AzureIdentityStrategy(this.env.logger),
|
|
314
|
-
google: new GoogleStrategy.GoogleStrategy(),
|
|
315
|
-
googleServiceAccount: new GoogleServiceAccountStrategy.GoogleServiceAccountStrategy(),
|
|
316
|
-
localKubectlProxy: new AnonymousStrategy.AnonymousStrategy(),
|
|
317
|
-
oidc: new OidcStrategy.OidcStrategy(),
|
|
318
|
-
serviceAccount: new ServiceAccountStrategy.ServiceAccountStrategy()
|
|
319
|
-
};
|
|
320
|
-
return this.authStrategyMap;
|
|
321
|
-
}
|
|
322
|
-
async fetchClusterDetails(clusterSupplier, options) {
|
|
323
|
-
const clusterDetails = await clusterSupplier.getClusters(options);
|
|
324
|
-
this.env.logger.debug(
|
|
325
|
-
`action=loadClusterDetails numOfClustersLoaded=${clusterDetails.length}`
|
|
326
|
-
);
|
|
327
|
-
return clusterDetails;
|
|
328
|
-
}
|
|
329
|
-
getServiceLocatorMethod() {
|
|
330
|
-
return this.env.config.getString(
|
|
331
|
-
"kubernetes.serviceLocatorMethod.type"
|
|
332
|
-
);
|
|
333
|
-
}
|
|
334
|
-
getFetcher() {
|
|
335
|
-
return this.fetcher ?? this.buildFetcher();
|
|
336
|
-
}
|
|
337
|
-
getClusterSupplier() {
|
|
338
|
-
return this.clusterSupplier ?? this.buildClusterSupplier(this.defaultClusterRefreshInterval);
|
|
339
|
-
}
|
|
340
|
-
getServiceLocator() {
|
|
341
|
-
return this.serviceLocator ?? this.buildServiceLocator(
|
|
342
|
-
this.getServiceLocatorMethod(),
|
|
343
|
-
this.getClusterSupplier()
|
|
344
|
-
);
|
|
345
|
-
}
|
|
346
|
-
getObjectsProvider(options) {
|
|
347
|
-
return this.objectsProvider ?? this.buildObjectsProvider(options);
|
|
348
|
-
}
|
|
349
|
-
getObjectTypesToFetch() {
|
|
350
|
-
const objectTypesToFetchStrings = this.env.config.getOptionalStringArray(
|
|
351
|
-
"kubernetes.objectTypes"
|
|
352
|
-
);
|
|
353
|
-
const apiVersionOverrides = this.env.config.getOptionalConfig(
|
|
354
|
-
"kubernetes.apiVersionOverrides"
|
|
355
|
-
);
|
|
356
|
-
let objectTypesToFetch;
|
|
357
|
-
if (objectTypesToFetchStrings) {
|
|
358
|
-
objectTypesToFetch = KubernetesFanOutHandler.ALL_OBJECTS.filter(
|
|
359
|
-
(obj) => objectTypesToFetchStrings.includes(obj.objectType)
|
|
360
|
-
);
|
|
361
|
-
}
|
|
362
|
-
if (apiVersionOverrides) {
|
|
363
|
-
objectTypesToFetch = objectTypesToFetch ?? KubernetesFanOutHandler.DEFAULT_OBJECTS;
|
|
364
|
-
for (const obj of objectTypesToFetch) {
|
|
365
|
-
if (apiVersionOverrides.has(obj.objectType)) {
|
|
366
|
-
obj.apiVersion = apiVersionOverrides.getString(obj.objectType);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
return objectTypesToFetch;
|
|
371
|
-
}
|
|
372
|
-
getProxy(logger, clusterSupplier, discovery, httpAuth) {
|
|
373
|
-
return this.proxy ?? this.buildProxy(logger, clusterSupplier, discovery, httpAuth);
|
|
374
|
-
}
|
|
375
|
-
getAuthStrategyMap() {
|
|
376
|
-
return this.authStrategyMap ?? this.buildAuthStrategyMap();
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
exports.KubernetesBuilder = KubernetesBuilder;
|
|
381
|
-
//# sourceMappingURL=KubernetesBuilder.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"KubernetesBuilder.cjs.js","sources":["../../src/service/KubernetesBuilder.ts"],"sourcesContent":["/*\n * Copyright 2020 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 { CatalogApi } from '@backstage/catalog-client';\nimport { Config } from '@backstage/config';\nimport {\n ANNOTATION_KUBERNETES_AUTH_PROVIDER,\n ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER,\n kubernetesClustersReadPermission,\n kubernetesPermissions,\n kubernetesResourcesReadPermission,\n} from '@backstage/plugin-kubernetes-common';\nimport { PermissionEvaluator } from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { Duration } from 'luxon';\n\nimport {\n AksStrategy,\n AnonymousStrategy,\n AwsIamStrategy,\n AzureIdentityStrategy,\n DispatchStrategy,\n GoogleServiceAccountStrategy,\n GoogleStrategy,\n OidcStrategy,\n ServiceAccountStrategy,\n} from '../auth';\nimport { getCombinedClusterSupplier } from '../cluster-locator';\n\nimport { createLegacyAuthAdapters } from '@backstage/backend-common';\nimport {\n AuthService,\n BackstageCredentials,\n DiscoveryService,\n HttpAuthService,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport {\n AuthenticationStrategy,\n AuthMetadata,\n CustomResource,\n KubernetesClustersSupplier,\n KubernetesFetcher,\n KubernetesObjectsProvider,\n KubernetesObjectTypes,\n KubernetesServiceLocator,\n} from '@backstage/plugin-kubernetes-node';\nimport { addResourceRoutesToRouter } from '../routes/resourcesRoutes';\nimport { CatalogRelationServiceLocator } from '../service-locator/CatalogRelationServiceLocator';\nimport { MultiTenantServiceLocator } from '../service-locator/MultiTenantServiceLocator';\nimport { SingleTenantServiceLocator } from '../service-locator/SingleTenantServiceLocator';\nimport {\n KubernetesObjectsProviderOptions,\n ObjectsByEntityRequest,\n ServiceLocatorMethod,\n} from '../types/types';\nimport {\n ALL_OBJECTS,\n DEFAULT_OBJECTS,\n KubernetesFanOutHandler,\n} from './KubernetesFanOutHandler';\nimport { KubernetesClientBasedFetcher } from './KubernetesFetcher';\nimport { KubernetesProxy } from './KubernetesProxy';\nimport { requirePermission } from '../auth/requirePermission';\n\n/**\n * @deprecated Please migrate to the new backend system as this will be removed in the future.\n * @public\n */\nexport interface KubernetesEnvironment {\n logger: LoggerService;\n config: Config;\n catalogApi: CatalogApi;\n discovery: DiscoveryService;\n permissions: PermissionEvaluator;\n auth?: AuthService;\n httpAuth?: HttpAuthService;\n}\n\n/**\n * The return type of the `KubernetesBuilder.build` method\n * @deprecated Please migrate to the new backend system as this will be removed in the future.\n * @public\n */\nexport type KubernetesBuilderReturn = Promise<{\n router: express.Router;\n clusterSupplier: KubernetesClustersSupplier;\n customResources: CustomResource[];\n fetcher: KubernetesFetcher;\n proxy: KubernetesProxy;\n objectsProvider: KubernetesObjectsProvider;\n serviceLocator: KubernetesServiceLocator;\n authStrategyMap: { [key: string]: AuthenticationStrategy };\n}>;\n\n/**\n * @deprecated Please migrate to the new backend system as this will be removed in the future.\n * @public\n * */\nexport class KubernetesBuilder {\n private clusterSupplier?: KubernetesClustersSupplier;\n private defaultClusterRefreshInterval: Duration = Duration.fromObject({\n minutes: 60,\n });\n private objectsProvider?: KubernetesObjectsProvider;\n private fetcher?: KubernetesFetcher;\n private serviceLocator?: KubernetesServiceLocator;\n private proxy?: KubernetesProxy;\n private authStrategyMap?: { [key: string]: AuthenticationStrategy };\n\n static createBuilder(env: KubernetesEnvironment) {\n return new KubernetesBuilder(env);\n }\n\n constructor(protected readonly env: KubernetesEnvironment) {}\n\n public async build(): KubernetesBuilderReturn {\n const logger = this.env.logger;\n const config = this.env.config;\n const permissions = this.env.permissions;\n\n logger.info('Initializing Kubernetes backend');\n\n if (!config.has('kubernetes')) {\n if (process.env.NODE_ENV !== 'development') {\n throw new Error('Kubernetes configuration is missing');\n }\n logger.warn(\n 'Failed to initialize kubernetes backend: kubernetes config is missing',\n );\n return {\n router: Router(),\n } as unknown as KubernetesBuilderReturn;\n }\n\n const { auth, httpAuth } = createLegacyAuthAdapters({\n auth: this.env.auth,\n httpAuth: this.env.httpAuth,\n discovery: this.env.discovery,\n });\n\n const customResources = this.buildCustomResources();\n\n const fetcher = this.getFetcher();\n\n const clusterSupplier = this.getClusterSupplier();\n\n const authStrategyMap = this.getAuthStrategyMap();\n\n const proxy = this.getProxy(\n logger,\n clusterSupplier,\n this.env.discovery,\n httpAuth,\n );\n\n const serviceLocator = this.getServiceLocator();\n\n const objectsProvider = this.getObjectsProvider({\n logger,\n fetcher,\n config,\n serviceLocator,\n customResources,\n objectTypesToFetch: this.getObjectTypesToFetch(),\n });\n\n const router = this.buildRouter(\n objectsProvider,\n clusterSupplier,\n this.env.catalogApi,\n proxy,\n permissions,\n auth,\n httpAuth,\n );\n\n return {\n clusterSupplier,\n customResources,\n fetcher,\n proxy,\n objectsProvider,\n router,\n serviceLocator,\n authStrategyMap,\n };\n }\n\n public setClusterSupplier(clusterSupplier?: KubernetesClustersSupplier) {\n this.clusterSupplier = clusterSupplier;\n return this;\n }\n\n public setDefaultClusterRefreshInterval(refreshInterval: Duration) {\n this.defaultClusterRefreshInterval = refreshInterval;\n return this;\n }\n\n public setObjectsProvider(objectsProvider?: KubernetesObjectsProvider) {\n this.objectsProvider = objectsProvider;\n return this;\n }\n\n public setFetcher(fetcher?: KubernetesFetcher) {\n this.fetcher = fetcher;\n return this;\n }\n\n public setServiceLocator(serviceLocator?: KubernetesServiceLocator) {\n this.serviceLocator = serviceLocator;\n return this;\n }\n\n public setProxy(proxy?: KubernetesProxy) {\n this.proxy = proxy;\n return this;\n }\n\n public setAuthStrategyMap(authStrategyMap: {\n [key: string]: AuthenticationStrategy;\n }) {\n this.authStrategyMap = authStrategyMap;\n }\n\n public addAuthStrategy(key: string, strategy: AuthenticationStrategy) {\n if (key.includes('-')) {\n throw new Error('Strategy name can not include dashes');\n }\n this.getAuthStrategyMap()[key] = strategy;\n return this;\n }\n\n protected buildCustomResources() {\n const customResources: CustomResource[] = (\n this.env.config.getOptionalConfigArray('kubernetes.customResources') ?? []\n ).map(\n c =>\n ({\n group: c.getString('group'),\n apiVersion: c.getString('apiVersion'),\n plural: c.getString('plural'),\n objectType: 'customresources',\n } as CustomResource),\n );\n\n this.env.logger.info(\n `action=LoadingCustomResources numOfCustomResources=${customResources.length}`,\n );\n return customResources;\n }\n\n protected buildClusterSupplier(\n refreshInterval: Duration,\n ): KubernetesClustersSupplier {\n const config = this.env.config;\n const { auth } = createLegacyAuthAdapters(this.env);\n this.clusterSupplier = getCombinedClusterSupplier(\n config,\n this.env.catalogApi,\n new DispatchStrategy({ authStrategyMap: this.getAuthStrategyMap() }),\n this.env.logger,\n refreshInterval,\n auth,\n );\n\n return this.clusterSupplier;\n }\n\n protected buildObjectsProvider(\n options: KubernetesObjectsProviderOptions,\n ): KubernetesObjectsProvider {\n const authStrategyMap = this.getAuthStrategyMap();\n this.objectsProvider = new KubernetesFanOutHandler({\n ...options,\n authStrategy: new DispatchStrategy({\n authStrategyMap,\n }),\n });\n\n return this.objectsProvider;\n }\n\n protected buildFetcher(): KubernetesFetcher {\n this.fetcher = new KubernetesClientBasedFetcher({\n logger: this.env.logger,\n });\n\n return this.fetcher;\n }\n\n protected buildServiceLocator(\n method: ServiceLocatorMethod,\n clusterSupplier: KubernetesClustersSupplier,\n ): KubernetesServiceLocator {\n switch (method) {\n case 'multiTenant':\n this.serviceLocator =\n this.buildMultiTenantServiceLocator(clusterSupplier);\n break;\n case 'singleTenant':\n this.serviceLocator =\n this.buildSingleTenantServiceLocator(clusterSupplier);\n break;\n case 'catalogRelation':\n this.serviceLocator =\n this.buildCatalogRelationServiceLocator(clusterSupplier);\n break;\n case 'http':\n this.serviceLocator = this.buildHttpServiceLocator(clusterSupplier);\n break;\n default:\n throw new Error(\n `Unsupported kubernetes.serviceLocatorMethod \"${method}\"`,\n );\n }\n\n return this.serviceLocator;\n }\n\n protected buildMultiTenantServiceLocator(\n clusterSupplier: KubernetesClustersSupplier,\n ): KubernetesServiceLocator {\n return new MultiTenantServiceLocator(clusterSupplier);\n }\n\n protected buildSingleTenantServiceLocator(\n clusterSupplier: KubernetesClustersSupplier,\n ): KubernetesServiceLocator {\n return new SingleTenantServiceLocator(clusterSupplier);\n }\n\n protected buildCatalogRelationServiceLocator(\n clusterSupplier: KubernetesClustersSupplier,\n ): KubernetesServiceLocator {\n return new CatalogRelationServiceLocator(clusterSupplier);\n }\n\n protected buildHttpServiceLocator(\n _clusterSupplier: KubernetesClustersSupplier,\n ): KubernetesServiceLocator {\n throw new Error('not implemented');\n }\n\n protected buildProxy(\n logger: LoggerService,\n clusterSupplier: KubernetesClustersSupplier,\n discovery: DiscoveryService,\n httpAuth: HttpAuthService,\n ): KubernetesProxy {\n const authStrategyMap = this.getAuthStrategyMap();\n const authStrategy = new DispatchStrategy({\n authStrategyMap,\n });\n this.proxy = new KubernetesProxy({\n logger,\n clusterSupplier,\n authStrategy,\n discovery,\n httpAuth,\n });\n return this.proxy;\n }\n\n protected buildRouter(\n objectsProvider: KubernetesObjectsProvider,\n clusterSupplier: KubernetesClustersSupplier,\n catalogApi: CatalogApi,\n proxy: KubernetesProxy,\n permissionApi: PermissionEvaluator,\n authService: AuthService,\n httpAuth: HttpAuthService,\n ): express.Router {\n const logger = this.env.logger;\n const router = Router();\n router.use('/proxy', proxy.createRequestHandler({ permissionApi }));\n router.use(express.json());\n router.use(\n createPermissionIntegrationRouter({\n permissions: kubernetesPermissions,\n }),\n );\n // @deprecated\n router.post('/services/:serviceId', async (req, res) => {\n await requirePermission(\n permissionApi,\n kubernetesResourcesReadPermission,\n httpAuth,\n req,\n );\n const serviceId = req.params.serviceId;\n const requestBody: ObjectsByEntityRequest = req.body;\n try {\n const response = await objectsProvider.getKubernetesObjectsByEntity(\n {\n entity: requestBody.entity,\n auth: requestBody.auth || {},\n },\n { credentials: await httpAuth.credentials(req) },\n );\n res.json(response);\n } catch (e) {\n logger.error(\n `action=retrieveObjectsByServiceId service=${serviceId}, error=${e}`,\n );\n res.status(500).json({ error: e.message });\n }\n });\n\n router.get('/clusters', async (req, res) => {\n await requirePermission(\n permissionApi,\n kubernetesClustersReadPermission,\n httpAuth,\n req,\n );\n const credentials = await httpAuth.credentials(req);\n const clusterDetails = await this.fetchClusterDetails(clusterSupplier, {\n credentials,\n });\n res.json({\n items: clusterDetails.map(cd => {\n const oidcTokenProvider =\n cd.authMetadata[ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER];\n const authProvider =\n cd.authMetadata[ANNOTATION_KUBERNETES_AUTH_PROVIDER];\n const strategy = this.getAuthStrategyMap()[authProvider];\n let auth: AuthMetadata = {};\n if (strategy) {\n auth = strategy.presentAuthMetadata(cd.authMetadata);\n }\n\n return {\n name: cd.name,\n title: cd.title,\n dashboardUrl: cd.dashboardUrl,\n authProvider,\n ...(oidcTokenProvider && { oidcTokenProvider }),\n ...(auth && Object.keys(auth).length !== 0 && { auth }),\n };\n }),\n });\n });\n\n addResourceRoutesToRouter(\n router,\n catalogApi,\n objectsProvider,\n authService,\n httpAuth,\n permissionApi,\n );\n\n return router;\n }\n\n protected buildAuthStrategyMap() {\n this.authStrategyMap = {\n aks: new AksStrategy(),\n aws: new AwsIamStrategy({ config: this.env.config }),\n azure: new AzureIdentityStrategy(this.env.logger),\n google: new GoogleStrategy(),\n googleServiceAccount: new GoogleServiceAccountStrategy(),\n localKubectlProxy: new AnonymousStrategy(),\n oidc: new OidcStrategy(),\n serviceAccount: new ServiceAccountStrategy(),\n };\n return this.authStrategyMap;\n }\n\n protected async fetchClusterDetails(\n clusterSupplier: KubernetesClustersSupplier,\n options: { credentials: BackstageCredentials },\n ) {\n const clusterDetails = await clusterSupplier.getClusters(options);\n\n this.env.logger.debug(\n `action=loadClusterDetails numOfClustersLoaded=${clusterDetails.length}`,\n );\n\n return clusterDetails;\n }\n\n protected getServiceLocatorMethod() {\n return this.env.config.getString(\n 'kubernetes.serviceLocatorMethod.type',\n ) as ServiceLocatorMethod;\n }\n\n protected getFetcher(): KubernetesFetcher {\n return this.fetcher ?? this.buildFetcher();\n }\n\n protected getClusterSupplier() {\n return (\n this.clusterSupplier ??\n this.buildClusterSupplier(this.defaultClusterRefreshInterval)\n );\n }\n\n protected getServiceLocator(): KubernetesServiceLocator {\n return (\n this.serviceLocator ??\n this.buildServiceLocator(\n this.getServiceLocatorMethod(),\n this.getClusterSupplier(),\n )\n );\n }\n\n protected getObjectsProvider(options: KubernetesObjectsProviderOptions) {\n return this.objectsProvider ?? this.buildObjectsProvider(options);\n }\n\n protected getObjectTypesToFetch() {\n const objectTypesToFetchStrings = this.env.config.getOptionalStringArray(\n 'kubernetes.objectTypes',\n ) as KubernetesObjectTypes[];\n\n const apiVersionOverrides = this.env.config.getOptionalConfig(\n 'kubernetes.apiVersionOverrides',\n );\n\n let objectTypesToFetch;\n\n if (objectTypesToFetchStrings) {\n objectTypesToFetch = ALL_OBJECTS.filter(obj =>\n objectTypesToFetchStrings.includes(obj.objectType),\n );\n }\n\n if (apiVersionOverrides) {\n objectTypesToFetch = objectTypesToFetch ?? DEFAULT_OBJECTS;\n\n for (const obj of objectTypesToFetch) {\n if (apiVersionOverrides.has(obj.objectType)) {\n obj.apiVersion = apiVersionOverrides.getString(obj.objectType);\n }\n }\n }\n\n return objectTypesToFetch;\n }\n\n protected getProxy(\n logger: LoggerService,\n clusterSupplier: KubernetesClustersSupplier,\n discovery: DiscoveryService,\n httpAuth: HttpAuthService,\n ) {\n return (\n this.proxy ??\n this.buildProxy(logger, clusterSupplier, discovery, httpAuth)\n );\n }\n\n protected getAuthStrategyMap() {\n return this.authStrategyMap ?? this.buildAuthStrategyMap();\n }\n}\n"],"names":["Duration","Router","createLegacyAuthAdapters","getCombinedClusterSupplier","DispatchStrategy","KubernetesFanOutHandler","KubernetesClientBasedFetcher","MultiTenantServiceLocator","SingleTenantServiceLocator","CatalogRelationServiceLocator","KubernetesProxy","express","createPermissionIntegrationRouter","kubernetesPermissions","requirePermission","kubernetesResourcesReadPermission","kubernetesClustersReadPermission","ANNOTATION_KUBERNETES_OIDC_TOKEN_PROVIDER","ANNOTATION_KUBERNETES_AUTH_PROVIDER","addResourceRoutesToRouter","AksStrategy","AwsIamStrategy","AzureIdentityStrategy","GoogleStrategy","GoogleServiceAccountStrategy","AnonymousStrategy","OidcStrategy","ServiceAccountStrategy","ALL_OBJECTS","DEFAULT_OBJECTS"],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var KubernetesBuilder = require('./KubernetesBuilder.cjs.js');
|
|
4
|
-
|
|
5
|
-
async function createRouter(options) {
|
|
6
|
-
const { router } = await KubernetesBuilder.KubernetesBuilder.createBuilder(options).setClusterSupplier(options.clusterSupplier).build();
|
|
7
|
-
return router;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
exports.createRouter = createRouter;
|
|
11
|
-
//# sourceMappingURL=router.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2020 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 { Logger } from 'winston';\nimport { KubernetesClustersSupplier } from '../types/types';\nimport express from 'express';\nimport { KubernetesBuilder } from './KubernetesBuilder';\nimport { CatalogApi } from '@backstage/catalog-client';\nimport { PermissionEvaluator } from '@backstage/plugin-permission-common';\nimport {\n DiscoveryService,\n RootConfigService,\n} from '@backstage/backend-plugin-api';\n\n/**\n * @deprecated Please migrate to the new backend system as this will be removed in the future.\n * @public\n */\nexport interface RouterOptions {\n logger: Logger;\n config: RootConfigService;\n catalogApi: CatalogApi;\n clusterSupplier?: KubernetesClustersSupplier;\n discovery: DiscoveryService;\n permissions: PermissionEvaluator;\n}\n\n/**\n * creates and configure a new router for handling the kubernetes backend APIs\n * @param options - specifies the options required by this plugin\n * @returns a new router\n * @deprecated Please migrate to the new backend system as this will be removed in the future.\n * ```\n * import { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend';\n * const { router } = await KubernetesBuilder.createBuilder({\n * logger,\n * config,\n * }).build();\n * ```\n *\n * @public\n */\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { router } = await KubernetesBuilder.createBuilder(options)\n .setClusterSupplier(options.clusterSupplier)\n .build();\n return router;\n}\n"],"names":["KubernetesBuilder"],"mappings":";;;;AAuDA,eAAsB,aACpB,OACyB,EAAA;AACzB,EAAA,MAAM,EAAE,MAAA,EAAW,GAAA,MAAMA,mCAAkB,CAAA,aAAA,CAAc,OAAO,CAAA,CAC7D,kBAAmB,CAAA,OAAA,CAAQ,eAAe,CAAA,CAC1C,KAAM,EAAA;AACT,EAAO,OAAA,MAAA;AACT;;;;"}
|