Files
sergio df8f92fbb0 feat(matilda): ghost + linker + CLI — el ciclo completo de aplicación
matilda-ghost: el agente que ejecuta los ApplySteps en la máquina
destino — escribe archivos, corre comandos, reporta paso a paso;
semántica set -e (se detiene en el primer error). dry_run previsualiza
sin tocar nada. 5 tests.

matilda-linker: aplica los pasos en un host remoto por SSH sobre
brahman-ssh-multiplex; produce el mismo ApplyReport que el ghost local.

apps/matilda: deja de ser una demo hardcoded — ahora es una CLI real:
  matilda example | plan | script | apply  (local · --dry-run · --host)
Carga el inventario de un JSON, reconcilia y aplica.

matilda: 6 crates + CLI, ~42 tests. La cadena va de la declaración
a la aplicación local/remota.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 20:27:28 +00:00

2.6 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.

Crates de ejecución

crate tipo rol
matilda-ghost lib Ejecuta los ApplySteps en la máquina destino (escribe archivos, corre comandos) + dry_run; reporta paso a paso
matilda-linker lib Aplica los pasos en un host remoto por SSH (brahman-ssh-multiplex); mismo ApplyReport

CLI: apps/matildaexample / plan / script / apply (local · --dry-run · --host usuario@host por SSH).

Estado

core + config + plan + apply + ghost + linker implementados y verdes (~42 tests) + CLI. La cadena va de la declaración (inventario JSON) al plan, al script y a la aplicación —local, en seco o remota—.

Pendiente: matilda-discover (leer el estado actual del servidor — docker inspect, sitios de nginx— para un diff real en vez de partir de un inventario vacío) y matilda-app, el frontend GPUI.