@gorizond/catalog-backend-module-fleet
Version:
Backstage catalog backend module for Rancher Fleet GitOps entities
125 lines (124 loc) • 9.43 kB
JavaScript
;
/**
* 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; } });