@gorizond/catalog-backend-module-fleet
Version:
Backstage catalog backend module for Rancher Fleet GitOps entities
80 lines (79 loc) • 4 kB
TypeScript
/**
* Backstage Catalog Backend Module for Rancher Fleet
*
* This module provides an EntityProvider that synchronizes Rancher Fleet
* GitOps resources (GitRepo, Bundle, BundleDeployment) into the Backstage
* Software Catalog.
*
* ## Entity Mapping
*
* - **Fleet Cluster (config) → System**: The Rancher Fleet cluster (rancher.example.com)
* - **GitRepo → Component**: Maps Fleet GitRepos to Component entities (type: service)
* - **Bundle → Resource**: Maps Fleet Bundles to Resource entities (type: fleet-bundle)
* - **BundleDeployment → Resource**: Maps per-cluster deployments to Resource entities
* - **API Generation**: Creates API entities from fleet.yaml providesApis/consumesApis
* - **Dependencies**: Supports Fleet dependsOn and Backstage relations
* - **Multi-cluster**: Supports multiple Fleet management clusters
* - **Kubernetes Integration**: Annotates entities for Backstage K8s plugin
*
* ## Installation
*
* ```bash
* yarn add @gorizond/catalog-backend-module-fleet
* ```
*
* ## Usage
*
* Add to your backend in `packages/backend/src/index.ts`:
*
* ```typescript
* import { createBackend } from '@backstage/backend-defaults';
*
* const backend = createBackend();
* backend.add(import('@backstage/plugin-catalog-backend'));
* backend.add(import('@gorizond/catalog-backend-module-fleet'));
* // For kubernetes cluster discovery:
* backend.add(import('@backstage/plugin-kubernetes-backend'));
* backend.add(import('@gorizond/catalog-backend-module-fleet/kubernetes'));
* backend.start();
* ```
*
* ## Configuration
*
* Add to your `app-config.yaml`:
*
* ```yaml
* catalog:
* providers:
* fleet:
* name: rancher-prod
* url: https://rancher.example.com/k8s/clusters/local
* token: ${FLEET_CLUSTER_TOKEN}
* namespaces:
* - fleet-default
* - fleet-local
* includeBundles: true
* includeBundleDeployments: false
* generateApis: true
* fetchFleetYaml: true
* schedule:
* frequency:
* minutes: 10
* timeout:
* minutes: 5
* ```
*
* @packageDocumentation
*/
export { catalogModuleFleet, default } from "./module";
export { kubernetesModuleFleetClusterSupplier } from "./kubernetesModule";
export { FleetEntityProvider } from "./provider";
export type { FleetProviderFactoryOptions, FleetProviderOptions, } from "./provider";
export { FleetClient, createFleetClient, selectorToString, } from "./FleetClient";
export type { FleetClientOptions, ListOptions } from "./FleetClient";
export { mapFleetClusterToDomain, mapGitRepoToSystem, mapBundleToComponent, mapBundleDeploymentToResource, mapMachineDeploymentToResource, mapVirtualMachineToResource, mapApiDefinitionToApi, toBackstageName, toEntityNamespace, createEmptyBatch, flattenBatch, ANNOTATION_FLEET_REPO, ANNOTATION_FLEET_BRANCH, ANNOTATION_FLEET_NAMESPACE, ANNOTATION_FLEET_TARGETS, ANNOTATION_FLEET_REPO_NAME, ANNOTATION_FLEET_BUNDLE_PATH, ANNOTATION_FLEET_STATUS, ANNOTATION_FLEET_READY_CLUSTERS, ANNOTATION_FLEET_CLUSTER, ANNOTATION_FLEET_SOURCE_GITREPO, ANNOTATION_FLEET_SOURCE_BUNDLE, ANNOTATION_KUBERNETES_ID, ANNOTATION_KUBERNETES_NAMESPACE, ANNOTATION_KUBERNETES_LABEL_SELECTOR, } from "./entityMapper";
export type { MapperContext, EntityBatch } from "./entityMapper";
export type { KubeMetadata, LabelSelector, Condition, FleetGitRepo, GitRepoTarget, GitRepoTargetCustomization, GitRepoSpec, GitRepoStatus, FleetBundle, BundleDependsOn, BundleSpec, BundleStatus, FleetBundleDeployment, BundleDeploymentState, BundleDeploymentStatus, FleetCluster, FleetClusterGroup, FleetYaml, FleetYamlBackstage, FleetYamlApiDefinition, FleetNamespaceConfig, FleetClusterConfig, FleetProviderConfig, GeneratedEntity, EntityGenerationContext, } from "./types";
export { FLEET_STATUS_PRIORITY, getWorstStatus, statusToLifecycle, } from "./types";
export { FleetK8sLocator } from "./k8sLocator";
export type { FleetK8sLocatorOptions } from "./k8sLocator";