diff --git a/.changeset/grumpy-eels-swim.md b/.changeset/grumpy-eels-swim.md new file mode 100644 index 0000000000..bbf5b1ca79 --- /dev/null +++ b/.changeset/grumpy-eels-swim.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Allow missing kubernetes config in development env diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 9b181c8514..ea273d7632 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -83,15 +83,7 @@ export interface GKEClusterDetails extends ClusterDetails {} export class KubernetesBuilder { constructor(env: KubernetesEnvironment); // (undocumented) - build(): Promise<{ - clusterDetails: ClusterDetails[]; - clusterSupplier: KubernetesClustersSupplier; - customResources: CustomResource[]; - fetcher: KubernetesFetcher; - objectsProvider: KubernetesObjectsProvider; - router: express.Router; - serviceLocator: KubernetesServiceLocator; - }>; + build(): KubernetesBuilderReturn; // (undocumented) protected buildClusterSupplier(): KubernetesClustersSupplier; // (undocumented) @@ -142,6 +134,17 @@ export class KubernetesBuilder { setServiceLocator(serviceLocator?: KubernetesServiceLocator): this; } +// @public +export type KubernetesBuilderReturn = Promise<{ + router: express.Router; + clusterDetails: ClusterDetails[]; + clusterSupplier: KubernetesClustersSupplier; + customResources: CustomResource[]; + fetcher: KubernetesFetcher; + objectsProvider: KubernetesObjectsProvider; + serviceLocator: KubernetesServiceLocator; +}>; + // Warning: (ae-missing-release-tag) "KubernetesClustersSupplier" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index 3333f7a0fc..a1eb60a239 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -43,6 +43,21 @@ export interface KubernetesEnvironment { config: Config; } +/** + * The return type of the `KubernetesBuilder.build` method + * + * @public + */ +export type KubernetesBuilderReturn = Promise<{ + router: express.Router; + clusterDetails: ClusterDetails[]; + clusterSupplier: KubernetesClustersSupplier; + customResources: CustomResource[]; + fetcher: KubernetesFetcher; + objectsProvider: KubernetesObjectsProvider; + serviceLocator: KubernetesServiceLocator; +}>; + export class KubernetesBuilder { private clusterSupplier?: KubernetesClustersSupplier; private objectsProvider?: KubernetesObjectsProvider; @@ -55,11 +70,23 @@ export class KubernetesBuilder { constructor(protected readonly env: KubernetesEnvironment) {} - public async build() { + public async build(): KubernetesBuilderReturn { const logger = this.env.logger; + const config = this.env.config; logger.info('Initializing Kubernetes backend'); + if (!config.has('kubernetes')) { + if (process.env.NODE_ENV !== 'development') { + throw new Error('Kubernetes configuration is missing'); + } + logger.warn( + 'Failed to initialize kubernetes backend: kubernetes config is missing', + ); + return { + router: Router(), + } as unknown as KubernetesBuilderReturn; + } const customResources = this.buildCustomResources(); const fetcher = this.fetcher ?? this.buildFetcher();