gioser

tawasuyu/brahman

Rust 334TOML 129Markdown 39JSON 174745 Sutichaykuna

⎇ df8f92fbb0d4c9cfc377c810341794766db51094 crates/modules/matilda/SDD.md Markdown · 56 siq'ikuna · 2.6 KB Ñawpa willay ch'uya

feat(matilda): ghost + linker + CLI — el ciclo completo de aplicación df8f92fbb · sergio ·

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## Crates de ejecución
39
40| crate            | tipo | rol                                                          |
41| ---------------- | ---- | ------------------------------------------------------------ |
42| `matilda-ghost`  | lib  | Ejecuta los `ApplyStep`s en la máquina destino (escribe archivos, corre comandos) + `dry_run`; reporta paso a paso |
43| `matilda-linker` | lib  | Aplica los pasos en un host **remoto** por SSH (`brahman-ssh-multiplex`); mismo `ApplyReport` |
44
45CLI: `apps/matilda` — `example` / `plan` / `script` / `apply`
46(local · `--dry-run` · `--host usuario@host` por SSH).
47
48## Estado
49
50`core` + `config` + `plan` + `apply` + `ghost` + `linker` implementados
51y verdes (~42 tests) + CLI. La cadena va de la declaración (inventario
52JSON) al plan, al script y a la aplicación —local, en seco o remota—.
53
54**Pendiente**: `matilda-discover` (leer el estado actual del servidor —
55`docker inspect`, sitios de nginx— para un diff real en vez de partir
56de un inventario vacío) y `matilda-app`, el 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

cratetiporol
matilda-corelibModelo: Host, Container, VHost, Inventory
matilda-configlibRenderizado: Container → docker-compose / docker run; VHost → nginx
matilda-planlibReconciliación: plan(actual, deseado) → lista ordenada de Actions
matilda-applylibPuente 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 }

Dependencias

Crates de ejecución

cratetiporol
matilda-ghostlibEjecuta los ApplySteps en la máquina destino (escribe archivos, corre comandos) + dry_run; reporta paso a paso
matilda-linkerlibAplica los pasos en un host remoto por SSH (brahman-ssh-multiplex); mismo ApplyReport

CLI: apps/matilda — example / 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.