📋 Plan v3.4: F2.T1c atomización rclone (1 dron por nodo)

- F2.T2 marcado como completado (--on-error + --retries)
- F2.T1c planificado: sync_rclone.rb listar() + ejecutar_uno()
- Inventario: 17 nodos, ~260GB total
- Progreso Fase 2: 80%
This commit is contained in:
Ricardo Monla
2026-04-09 21:10:45 -03:00
parent dd9d9b47ce
commit 02404556cd
@@ -4,7 +4,7 @@
> **Pertenece a**: [A01 - Ecosistema ADN](./A01_dtic-ADN.md) > **Pertenece a**: [A01 - Ecosistema ADN](./A01_dtic-ADN.md)
> **Fecha**: 2026-04-09 > **Fecha**: 2026-04-09
> **Responsable**: Lic. Ricardo MONLA > **Responsable**: Lic. Ricardo MONLA
> **Versión**: 3.3 — Fase 2 orquestador implementado > **Versión**: 3.4 — Fase 2: rclone atómico planificado
--- ---
@@ -14,7 +14,7 @@
Fase 0: ██████████ 100% Infraestructura de Datos (tablas internas) ✅ Fase 0: ██████████ 100% Infraestructura de Datos (tablas internas) ✅
Fase 1: ██████████ 100% Atomicidad (bugs corregidos) ✅ Fase 1: ██████████ 100% Atomicidad (bugs corregidos) ✅
Fase 1.5: ██████████ 100% Visibilidad Bitácora Web + Corrección Bugs ✅ Fase 1.5: ██████████ 100% Visibilidad Bitácora Web + Corrección Bugs ✅
Fase 2: ███████░░ 70% Composición — Orquestación de Flujos 🔧 Fase 2: ███████░░ 80% Composición — Orquestación de Flujos 🔧
Fase 3: ░░░░░░░░░░ 0% Planificación — Drones Programados Fase 3: ░░░░░░░░░░ 0% Planificación — Drones Programados
Fase 4: ░░░░░░░░░░ 0% Inteligencia de Colmena Fase 4: ░░░░░░░░░░ 0% Inteligencia de Colmena
Fase 5: ░░░░░░░░░░ 0% Observabilidad — Dashboard y Métricas Fase 5: ░░░░░░░░░░ 0% Observabilidad — Dashboard y Métricas
@@ -464,18 +464,66 @@ La **Bitácora Web** (`http://localhost:5174/bitacoras/`) muestra:
### Fase 2: Composición — Orquestación de Flujos (Dron 1.5) ### Fase 2: Composición — Orquestación de Flujos (Dron 1.5)
**Objetivo:** Permitir composición de drones para flujos multi-paso. **Objetivo:** Permitir composición de drones para flujos multi-paso. Aplicar "Menos es Más" a todos los procesadores — **1 Dron = 1 Unidad Atómica**.
| ID | Tarea | Descripción | Estado | | ID | Tarea | Descripción | Estado |
|:--:|-------|-------------|--------| |:--:|-------|-------------|--------|
| F2.T1 | `bkps orquestar` | Orquestación 1-dron-por-archivo (scan → lanzar secuencial) | ✅ | | F2.T1 | `bkps orquestar` | Orquestación 1-dron-por-archivo (scan → lanzar secuencial) | ✅ |
| F2.T1a | `proc_xen.rb` | `listar()` + `ejecutar_uno()` + `--archivo` | ✅ | | F2.T1a | `proc_xen.rb` | `listar()` + `ejecutar_uno()` — 1 dron por `.xva` | ✅ |
| F2.T1b | `proc_proxmox.rb` | `listar()` + `ejecutar_uno()` + `--archivo` | ✅ | | F2.T1b | `proc_proxmox.rb` | `listar()` + `ejecutar_uno()` — 1 dron por set VM | ✅ |
| F2.T2 | Condicionales | `--on-error continue\|abort\|retry` | ⏳ | | F2.T1c | `sync_rclone.rb` | `listar()` + `ejecutar_uno()` — 1 dron por directorio de nodo | ⏳ |
| F2.T2 | Condicionales | `--on-error continue\|abort\|retry` + `--retries N` | ✅ |
| F2.T3 | Paralelismo | `--parallel` para pasos independientes | ⏳ | | F2.T3 | Paralelismo | `--parallel` para pasos independientes | ⏳ |
| F2.T4 | Contexto compartido | Variables entre pasos (`$DRON_OUTPUT_N`) | ⏳ | | F2.T4 | Contexto compartido | Variables entre pasos (`$DRON_OUTPUT_N`) | ⏳ |
**Implementado (F2.T1):** #### F2.T1c — Atomización de Rclone (1 dron por nodo)
**Problema actual:**
```bash
# MONOLITO: un solo rclone sync para ~260GB (17 nodos)
rclone sync /mnt/ns8Disco3/.../bkps-SERVIDORes/ rmOneDrive:/.../bkps-SERVIDORes/
# Si falla en el nodo 15 de 17, hay que reiniciar TODO
```
**Solución AtomicDrones:**
```bash
# ATÓMICO: 1 dron por directorio de nodo
# Dron 1: rclone sync .../srvv-DNS/ → rmOneDrive:.../srvv-DNS/ (1.5GB)
# Dron 2: rclone sync .../srvv-KOHA/ → rmOneDrive:.../srvv-KOHA/ (9.7GB)
# ...
# Dron 17: rclone sync .../srv-SysACADWeb/ → rmOneDrive:.../srv-SysACADWeb/ (46GB)
```
**Implementación requerida en `sync_rclone.rb`:**
| Método | Qué hace |
|--------|----------|
| `listar(tarea)` | Escanea subdirectorios del `origen`, retorna lista de `{nombre, ruta, tamaño}` |
| `ejecutar_uno(tarea, directorio)` | `rclone sync origen/NODO/ destino/NODO/` para un solo nodo |
**Inventario de nodos (17 directorios, ~260GB total):**
```
8K pcv-DASU3 474M srvv-SITIO2 17G pcv-DASU2
648M srvv-UPTIME 966M srvv-N8N 18G pcv-SERVIIO
1.5G srvv-DNS 6.9G srvv-SITIO 23G pcv-DASU1
7.5G srvv-DOCs 9.7G srvv-KOHA 27G srvv-DTIC
13G srvv-DATA 14G srvv-SITIO0 37G srv-MauriK
38G srvv-FENIX 46G srv-SysACADWeb
```
**Uso propuesto:**
```bash
# Dry-run: ver nodos pendientes de sync
./adn/tools/run bkps orquestar T5 --dry-run
# Real: 1 dron por nodo, secuencial, con retry ante fallos de red
./adn/tools/run bkps orquestar T5 --on-error retry --retries 3
# Meta-orquestación: el orquestador mismo es un dron
./adn/tools/run dron lanzar --nota "Sync Nube Servidores" -- ./adn/tools/run bkps orquestar T5 --on-error retry
```
**Implementado (F2.T1a, F2.T1b):**
```bash ```bash
# Dry-run: ver archivos pendientes # Dry-run: ver archivos pendientes
./adn/tools/run bkps orquestar T1 --dry-run ./adn/tools/run bkps orquestar T1 --dry-run
@@ -487,7 +535,7 @@ La **Bitácora Web** (`http://localhost:5174/bitacoras/`) muestra:
./adn/tools/run dron lanzar --nota "Orquestar PMOX" -- ./adn/tools/run bkps orquestar T2 ./adn/tools/run dron lanzar --nota "Orquestar PMOX" -- ./adn/tools/run bkps orquestar T2
``` ```
**Criterio de éxito:** Flujos complejos se expresan como composición de drones simples. **Criterio de éxito:** Flujos complejos se expresan como composición de drones simples. Cada procesador (xen, proxmox, rclone) soporta `listar()` + `ejecutar_uno()` para orquestación atómica.
--- ---