UNPKG

@gorizond/catalog-backend-module-fleet

Version:

Backstage catalog backend module for Rancher Fleet GitOps entities

80 lines (79 loc) 4 kB
/** * 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";