Thank you for your interest in contributing to Eno! This document provides an overview of the project's architecture, components, and development workflow to help you get started.
Eno is a Kubernetes operator that enables declarative management of complex resources through synthesis and reconciliation processes. The project consists of several controllers that work together to manage the lifecycle of compositions, synthesizers, and resources.
The repository is structured as follows:
api/- Contains the API definitions for CRDs (Custom Resource Definitions)cmd/- Contains the entry points for the eno-controller and eno-reconciler binariesdocker/- Docker build configurationsdocs/- Project documentation including API referenceexamples/- Example usage patterns and resourceshack/- Development and tooling scriptsinternal/- Core implementation code:controllers/- All controllers that implement the application's behaviorexecution/- Code for executing synthesizersmanager/- Controller manager infrastructureresource/- Resource handling and manipulationtestutil/- Testing utilities and helpers
pkg/- Public packages that can be imported by external projects
Eno implements a distributed control plane model with several key components:
- Synthesizers: These convert high-level declarative definitions into concrete resources.
- Compositions: These define what to synthesize and provide bindings to resources.
- ResourceSlices: Groups of resources generated by the synthesis process.
- Reconciliation Controller: Ensures resources defined in ResourceSlices are correctly reconciled in the cluster.
- Scheduling Controller: Schedules and manages synthesis operations.
The following controllers form the core of the system:
- Composition Controller: Manages the composition lifecycle and triggers synthesis.
- Reconciliation Controller: Ensures synthesized resources match their desired state in the cluster.
- Scheduling Controller: Schedules and manages synthesis operations.
- Resource Slice Controller: Processes resource slices generated by synthesizers.
- Symphony Controller: Coordinates multiple compositions with variations.
- Watch Controller: Watches for changes in resources that might affect compositions.
- Go 1.23+
- Kubernetes environment for testing (can use kind, minikube, etc.)
Use the Makefile target to set up the test environment:
make setup-testenvThis will download the controller-runtime test environment binaries needed for running tests.