La Idea Erronea: "Se Necesita SSH Para Promover"
En el articulo anterior, describimos la topologia Hub-Spoke de xGrid. Su capacidad mas poderosa es que cualquier Spoke puede convertirse en Hub — desconectar, transportar, encender, promover.
Ese articulo mostro este comando:
sudo xgrid-promote
Un comando shell a traves de SSH. La pregunta natural que sigue: "Entonces necesito una laptop, un cliente SSH y habilidades de linea de comandos para hacer esto?"
No.
SSH es la capa mas baja — construida para administradores de sistemas y desarrolladores. Pero en un incidente con victimas masivas, la persona que necesita promover un Spoke probablemente es una enfermera, un tecnico de emergencias o un comandante de incidente. Tienen un iPad, no una laptop.
Por eso la funcion promote de xGrid no es solo un script de shell. Es una arquitectura de tres capas.
Tres Capas de Promote
| Capa | Activacion | Usuario | Herramientas Requeridas |
|---|---|---|---|
| Capa 1 — Script | sudo xgrid-promote | Administrador de sistemas | SSH + laptop |
| Capa 2 — API | POST /api/failover/promote | Operador avanzado | Cualquier cliente HTTP |
| Capa 3 — PWA UI | Boton "Promover a Hub" en banner rojo | Cualquier persona | iPad / iPhone + navegador |
La Capa 3 llama a la Capa 2. La Capa 2 llama a la Capa 1. Cada capa agrega sus propias salvaguardas:
- Capa 1 — Maquina de estados atomica de 8 pasos con reversion completa ante cualquier falla
- Capa 2 — Validacion de rol (ya es Hub? rechazado), validacion de estado (transicion en proceso? rechazado), timeout de 60 segundos
- Capa 3 — Dialogo
confirm()para prevenir toques accidentales, animacion pulsante azul para prevenir doble clic, retroalimentacion toast de exito/falla
Tres capas significa: la complejidad de la operacion la determina el usuario, no la impone el sistema. Un administrador puede conectarse por SSH para control detallado. Una enfermera simplemente presiona un boton.
El Flujo del Codigo QR — De Cero a Promote
Cada RPi se entrega con una tarjeta de codigo QR laminada, montada junto al dispositivo. Contiene dos codigos:
┌─────────────────────────────────────────┐
│ DNO-HC02 Connection Card │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ WiFi QR │ │ MIRS QR │ │
│ │ │ │ │ │
│ │ Escanee │ │ Escanee │ │
│ │ para │ │ para │ │
│ │ WiFi │ │ abrir │ │
│ └──────────┘ └──────────┘ │
│ │
│ WiFi: DNO-HC02 │
│ MIRS: http://10.0.0.1:8000 │
└─────────────────────────────────────────┘
Paso 1 — Escanee el codigo QR WiFi. Las camaras de iPhone y iPad soportan nativamente codigos QR WiFi (formato: WIFI:T:WPA;S:{SSID};P:{password};;). Al escanear aparece el mensaje "Unirse a la red". Un toque y el dispositivo se conecta al hotspot del RPi. Sin ingresar SSID ni contrasena manualmente.
Paso 2 — Escanee el codigo QR MIRS o escriba la URL. Safari abre la PWA MIRS. El Service Worker la almacena en cache inmediatamente — las visitas posteriores funcionan sin conexion.
Paso 3 — Cuando el Hub se desconecta, un banner rojo aparece automaticamente. La PWA verifica el estado del Hub cada 30 segundos. Despues de 3 fallas consecutivas (90 segundos), un banner rojo se desliza en la parte superior de la pantalla:
Paso 4 — Presione "Promover a Hub." Aparece un dialogo de confirmacion: "Esta seguro de que desea promover este nodo a Hub?" Tras la confirmacion, el banner se vuelve azul con una animacion pulsante: "Promoviendo a Hub, por favor espere..."
En menos de 60 segundos, el script completa sus 8 pasos. Al tener exito, la pagina se recarga automaticamente con un toast verde: "Promocion completada! Rol: HUB | Epoch: N".
Sin SSH. Sin laptop. Sin comandos que memorizar.
Deteccion Automatica, No Navegacion Manual
Note la decision de diseno de la Capa 3: el boton no esta en un menu para que los usuarios lo busquen. En cambio, cuando el Hub realmente se desconecta, el banner aparece y pregunta: "El Hub esta caido. Desea tomar el control?"
Esto es deliberado.
Promote no es una operacion rutinaria. Es una operacion de emergencia. Usted no quiere que alguien lo presione por curiosidad — eso crearia un segundo Hub (split-brain). Asi que el boton solo aparece cuando se necesita: el Hub esta genuinamente offline, el nodo actual es un Spoke y hay un snapshot valido disponible para cargar.
Incluso entonces, la primera salvaguarda es el dialogo confirm(). La segunda es el mecanismo hub_epoch — si alguien accidentalmente causa un split-brain, el Hub con epoch mas bajo se degradara automaticamente cuando las dos redes se reconecten.
El diseno no hace que los errores sean imposibles. Hace que los errores se autocorrijan.
Cuando Aun Necesita SSH
La Capa 3 cubre el 95% de los escenarios de campo. Pero algunos casos aun requieren SSH:
- Modo
--skip-network: Omitir la configuracion de hostapd/dnsmasq/IP estatica durante pruebas en localhost. El boton de la PWA no soporta esta bandera. - Modo
--dry-run: Vista previa de lo que promote haria sin ejecutar. Util para verificar la disponibilidad del snapshot. - Demote: Degradar un Hub de vuelta a Spoke. Esta es una operacion administrativa — no se expone a traves del banner automatico (aunque la PWA de Gestion de Estacion proporciona una interfaz manual).
- Diagnostico de rollback: Cuando promote falla, inspeccionar logs para determinar la causa.
SSH es el respaldo, no la via principal. Como los controles de vuelo manuales en una aeronave — usted quiere tenerlos disponibles, pero disena para que rara vez sean necesarios.
iPhone / iPad Pueden Hacer SSH?
Si. La App Store tiene Termius, Prompt y Blink Shell, todos clientes SSH capaces.
Pero el punto es: usted no los necesita. La Capa 3 existe precisamente para que SSH sea opcional en lugar de obligatorio.
En un incidente con victimas masivas, usted no va a pedir a una enfermera que instale una aplicacion SSH. Le entrega una tarjeta QR laminada: escanee una vez para WiFi, escanee una vez para el sistema, presione un boton cuando sea momento de promover.
Esta es la filosofia central del diseno de tres capas: envolver capacidades de administracion de sistemas en una interfaz que cualquiera pueda operar.
Lectura adicional: Desconectar e Ir — Topologia Hub-Spoke, Promocion de Roles y Failover en Cinco Minutos · "Offline-First" No Es "Tolerable-Offline" · La Prueba del Alejamiento — Puede Su Sistema Sobrevivir la Desconexion?
