Merge pull request #6589 from kissmikijr/make-object-types-configurable
Kubernetes: Make objectTypes configurable from app-config.yaml
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-kubernetes-backend': patch
|
||||
---
|
||||
|
||||
Add configuration option to the kubernetes object types. Config option is under `kubernetes.resources`. Defaults to ['pods', 'services', 'configmaps', 'deployments', 'replicasets', 'horizontalpodautoscalers', 'ingresses']
|
||||
@@ -51,6 +51,11 @@ export interface CustomResource {
|
||||
plural: string;
|
||||
}
|
||||
|
||||
// Warning: (ae-missing-release-tag) "DEFAULT_OBJECTS" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
export const DEFAULT_OBJECTS: KubernetesObjectTypes[];
|
||||
|
||||
// Warning: (ae-missing-release-tag) "FetchResponseWrapper" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
//
|
||||
// @public (undocumented)
|
||||
|
||||
+9
@@ -16,6 +16,15 @@
|
||||
|
||||
export interface Config {
|
||||
kubernetes?: {
|
||||
objectTypes?: Array<
|
||||
| 'pods'
|
||||
| 'services'
|
||||
| 'configmaps'
|
||||
| 'deployments'
|
||||
| 'replicasets'
|
||||
| 'horizontalpodautoscalers'
|
||||
| 'ingresses'
|
||||
>;
|
||||
serviceLocatorMethod: {
|
||||
type: 'multiTenant';
|
||||
};
|
||||
|
||||
@@ -16,3 +16,5 @@
|
||||
|
||||
export * from './service/router';
|
||||
export * from './types/types';
|
||||
|
||||
export { DEFAULT_OBJECTS } from './service/KubernetesFanOutHandler';
|
||||
|
||||
@@ -129,16 +129,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
entity: {
|
||||
@@ -221,16 +221,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
auth: {
|
||||
@@ -357,16 +357,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
auth: {
|
||||
@@ -497,16 +497,16 @@ describe('handleGetKubernetesObjectsForService', () => {
|
||||
|
||||
mockFetch(fetchObjectsForService);
|
||||
|
||||
const sut = new KubernetesFanOutHandler(
|
||||
getVoidLogger(),
|
||||
{
|
||||
const sut = new KubernetesFanOutHandler({
|
||||
logger: getVoidLogger(),
|
||||
fetcher: {
|
||||
fetchObjectsForService,
|
||||
},
|
||||
{
|
||||
serviceLocator: {
|
||||
getClustersByServiceId,
|
||||
},
|
||||
[],
|
||||
);
|
||||
customResources: [],
|
||||
});
|
||||
|
||||
const result = await sut.getKubernetesObjectsByEntity({
|
||||
auth: {
|
||||
|
||||
@@ -26,7 +26,7 @@ import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common';
|
||||
import { KubernetesAuthTranslator } from '../kubernetes-auth-translator/types';
|
||||
import { KubernetesAuthTranslatorGenerator } from '../kubernetes-auth-translator/KubernetesAuthTranslatorGenerator';
|
||||
|
||||
const DEFAULT_OBJECTS = new Set<KubernetesObjectTypes>([
|
||||
export const DEFAULT_OBJECTS: KubernetesObjectTypes[] = [
|
||||
'pods',
|
||||
'services',
|
||||
'configmaps',
|
||||
@@ -34,30 +34,38 @@ const DEFAULT_OBJECTS = new Set<KubernetesObjectTypes>([
|
||||
'replicasets',
|
||||
'horizontalpodautoscalers',
|
||||
'ingresses',
|
||||
]);
|
||||
];
|
||||
|
||||
export interface KubernetesFanOutHandlerOptions {
|
||||
logger: Logger;
|
||||
fetcher: KubernetesFetcher;
|
||||
serviceLocator: KubernetesServiceLocator;
|
||||
customResources: CustomResource[];
|
||||
objectTypesToFetch?: KubernetesObjectTypes[];
|
||||
}
|
||||
|
||||
export class KubernetesFanOutHandler {
|
||||
private readonly logger: Logger;
|
||||
private readonly fetcher: KubernetesFetcher;
|
||||
private readonly serviceLocator: KubernetesServiceLocator;
|
||||
private readonly customResources: CustomResource[];
|
||||
private readonly objectTypesToFetch: KubernetesObjectTypes[];
|
||||
|
||||
constructor(
|
||||
logger: Logger,
|
||||
fetcher: KubernetesFetcher,
|
||||
serviceLocator: KubernetesServiceLocator,
|
||||
customResources: CustomResource[],
|
||||
) {
|
||||
constructor({
|
||||
logger,
|
||||
fetcher,
|
||||
serviceLocator,
|
||||
customResources,
|
||||
objectTypesToFetch = DEFAULT_OBJECTS,
|
||||
}: KubernetesFanOutHandlerOptions) {
|
||||
this.logger = logger;
|
||||
this.fetcher = fetcher;
|
||||
this.serviceLocator = serviceLocator;
|
||||
this.customResources = customResources;
|
||||
this.objectTypesToFetch = objectTypesToFetch;
|
||||
}
|
||||
|
||||
async getKubernetesObjectsByEntity(
|
||||
requestBody: KubernetesRequestBody,
|
||||
objectTypesToFetch: Set<KubernetesObjectTypes> = DEFAULT_OBJECTS,
|
||||
) {
|
||||
async getKubernetesObjectsByEntity(requestBody: KubernetesRequestBody) {
|
||||
const entityName =
|
||||
requestBody.entity?.metadata?.annotations?.[
|
||||
'backstage.io/kubernetes-id'
|
||||
@@ -98,7 +106,7 @@ export class KubernetesFanOutHandler {
|
||||
.fetchObjectsForService({
|
||||
serviceId: entityName,
|
||||
clusterDetails: clusterDetailsItem,
|
||||
objectTypesToFetch,
|
||||
objectTypesToFetch: new Set(this.objectTypesToFetch),
|
||||
labelSelector,
|
||||
customResources: this.customResources,
|
||||
})
|
||||
|
||||
@@ -23,6 +23,7 @@ import { MultiTenantServiceLocator } from '../service-locator/MultiTenantService
|
||||
import {
|
||||
ClusterDetails,
|
||||
KubernetesClustersSupplier,
|
||||
KubernetesObjectTypes,
|
||||
KubernetesServiceLocator,
|
||||
ServiceLocatorMethod,
|
||||
CustomResource,
|
||||
@@ -133,13 +134,17 @@ export async function createRouter(
|
||||
);
|
||||
|
||||
const serviceLocator = getServiceLocator(options.config, clusterDetails);
|
||||
const objectTypesToFetch = options.config.getOptionalStringArray(
|
||||
'kubernetes.objectTypes',
|
||||
) as KubernetesObjectTypes[];
|
||||
|
||||
const kubernetesFanOutHandler = new KubernetesFanOutHandler(
|
||||
const kubernetesFanOutHandler = new KubernetesFanOutHandler({
|
||||
logger,
|
||||
fetcher,
|
||||
serviceLocator,
|
||||
customResources,
|
||||
);
|
||||
objectTypesToFetch,
|
||||
});
|
||||
|
||||
return makeRouter(logger, kubernetesFanOutHandler, clusterDetails);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user