feat: add test and basic docs for catalog cluster locator
Signed-off-by: Jonah Back <jonah@jonahback.com>
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
import { Config, ConfigReader } from '@backstage/config';
|
||||
import { getCombinedClusterSupplier } from './index';
|
||||
import { PluginEndpointDiscovery } from '@backstage/backend-common/dist';
|
||||
|
||||
describe('getCombinedClusterSupplier', () => {
|
||||
it('should retrieve cluster details from config', async () => {
|
||||
@@ -44,8 +45,12 @@ describe('getCombinedClusterSupplier', () => {
|
||||
},
|
||||
'ctx',
|
||||
);
|
||||
const discovery: PluginEndpointDiscovery = {
|
||||
getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'),
|
||||
getExternalBaseUrl: jest.fn(),
|
||||
};
|
||||
|
||||
const clusterSupplier = getCombinedClusterSupplier(config);
|
||||
const clusterSupplier = getCombinedClusterSupplier(config, discovery);
|
||||
const result = await clusterSupplier.getClusters();
|
||||
|
||||
expect(result).toStrictEqual([
|
||||
@@ -99,8 +104,12 @@ describe('getCombinedClusterSupplier', () => {
|
||||
},
|
||||
'ctx',
|
||||
);
|
||||
const discovery: PluginEndpointDiscovery = {
|
||||
getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'),
|
||||
getExternalBaseUrl: jest.fn(),
|
||||
};
|
||||
|
||||
expect(() => getCombinedClusterSupplier(config)).toThrowError(
|
||||
expect(() => getCombinedClusterSupplier(config, discovery)).toThrowError(
|
||||
new Error('Unsupported kubernetes.clusterLocatorMethods: "magic"'),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { getVoidLogger } from '@backstage/backend-common';
|
||||
import {
|
||||
getVoidLogger,
|
||||
PluginEndpointDiscovery,
|
||||
} from '@backstage/backend-common';
|
||||
import { Config, ConfigReader } from '@backstage/config';
|
||||
import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common';
|
||||
import express from 'express';
|
||||
@@ -44,6 +47,10 @@ describe('KubernetesBuilder', () => {
|
||||
clusterLocatorMethods: [{ type: 'config', clusters: [] }],
|
||||
},
|
||||
});
|
||||
const discovery: PluginEndpointDiscovery = {
|
||||
getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'),
|
||||
getExternalBaseUrl: jest.fn(),
|
||||
};
|
||||
|
||||
const clusters: ClusterDetails[] = [
|
||||
{
|
||||
@@ -68,7 +75,11 @@ describe('KubernetesBuilder', () => {
|
||||
getKubernetesObjectsByEntity: jest.fn(),
|
||||
} as any;
|
||||
|
||||
const { router } = await KubernetesBuilder.createBuilder({ config, logger })
|
||||
const { router } = await KubernetesBuilder.createBuilder({
|
||||
config,
|
||||
logger,
|
||||
discovery,
|
||||
})
|
||||
.setObjectsProvider(kubernetesFanOutHandler)
|
||||
.setClusterSupplier(clusterSupplier)
|
||||
.build();
|
||||
@@ -164,6 +175,10 @@ describe('KubernetesBuilder', () => {
|
||||
|
||||
it('custom service locator', async () => {
|
||||
const logger = getVoidLogger();
|
||||
const discovery: PluginEndpointDiscovery = {
|
||||
getBaseUrl: jest.fn().mockResolvedValue('http://test-backend'),
|
||||
getExternalBaseUrl: jest.fn(),
|
||||
};
|
||||
const someCluster: ClusterDetails = {
|
||||
name: 'some-cluster',
|
||||
authProvider: 'serviceAccount',
|
||||
@@ -237,6 +252,7 @@ describe('KubernetesBuilder', () => {
|
||||
const { router } = await KubernetesBuilder.createBuilder({
|
||||
logger,
|
||||
config,
|
||||
discovery,
|
||||
})
|
||||
.setClusterSupplier(clusterSupplier)
|
||||
.setServiceLocator(serviceLocator)
|
||||
|
||||
@@ -19,11 +19,13 @@ import { Logger } from 'winston';
|
||||
import { KubernetesClustersSupplier } from '../types/types';
|
||||
import express from 'express';
|
||||
import { KubernetesBuilder } from './KubernetesBuilder';
|
||||
import { PluginEndpointDiscovery } from '@backstage/backend-common/dist';
|
||||
|
||||
export interface RouterOptions {
|
||||
logger: Logger;
|
||||
config: Config;
|
||||
clusterSupplier?: KubernetesClustersSupplier;
|
||||
discovery: PluginEndpointDiscovery;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
errorHandler,
|
||||
notFoundHandler,
|
||||
requestLoggingHandler,
|
||||
SingleHostDiscovery,
|
||||
} from '@backstage/backend-common';
|
||||
import compression from 'compression';
|
||||
import cors from 'cors';
|
||||
@@ -37,6 +38,8 @@ export async function createStandaloneApplication(
|
||||
): Promise<express.Application> {
|
||||
const { enableCors, logger } = options;
|
||||
const config = new ConfigReader({});
|
||||
const discovery = SingleHostDiscovery.fromConfig(config);
|
||||
|
||||
const app = express();
|
||||
|
||||
app.use(helmet());
|
||||
@@ -46,7 +49,7 @@ export async function createStandaloneApplication(
|
||||
app.use(compression());
|
||||
app.use(express.json());
|
||||
app.use(requestLoggingHandler());
|
||||
app.use('/', await createRouter({ logger, config }));
|
||||
app.use('/', await createRouter({ logger, config, discovery }));
|
||||
app.use(notFoundHandler());
|
||||
app.use(errorHandler());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user