Skip to content

Latest commit

 

History

History
63 lines (44 loc) · 2.74 KB

File metadata and controls

63 lines (44 loc) · 2.74 KB

Contributing to Eno

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.

Project Overview

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.

Repository Structure

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 binaries
  • docker/ - Docker build configurations
  • docs/ - Project documentation including API reference
  • examples/ - Example usage patterns and resources
  • hack/ - Development and tooling scripts
  • internal/ - Core implementation code:
    • controllers/ - All controllers that implement the application's behavior
    • execution/ - Code for executing synthesizers
    • manager/ - Controller manager infrastructure
    • resource/ - Resource handling and manipulation
    • testutil/ - Testing utilities and helpers
  • pkg/ - Public packages that can be imported by external projects

Architecture

Eno implements a distributed control plane model with several key components:

  1. Synthesizers: These convert high-level declarative definitions into concrete resources.
  2. Compositions: These define what to synthesize and provide bindings to resources.
  3. ResourceSlices: Groups of resources generated by the synthesis process.
  4. Reconciliation Controller: Ensures resources defined in ResourceSlices are correctly reconciled in the cluster.
  5. Scheduling Controller: Schedules and manages synthesis operations.

Controllers Overview

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.

Development Workflow

Prerequisites

  • Go 1.23+
  • Kubernetes environment for testing (can use kind, minikube, etc.)

Setup Environment

Use the Makefile target to set up the test environment:

make setup-testenv

This will download the controller-runtime test environment binaries needed for running tests.