Files
brahman/crates/modules/matilda/SDD.md
T
sergio 5b9d8107fc feat(matilda): matilda-apply — puente del plan a la ejecución
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>
2026-05-20 20:18:20 +00:00

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

  • config y planmatilda-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