218 lines
5.8 KiB
Markdown
218 lines
5.8 KiB
Markdown
|
|
# 📦 Documentación de Provisioning - Guía Limpia
|
||
|
|
|
||
|
|
**Última actualización**: 2025-11-20
|
||
|
|
**Estado**: Análisis correcto, solución lista
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 El Problema
|
||
|
|
|
||
|
|
```
|
||
|
|
Dockerfile / docker-compose son INSUFICIENTES porque:
|
||
|
|
|
||
|
|
❌ No definen CÓMO GESTIONAR servicios (systemd, provctl)
|
||
|
|
❌ No definen CÓMO VALIDAR salud
|
||
|
|
❌ No definen CÓMO ORQUESTAR múltiples máquinas
|
||
|
|
❌ No integran con PROVISIONING
|
||
|
|
❌ No escalan a diferentes contextos (local/dev/prod)
|
||
|
|
❌ No declaran requisitos de INFRA
|
||
|
|
```
|
||
|
|
|
||
|
|
## ✅ La Solución: Tres Capas Coherentes
|
||
|
|
|
||
|
|
### **CAPA 1: TaskService en provisioning** (FUENTE DE VERDAD)
|
||
|
|
|
||
|
|
```
|
||
|
|
/provisioning/extensions/taskservs/development/syntaxis/
|
||
|
|
├── kcl/
|
||
|
|
│ ├── syntaxis.k ← Schema (como n8n.k, postgres.k)
|
||
|
|
│ └── dependencies.k ← Requisitos del sistema
|
||
|
|
├── default/
|
||
|
|
│ ├── install-syntaxis.sh ← Script de instalación
|
||
|
|
│ └── env-syntaxis.j2 ← Template de variables
|
||
|
|
└── examples/
|
||
|
|
├── syntaxis-dev.k ← Config para desarrollo
|
||
|
|
└── syntaxis-prod.k ← Config para producción
|
||
|
|
```
|
||
|
|
|
||
|
|
**Define**: QUÉ es syntaxis, cómo se estructura, qué requisitos tiene
|
||
|
|
**Ejemplo**: Como `/provisioning/extensions/taskservs/development/n8n/` existente
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **CAPA 2: Config en provctl** (GESTIÓN LOCAL)
|
||
|
|
|
||
|
|
```
|
||
|
|
/provctl/examples/stage1-extended-definitions/
|
||
|
|
├── syntaxis-local-dev.toml ← Para desarrollo local
|
||
|
|
├── syntaxis-prod.toml ← Para producción
|
||
|
|
└── syntaxis-staging.toml ← Para staging
|
||
|
|
```
|
||
|
|
|
||
|
|
**Define**: CÓMO ejecutar syntaxis (systemd, health checks, ports, env)
|
||
|
|
**Ejemplo**: Como `/provctl/examples/minimal-app.toml` existente
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### **CAPA 3: Presets en syntaxis** (UX DEL DEVELOPER)
|
||
|
|
|
||
|
|
```
|
||
|
|
syntaxis/configs/
|
||
|
|
├── deployment-presets.kcl ← LOCAL / DEV / STAGING / PRODUCTION
|
||
|
|
└── (NO MÁS TOML COMPILADO)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Define**: Qué servicios en cada contexto
|
||
|
|
**Resultado**: `syntaxis-installer --preset dev` detecta automáticamente provctl/provisioning
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔗 Cómo Se Conectan
|
||
|
|
|
||
|
|
```
|
||
|
|
Developer elige preset
|
||
|
|
↓
|
||
|
|
syntaxis installer lee deployment-presets.kcl
|
||
|
|
├─ local → CLI solamente (manual)
|
||
|
|
├─ dev → provctl config (local automático)
|
||
|
|
├─ staging → provisioning (infra escalable)
|
||
|
|
└─ prod → provisioning + HA
|
||
|
|
|
||
|
|
Si "dev" (provctl):
|
||
|
|
├─ Detecta provctl disponible
|
||
|
|
├─ Lee provisioning taskserv (syntaxis.k)
|
||
|
|
├─ Genera config provctl (syntaxis-local-dev.toml)
|
||
|
|
└─ Inicia servicios con systemd/launchd
|
||
|
|
|
||
|
|
Si "prod" (provisioning):
|
||
|
|
├─ syntaxis es un taskserv importable
|
||
|
|
├─ provisioning lo orquesta como su inversión lo permite
|
||
|
|
└─ Resultado: Full stack enterprise
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 Comparación
|
||
|
|
|
||
|
|
| Aspecto | Antes (TOML compilado) | Después (3 Capas) |
|
||
|
|
|---------|---|---|
|
||
|
|
| **Definición** | TOML → catalog.rs → ingestionable | KCL taskserv (como n8n) |
|
||
|
|
| **Gestión local** | ❓ Desconocido | provctl TOML (como minimal-app) |
|
||
|
|
| **Presets** | ❌ No existen | ✅ KCL en syntaxis |
|
||
|
|
| **Cambios** | Recompilación continua | Solo guardar archivo |
|
||
|
|
| **Consumible por** | provisioning tools | provisioning, provctl, installer |
|
||
|
|
| **DX** | "¿Qué es este TOML?" | "Elige preset: dev/prod ✅" |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 Documentos en Este Directorio
|
||
|
|
|
||
|
|
### Lectura Necesaria
|
||
|
|
|
||
|
|
1. **[CURRENT_STATE_ANALYSIS.md](CURRENT_STATE_ANALYSIS.md)**
|
||
|
|
- Análisis de qué existe hoy
|
||
|
|
- Qué no existe
|
||
|
|
- Hallazgos críticos
|
||
|
|
|
||
|
|
2. **[SOLUTION_ARCHITECTURE_CORRECT.md](SOLUTION_ARCHITECTURE_CORRECT.md)**
|
||
|
|
- Capa 1: TaskService (KCL schema)
|
||
|
|
- Capa 2: Config provctl (TOML)
|
||
|
|
- Capa 3: Presets (KCL)
|
||
|
|
- Ejemplos reales basados en n8n y otros
|
||
|
|
|
||
|
|
3. **[PROBLEM_STATEMENT_CORRECT.md](PROBLEM_STATEMENT_CORRECT.md)**
|
||
|
|
- Por qué Docker/compose no es suficiente
|
||
|
|
- Qué define cada capa
|
||
|
|
- Cómo se conectan
|
||
|
|
|
||
|
|
### Documentos Descartables
|
||
|
|
|
||
|
|
- `ARCHITECTURE_REVISION.md` ❌ (problema hipotético incorrecto)
|
||
|
|
- `KCL_REST_API_DESIGN.md` ❌ (solución para problema incorrecto)
|
||
|
|
- `MULTI_LAYER_VALIDATION.md` ❌ (enfoque incorrecto)
|
||
|
|
- `VALIDATION_REGISTRY_NUSHELL.md` ❌ (enfoque incorrecto)
|
||
|
|
- `THE_REAL_PROBLEM.md` ❌ (análisis parcial)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 Próximos Pasos
|
||
|
|
|
||
|
|
### Paso 1: Crear TaskService en provisioning
|
||
|
|
|
||
|
|
```bash
|
||
|
|
mkdir -p provisioning/extensions/taskservs/development/syntaxis/kcl
|
||
|
|
mkdir -p provisioning/extensions/taskservs/development/syntaxis/default
|
||
|
|
mkdir -p provisioning/extensions/taskservs/development/syntaxis/examples
|
||
|
|
```
|
||
|
|
|
||
|
|
Copiar estructura de n8n y adaptarla
|
||
|
|
|
||
|
|
### Paso 2: Crear config provctl
|
||
|
|
|
||
|
|
```bash
|
||
|
|
provctl/examples/stage1-extended-definitions/syntaxis-local-dev.toml
|
||
|
|
```
|
||
|
|
|
||
|
|
Basado en minimal-app.toml
|
||
|
|
|
||
|
|
### Paso 3: Crear presets en syntaxis
|
||
|
|
|
||
|
|
```bash
|
||
|
|
syntaxis/configs/deployment-presets.kcl
|
||
|
|
```
|
||
|
|
|
||
|
|
Define: local/dev/staging/production
|
||
|
|
|
||
|
|
### Paso 4: Integrar con syntaxis installer
|
||
|
|
|
||
|
|
Extender installer para:
|
||
|
|
- Leer presets
|
||
|
|
- Detectar provisioning/provctl
|
||
|
|
- Aplicar configuración automática
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✨ Beneficio Final
|
||
|
|
|
||
|
|
```
|
||
|
|
Developer: "Instala syntaxis"
|
||
|
|
↓
|
||
|
|
syntaxis-installer
|
||
|
|
|
||
|
|
"¿Cómo?:
|
||
|
|
1. local (CLI solamente)
|
||
|
|
2. dev (Full stack local)
|
||
|
|
3. staging (Multi-máquina)
|
||
|
|
4. production (HA)"
|
||
|
|
|
||
|
|
Developer elige "dev"
|
||
|
|
↓
|
||
|
|
Installer detecta provctl
|
||
|
|
↓
|
||
|
|
Auto-configura servicios
|
||
|
|
↓
|
||
|
|
✅ "Listo para usar"
|
||
|
|
```
|
||
|
|
|
||
|
|
Sin Docker/compose requirements adicionales. Sin TOML compilado ingestionable. Sin recompilación.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📌 Decisión Crítica
|
||
|
|
|
||
|
|
**¿Es el archivo declarativo KCL la fuente de verdad?**
|
||
|
|
|
||
|
|
✅ **SÍ** - Así como n8n.k lo es para n8n, postgres.k lo es para PostgreSQL
|
||
|
|
|
||
|
|
**¿Provctl puede leerlo?**
|
||
|
|
|
||
|
|
✅ **SÍ** - Se genera TOML consumible por provctl (como minimal-app.toml)
|
||
|
|
|
||
|
|
**¿Provisioning puede usarlo?**
|
||
|
|
|
||
|
|
✅ **SÍ** - Es un taskserv, se integra como cualquier otro (postgres, redis, kubernetes)
|
||
|
|
|
||
|
|
**¿Escala a otros proyectos?**
|
||
|
|
|
||
|
|
✅ **SÍ** - Cada proyecto puede ser un taskserv externo en provisioning
|