5b9d8107fc
Traduce un Plan de reconciliación a ApplySteps concretos: por cada acción, los archivos a escribir en el servidor y los comandos a correr. Contenedores → docker rm/run; vhosts → archivo nginx + reload; hosts → sin pasos (son destino de conexión, no algo a aplicar). steps_to_script() emite un script bash único con heredocs. Sigue agnóstico de transporte — ejecutar los pasos (local, SSH o vía matilda-ghost) es la capa de I/O. La demo CLI ahora imprime el script. 6 tests; matilda llega de la declaración al script ejecutable. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.2 KiB
2.2 KiB
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
configyplan←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 |