UNPKG

@gorizond/catalog-backend-module-fleet

Version:

Backstage catalog backend module for Rancher Fleet GitOps entities

125 lines (124 loc) 9.43 kB
"use strict"; /** * 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 */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FleetK8sLocator = exports.statusToLifecycle = exports.getWorstStatus = exports.FLEET_STATUS_PRIORITY = exports.ANNOTATION_KUBERNETES_LABEL_SELECTOR = exports.ANNOTATION_KUBERNETES_NAMESPACE = exports.ANNOTATION_KUBERNETES_ID = exports.ANNOTATION_FLEET_SOURCE_BUNDLE = exports.ANNOTATION_FLEET_SOURCE_GITREPO = exports.ANNOTATION_FLEET_CLUSTER = exports.ANNOTATION_FLEET_READY_CLUSTERS = exports.ANNOTATION_FLEET_STATUS = exports.ANNOTATION_FLEET_BUNDLE_PATH = exports.ANNOTATION_FLEET_REPO_NAME = exports.ANNOTATION_FLEET_TARGETS = exports.ANNOTATION_FLEET_NAMESPACE = exports.ANNOTATION_FLEET_BRANCH = exports.ANNOTATION_FLEET_REPO = exports.flattenBatch = exports.createEmptyBatch = exports.toEntityNamespace = exports.toBackstageName = exports.mapApiDefinitionToApi = exports.mapVirtualMachineToResource = exports.mapMachineDeploymentToResource = exports.mapBundleDeploymentToResource = exports.mapBundleToComponent = exports.mapGitRepoToSystem = exports.mapFleetClusterToDomain = exports.selectorToString = exports.createFleetClient = exports.FleetClient = exports.FleetEntityProvider = exports.kubernetesModuleFleetClusterSupplier = exports.default = exports.catalogModuleFleet = void 0; // Main module export var module_1 = require("./module"); Object.defineProperty(exports, "catalogModuleFleet", { enumerable: true, get: function () { return module_1.catalogModuleFleet; } }); Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(module_1).default; } }); // Kubernetes cluster supplier module var kubernetesModule_1 = require("./kubernetesModule"); Object.defineProperty(exports, "kubernetesModuleFleetClusterSupplier", { enumerable: true, get: function () { return kubernetesModule_1.kubernetesModuleFleetClusterSupplier; } }); // Provider class for advanced usage var provider_1 = require("./provider"); Object.defineProperty(exports, "FleetEntityProvider", { enumerable: true, get: function () { return provider_1.FleetEntityProvider; } }); // Fleet Kubernetes client var FleetClient_1 = require("./FleetClient"); Object.defineProperty(exports, "FleetClient", { enumerable: true, get: function () { return FleetClient_1.FleetClient; } }); Object.defineProperty(exports, "createFleetClient", { enumerable: true, get: function () { return FleetClient_1.createFleetClient; } }); Object.defineProperty(exports, "selectorToString", { enumerable: true, get: function () { return FleetClient_1.selectorToString; } }); // Entity mapping utilities var entityMapper_1 = require("./entityMapper"); Object.defineProperty(exports, "mapFleetClusterToDomain", { enumerable: true, get: function () { return entityMapper_1.mapFleetClusterToDomain; } }); Object.defineProperty(exports, "mapGitRepoToSystem", { enumerable: true, get: function () { return entityMapper_1.mapGitRepoToSystem; } }); Object.defineProperty(exports, "mapBundleToComponent", { enumerable: true, get: function () { return entityMapper_1.mapBundleToComponent; } }); Object.defineProperty(exports, "mapBundleDeploymentToResource", { enumerable: true, get: function () { return entityMapper_1.mapBundleDeploymentToResource; } }); Object.defineProperty(exports, "mapMachineDeploymentToResource", { enumerable: true, get: function () { return entityMapper_1.mapMachineDeploymentToResource; } }); Object.defineProperty(exports, "mapVirtualMachineToResource", { enumerable: true, get: function () { return entityMapper_1.mapVirtualMachineToResource; } }); Object.defineProperty(exports, "mapApiDefinitionToApi", { enumerable: true, get: function () { return entityMapper_1.mapApiDefinitionToApi; } }); Object.defineProperty(exports, "toBackstageName", { enumerable: true, get: function () { return entityMapper_1.toBackstageName; } }); Object.defineProperty(exports, "toEntityNamespace", { enumerable: true, get: function () { return entityMapper_1.toEntityNamespace; } }); Object.defineProperty(exports, "createEmptyBatch", { enumerable: true, get: function () { return entityMapper_1.createEmptyBatch; } }); Object.defineProperty(exports, "flattenBatch", { enumerable: true, get: function () { return entityMapper_1.flattenBatch; } }); // Annotation constants Object.defineProperty(exports, "ANNOTATION_FLEET_REPO", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_REPO; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_BRANCH", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_BRANCH; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_NAMESPACE", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_NAMESPACE; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_TARGETS", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_TARGETS; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_REPO_NAME", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_REPO_NAME; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_BUNDLE_PATH", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_BUNDLE_PATH; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_STATUS", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_STATUS; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_READY_CLUSTERS", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_READY_CLUSTERS; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_CLUSTER", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_CLUSTER; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_SOURCE_GITREPO", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_SOURCE_GITREPO; } }); Object.defineProperty(exports, "ANNOTATION_FLEET_SOURCE_BUNDLE", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_FLEET_SOURCE_BUNDLE; } }); Object.defineProperty(exports, "ANNOTATION_KUBERNETES_ID", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_KUBERNETES_ID; } }); Object.defineProperty(exports, "ANNOTATION_KUBERNETES_NAMESPACE", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_KUBERNETES_NAMESPACE; } }); Object.defineProperty(exports, "ANNOTATION_KUBERNETES_LABEL_SELECTOR", { enumerable: true, get: function () { return entityMapper_1.ANNOTATION_KUBERNETES_LABEL_SELECTOR; } }); // Utility exports var types_1 = require("./types"); Object.defineProperty(exports, "FLEET_STATUS_PRIORITY", { enumerable: true, get: function () { return types_1.FLEET_STATUS_PRIORITY; } }); Object.defineProperty(exports, "getWorstStatus", { enumerable: true, get: function () { return types_1.getWorstStatus; } }); Object.defineProperty(exports, "statusToLifecycle", { enumerable: true, get: function () { return types_1.statusToLifecycle; } }); // Kubernetes locator (for advanced usage) var k8sLocator_1 = require("./k8sLocator"); Object.defineProperty(exports, "FleetK8sLocator", { enumerable: true, get: function () { return k8sLocator_1.FleetK8sLocator; } });