feat(matilda): administración de servidores — core + config + plan

matilda-core: modelo declarativo (Host, Container, VHost, Inventory).
matilda-config: renderiza Container→docker-compose/docker run y
VHost→bloque server nginx (con TLS + redirección :80→:443).
matilda-plan: reconciliación pura actual→deseado con acciones
ordenadas por dependencia (contenedores antes que vhosts, removes
en orden inverso). Demo CLI en apps/matilda.

29 tests. Funciones puras, cero Docker/SSH/disco.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-20 17:06:36 +00:00
parent 71f6cf1306
commit 3f8a3ea4b6
18 changed files with 1190 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
# 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 `Action`s |
App: `apps/matilda` — demo CLI (`cargo run -p matilda`).
## Flujo
```text
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` implementados y verdes (29 tests) + demo CLI.
**Pendiente** (la capa de I/O, ~7 sub-crates del plan original):
| crate pendiente | rol |
| ----------------- | ------------------------------------------------ |
| `matilda-linker` | transporte SSH (sobre `transport-ssh-multiplex`) |
| `matilda-ghost` | agente remoto que aplica el plan en el servidor |
| `matilda-docker` | ejecución real de Docker vía Linker/Ghost |
| `matilda-app` | frontend GPUI |