From 58874c4e9c21bed2591dfd7bba965c729e689f2a Mon Sep 17 00:00:00 2001 From: Hellgren Heikki Date: Mon, 1 Sep 2025 08:57:39 +0300 Subject: [PATCH 1/4] feat(catalog): config to support disabling processors and providers this adds support to disable individual catalog processors and providers via config. relates to #31007 Signed-off-by: Hellgren Heikki --- .changeset/wet-crabs-send.md | 5 ++ plugins/catalog-backend/config.d.ts | 32 +++++++++++ .../src/service/CatalogBuilder.ts | 57 +++++++++++++++++-- 3 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 .changeset/wet-crabs-send.md diff --git a/.changeset/wet-crabs-send.md b/.changeset/wet-crabs-send.md new file mode 100644 index 0000000000..edac0562fd --- /dev/null +++ b/.changeset/wet-crabs-send.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Add support to disable catalog providers and processors via configuration diff --git a/plugins/catalog-backend/config.d.ts b/plugins/catalog-backend/config.d.ts index a506476dbf..659cf82280 100644 --- a/plugins/catalog-backend/config.d.ts +++ b/plugins/catalog-backend/config.d.ts @@ -221,5 +221,37 @@ export interface Config { * housing catalog-info files. */ processingInterval?: HumanDuration | false; + + /** + * Catalog provide specific configuration. + * Additional configuration for providers are specified in the catalog + * modules. + */ + providers?: { + /** + * Name is the provider ID, e.g. "bitbucketServer" + */ + [name: string]: { + /** + * Whether the provider is enabled or not. Defaults to true. + */ + enabled?: boolean; + }; + }; + /** + * Configuration for entity processors. Additional configuration for + * processors are specified in the catalog modules. + */ + processors?: { + /** + * Name is the processor ID, e.g. "catalog-processor" + */ + [name: string]: { + /** + * Whether the processor is enabled or not. Defaults to true. + */ + enabled?: boolean; + }; + }; }; } diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index e697c6e77f..aab2efd1cb 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -568,9 +568,11 @@ export class CatalogBuilder { const locationStore = new DefaultLocationStore(dbClient); const configLocationProvider = new ConfigLocationEntityProvider(config); - const entityProviders = lodash.uniqBy( - [...this.entityProviders, locationStore, configLocationProvider], - provider => provider.getProviderName(), + const entityProviders = this.filterProviders( + lodash.uniqBy( + [...this.entityProviders, locationStore, configLocationProvider], + provider => provider.getProviderName(), + ), ); const processingEngine = new DefaultCatalogProcessingEngine({ @@ -725,7 +727,30 @@ export class CatalogBuilder { this.checkMissingExternalProcessors(processors); - return processors; + return this.filterProcessors(processors); + } + + private filterProcessors(processors: CatalogProcessor[]) { + const { config } = this.env; + const processorsConfig = config.getOptionalConfig('catalog.processors'); + if (!processorsConfig) { + return processors; + } + const keys = Object.keys(processorsConfig); + for (const key of keys) { + if (!processors.find(p => p.getProcessorName() === key)) { + this.env.logger.warn( + `Invalid catalog processor configuration catalog.processors.${key}: no such processor`, + ); + } + } + + return processors.filter(p => { + const processorConfig = processorsConfig.getOptionalConfig( + p.getProcessorName(), + ); + return processorConfig?.getOptionalBoolean('enabled') ?? true; + }); } // TODO(Rugvip): These old processors are removed, for a while we'll be throwing @@ -838,6 +863,30 @@ export class CatalogBuilder { ); } + private filterProviders(providers: EntityProvider[]) { + const { config, logger } = this.env; + const providersConfig = config.getOptionalConfig('catalog.providers'); + if (!providersConfig) { + return providers; + } + + const keys = Object.keys(providersConfig); + for (const key of keys) { + if (!providers.find(p => p.getProviderName() === key)) { + logger.warn( + `Invalid catalog provider configuration catalog.providers.${key}: no such provider`, + ); + } + } + + return providers.filter(p => { + const providerConfig = providersConfig.getOptionalConfig( + p.getProviderName(), + ); + return providerConfig?.getOptionalBoolean('enabled') ?? true; + }); + } + private static getDefaultProcessingInterval( config: Config, ): ProcessingIntervalFunction { From 81d0334ddc123f33a1ea801046decf9dddfdeb97 Mon Sep 17 00:00:00 2001 From: Hellgren Heikki Date: Tue, 16 Sep 2025 12:24:03 +0300 Subject: [PATCH 2/4] fix: remove logging of invalid configs for now Signed-off-by: Hellgren Heikki --- .../src/service/CatalogBuilder.ts | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index aab2efd1cb..72d54b3ef7 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -736,14 +736,6 @@ export class CatalogBuilder { if (!processorsConfig) { return processors; } - const keys = Object.keys(processorsConfig); - for (const key of keys) { - if (!processors.find(p => p.getProcessorName() === key)) { - this.env.logger.warn( - `Invalid catalog processor configuration catalog.processors.${key}: no such processor`, - ); - } - } return processors.filter(p => { const processorConfig = processorsConfig.getOptionalConfig( @@ -870,15 +862,6 @@ export class CatalogBuilder { return providers; } - const keys = Object.keys(providersConfig); - for (const key of keys) { - if (!providers.find(p => p.getProviderName() === key)) { - logger.warn( - `Invalid catalog provider configuration catalog.providers.${key}: no such provider`, - ); - } - } - return providers.filter(p => { const providerConfig = providersConfig.getOptionalConfig( p.getProviderName(), From a7a471e907c1358384c0cba79c6eadbaead5016f Mon Sep 17 00:00:00 2001 From: Hellgren Heikki Date: Tue, 16 Sep 2025 12:39:00 +0300 Subject: [PATCH 3/4] fix: handle non-object config values Signed-off-by: Hellgren Heikki --- .../src/service/CatalogBuilder.ts | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 72d54b3ef7..39387707ea 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -738,10 +738,15 @@ export class CatalogBuilder { } return processors.filter(p => { - const processorConfig = processorsConfig.getOptionalConfig( - p.getProcessorName(), - ); - return processorConfig?.getOptionalBoolean('enabled') ?? true; + try { + const processorConfig = processorsConfig.getOptionalConfig( + p.getProcessorName(), + ); + return processorConfig?.getOptionalBoolean('enabled') ?? true; + } catch (_) { + // In case the processor config is not an object, just include the processor + return true; + } }); } @@ -863,10 +868,15 @@ export class CatalogBuilder { } return providers.filter(p => { - const providerConfig = providersConfig.getOptionalConfig( - p.getProviderName(), - ); - return providerConfig?.getOptionalBoolean('enabled') ?? true; + try { + const providerConfig = providersConfig.getOptionalConfig( + p.getProviderName(), + ); + return providerConfig?.getOptionalBoolean('enabled') ?? true; + } catch (_) { + // In case the provider config is not an object, just include the provider + return true; + } }); } From 934928ed380a747ecda5ff7ab8aa87d3bd9c584a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 16 Sep 2025 11:50:44 +0200 Subject: [PATCH 4/4] Update plugins/catalog-backend/src/service/CatalogBuilder.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/catalog-backend/src/service/CatalogBuilder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 39387707ea..1e2957dadd 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -861,7 +861,7 @@ export class CatalogBuilder { } private filterProviders(providers: EntityProvider[]) { - const { config, logger } = this.env; + const { config } = this.env; const providersConfig = config.getOptionalConfig('catalog.providers'); if (!providersConfig) { return providers;