← Roadmap
🧩

Base-Module Aspects

✓ Shipped

Some configuration isn’t about one machine — it’s about a whole zone. Every box in a zone should point at the internal DNS resolver, sync its clock against the same NTP server, ship its logs to the same place. A base-module aspect is how a module carries that fleet-wide job: alongside its primary deployment, a module can bundle a small piece of configuration that Celilo applies to other systems in the zones it names. The DNS-server module owns “use the internal resolver”; the NTP module owns “sync to this clock.” The natural owner of each concern owns it.

Configuration by composition

Rather than one giant “base” module that tries to own DNS and NTP and logging and package mirrors all at once, each concern lives in the module that provides the underlying service. That composes cleanly: you add the pieces you want, upgrade each independently, and swap one out without disturbing the rest. A module that declares no aspect behaves exactly as it always has — nothing changes for modules that don’t need this.

You approve an aspect a single time, when you import the module. The prompt is explicit about what it will do — which Ansible role runs, which zones it touches, what triggers it — so you’re consenting to a clear scope, not signing a blank check. After that, the aspect fans out on its own: when the module deploys, when a new system joins a target zone, or when its configuration changes, Celilo runs it across the fleet. A version upgrade that widens the scope has to be re-approved.

Every system, honestly accounted for

When an aspect fans out, it reaches every system in the target zones — including the management server itself, which is just another system in its zone with no special case. What you have configured is answerable through Celilo’s normal “what’s installed” surfaces, not by reading framework internals. Systems that Celilo manages only through an API — an ISP modem with no shell, say — are marked as such and skipped, because there’s nothing to configure there. Aspects are idempotent and converge forward: a partial failure is reported plainly and re-run on demand, never silently rolled back.