1# modules/matilda/ — Administración de servidores
2
3**Propósito.** Administrar servidores de forma declarativa: se describe
4el inventario deseado (hosts, contenedores Docker, vhosts de proxy
5inverso) y matilda renderiza la configuración y calcula el plan que
6reconcilia el estado actual con el deseado.
7
8## Crates
9
10| crate | tipo | rol |
11| ---------------- | ---- | ------------------------------------------------------------ |
12| `matilda-core` | lib | Modelo: `Host`, `Container`, `VHost`, `Inventory` |
13| `matilda-config` | lib | Renderizado: `Container` → docker-compose / `docker run`; `VHost` → nginx |
14| `matilda-plan` | lib | Reconciliación: `plan(actual, deseado)` → lista ordenada de `Action`s |
15| `matilda-apply` | lib | Puente plan→ejecución: `Action`s → `ApplyStep`s (archivos + comandos) y script de shell |
16
17App: `apps/matilda` — demo CLI (`cargo run -p matilda`).
18
19## Flujo
20
21```text
22 Inventory (deseado) ──► matilda-config ──► docker-compose.yml + nginx
23 │
24 └──► matilda-plan ◄── Inventory (actual) ──► Plan { actions }
25```
26
27- **Declarativo**: el inventario describe *qué* debe existir; nadie
28 ejecuta nada en `core`/`config`/`plan` — son funciones puras.
29- **Plan ordenado**: crear contenedores antes que vhosts; eliminar
30 vhosts antes que sus contenedores. Determinista (inventario en
31 `BTreeMap`).
32
33## Dependencias
34
35- `config` y `plan` ← `matilda-core`. Todos `#![forbid(unsafe_code)]`.
36- Cero Docker, cero SSH, cero disco — sólo modelos y strings.
37
38## Estado
39
40`core` + `config` + `plan` + `apply` implementados y verdes (35 tests) +
41demo CLI. La cadena pura ya llega de la declaración al script de shell
42concreto listo para correr en el servidor.
43
44**Pendiente** (la capa de I/O):
45
46| crate pendiente | rol |
47| ----------------- | ------------------------------------------------ |
48| `matilda-linker` | transporte SSH (sobre `transport-ssh-multiplex`) |
49| `matilda-ghost` | agente remoto que ejecuta los `ApplyStep`s |
50| `matilda-app` | frontend GPUI |
SDD.md
modules/matilda/ — Administración de servidores
Propósito. Administrar servidores de forma declarativa: se describe
el inventario deseado (hosts, contenedores Docker, vhosts de proxy
inverso) y matilda renderiza la configuración y calcula el plan que
reconcilia el estado actual con el deseado.
Crates
| crate | tipo | rol |
matilda-core | lib | Modelo: Host, Container, VHost, Inventory |
matilda-config | lib | Renderizado: Container → docker-compose / docker run; VHost → nginx |
matilda-plan | lib | Reconciliación: plan(actual, deseado) → lista ordenada de Actions |
matilda-apply | lib | Puente plan→ejecución: Actions → ApplySteps (archivos + comandos) y script de shell |
App: apps/matilda — demo CLI (cargo run -p matilda).
Flujo
Inventory (deseado) ──► matilda-config ──► docker-compose.yml + nginx
│
└──► matilda-plan ◄── Inventory (actual) ──► Plan { actions }
- Declarativo: el inventario describe qué debe existir; nadie
ejecuta nada en
core/config/plan — son funciones puras.
- Plan ordenado: crear contenedores antes que vhosts; eliminar
vhosts antes que sus contenedores. Determinista (inventario en
BTreeMap).
Dependencias
config y plan ← matilda-core. Todos #![forbid(unsafe_code)].
- Cero Docker, cero SSH, cero disco — sólo modelos y strings.
Estado
core + config + plan + apply implementados y verdes (35 tests) +
demo CLI. La cadena pura ya llega de la declaración al script de shell
concreto listo para correr en el servidor.
Pendiente (la capa de I/O):
| crate pendiente | rol |
matilda-linker | transporte SSH (sobre transport-ssh-multiplex) |
matilda-ghost | agente remoto que ejecuta los ApplySteps |
matilda-app | frontend GPUI |