Refactor(ADN): Migración de tools/adn a adn/tools en busca de la Armonía Integral del DIIAA
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'date'
|
||||
require_relative '../core/colores'
|
||||
|
||||
class SubcomandoGenerar
|
||||
def initialize(args, logger)
|
||||
@args = args
|
||||
@logger = logger
|
||||
end
|
||||
|
||||
def ejecutar
|
||||
# Envolvemos todo en un manejador de eventos del sistema
|
||||
ADN.eventos.publicar(:sistema_iniciado, { subcomando: 'generar' }, silencioso: true)
|
||||
if @args.empty?
|
||||
@logger.error("Se requiere tipo de generación")
|
||||
mostrar_ayuda_generar
|
||||
exit 1
|
||||
end
|
||||
|
||||
tipo = @args[0]
|
||||
@args.shift
|
||||
|
||||
case tipo
|
||||
when 'bitacora'
|
||||
generar_bitacora
|
||||
when 'nodo'
|
||||
generar_nodo
|
||||
when 'proyecto'
|
||||
generar_proyecto
|
||||
else
|
||||
@logger.error("Tipo de generación desconocido: #{tipo}")
|
||||
mostrar_ayuda_generar
|
||||
exit 1
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def mostrar_ayuda_generar
|
||||
puts "Uso: ./adn/tools/run generar <tipo> [argumentos]"
|
||||
puts ""
|
||||
puts "Tipos disponibles:"
|
||||
puts " bitacora [fecha] Generar nueva bitácora (fecha: YYYY-MM-DD, default: hoy)"
|
||||
puts " nodo <nombre> Generar ficha de nodo"
|
||||
puts " proyecto <código> Generar manifiesto de proyecto"
|
||||
end
|
||||
|
||||
def generar_bitacora
|
||||
fecha = @args[0] || Date.today.iso8601
|
||||
|
||||
# Validar formato de fecha
|
||||
unless fecha.match?(/^\d{4}-\d{2}-\d{2}$/)
|
||||
@logger.error("Formato de fecha inválido. Usar YYYY-MM-DD")
|
||||
exit 1
|
||||
end
|
||||
|
||||
ruta_bitacora = File.join(ADN::BITACORAS_DIR, "#{fecha}.md")
|
||||
|
||||
if File.exist?(ruta_bitacora)
|
||||
@logger.advertencia("La bitácora para #{fecha} ya existe")
|
||||
puts "#{Color::YELLOW}⚠ La bitácora #{fecha}.md ya existe#{Color::RESET}"
|
||||
exit 0
|
||||
end
|
||||
|
||||
# Plantilla de bitácora
|
||||
plantilla = <<~PLANTILLA_BITACORA
|
||||
# Bitácora #{fecha}
|
||||
|
||||
---
|
||||
|
||||
## 📋 Control de Gestión
|
||||
|
||||
### Pendientes
|
||||
|
||||
| ID | Nodo | Detalle |
|
||||
| :--- | :--- | :--- |
|
||||
|
||||
### En Proceso
|
||||
|
||||
| ID | Nodo | Detalle |
|
||||
| :--- | :--- | :--- |
|
||||
|
||||
### Resumen de Actividades
|
||||
|
||||
| Nodo | Resumen Integral |
|
||||
| :--- | :--- |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Actividades Detalladas
|
||||
|
||||
<!-- Agregar actividades por nodo aquí -->
|
||||
|
||||
---
|
||||
|
||||
<!-- 🤖 PREMISAS DE TRABAJO (IA): Fuente de Verdad → adn/05_ia.md -->
|
||||
PLANTILLA_BITACORA
|
||||
|
||||
File.write(ruta_bitacora, plantilla)
|
||||
|
||||
@logger.exito("Bitácora creada: #{fecha}.md")
|
||||
puts "#{Color::GREEN}✓ Bitácora creada en: #{ruta_bitacora}#{Color::RESET}"
|
||||
puts "#{Color::DIM}Para editarla: vim #{ruta_bitacora}#{Color::RESET}"
|
||||
end
|
||||
|
||||
def generar_nodo
|
||||
if @args.empty?
|
||||
@logger.error("Se requiere nombre para el nodo")
|
||||
puts "Uso: ./adn/tools/run generar nodo <nombre-nodo>"
|
||||
exit 1
|
||||
end
|
||||
|
||||
nombre = @args[0].downcase # Forzar minúsculas según gobernanza
|
||||
|
||||
ruta_nodo = File.join(ADN::NODOS_DIR, "#{nombre}.md")
|
||||
|
||||
if File.exist?(ruta_nodo)
|
||||
@logger.advertencia("La ficha para el nodo #{nombre} ya existe")
|
||||
puts "#{Color::YELLOW}⚠ La ficha #{nombre}.md ya existe#{Color::RESET}"
|
||||
exit 0
|
||||
end
|
||||
|
||||
# Plantilla de nodo
|
||||
plantilla = <<~PLANTILLA_NODO
|
||||
# Ficha de Nodo: #{nombre}
|
||||
|
||||
| Atributo | Valor |
|
||||
| :--- | :--- |
|
||||
| **Hostname** | `#{nombre}` |
|
||||
| **IP LAN** | `10.0.10.X` |
|
||||
| **Sistema Operativo** | *Especificar* |
|
||||
| **Rol** | *Describir función* |
|
||||
|
||||
## Especificaciones de Hardware
|
||||
- **CPU**: *Especificar*
|
||||
- **RAM**: *Especificar*
|
||||
- **Disco**: *Especificar*
|
||||
|
||||
## Servicios y Responsabilidades
|
||||
1. *Listar servicios críticos*
|
||||
|
||||
## Acceso y Mantenimiento
|
||||
- **Gestión**: *SSH, Web, etc.*
|
||||
- **Backup**: *Estrategia de respaldo*
|
||||
- **Monitorización**: *Herramientas de monitoreo*
|
||||
|
||||
## Dependencias
|
||||
- *Listar nodos/proyectos dependientes*
|
||||
|
||||
## Historial de Cambios Relevantes
|
||||
- #{Date.today}: Ficha creada automáticamente
|
||||
PLANTILLA_NODO
|
||||
|
||||
File.write(ruta_nodo, plantilla)
|
||||
|
||||
@logger.exito("Ficha de nodo creada: #{nombre}.md")
|
||||
puts "#{Color::GREEN}✓ Ficha de nodo creada en: #{ruta_nodo}#{Color::RESET}"
|
||||
end
|
||||
|
||||
def generar_proyecto
|
||||
if @args.empty?
|
||||
@logger.error("Se requiere código para el proyecto")
|
||||
puts "Uso: ./adn/tools/run generar proyecto <código> [nombre]"
|
||||
exit 1
|
||||
end
|
||||
|
||||
codigo = @args[0].upcase
|
||||
nombre = @args[1] || "Proyecto #{codigo}"
|
||||
|
||||
ruta_proyecto = File.join(ADN::PROYECTOS_DIR, "#{codigo}_#{nombre.downcase.gsub(/\s+/, '_')}.md")
|
||||
|
||||
if File.exist?(ruta_proyecto)
|
||||
@logger.advertencia("El manifiesto para el proyecto #{codigo} ya existe")
|
||||
puts "#{Color::YELLOW}⚠ El manifiesto #{codigo}_*.md ya existe#{Color::RESET}"
|
||||
exit 0
|
||||
end
|
||||
|
||||
# Plantilla de proyecto
|
||||
plantilla = <<~PLANTILLA_PROYECTO
|
||||
# #{codigo} - #{nombre}
|
||||
|
||||
**Estado:** 📍 Definido
|
||||
**Fecha Inicio:** #{Date.today}
|
||||
**Fecha Fin Estimada:** *Especificar*
|
||||
|
||||
## Objetivo
|
||||
*Describir el propósito y qué problema resuelve*
|
||||
|
||||
## Stakeholders
|
||||
| Rol | Nombre | Contacto |
|
||||
| :--- | :--- | :--- |
|
||||
| *Ej: Coordinador* | *Nombre* | *email/tel* |
|
||||
|
||||
## 🌐 Topología y Contexto de Red
|
||||
*Describir ubicación de nodos, subredes, requisitos de acceso*
|
||||
|
||||
## Nodos Involucrados
|
||||
### Nodos Exclusivos (Core)
|
||||
- *Listar nodos centrales del proyecto*
|
||||
|
||||
### Nodos de Soporte/Infraestructura
|
||||
- *Listar nodos de infraestructura compartida*
|
||||
|
||||
## Herramientas
|
||||
- *Software, scripts y servicios utilizados*
|
||||
|
||||
## Hitos Clave
|
||||
| ID | Hito | Estado | Fecha |
|
||||
| :--- | :--- | :---: | :--- |
|
||||
| 1 | *Primer hito* | 📍 | *Fecha* |
|
||||
|
||||
## Dashboard
|
||||
*URL del panel de seguimiento web (si aplica)*
|
||||
|
||||
## Referencias
|
||||
- [ADN del Proyecto](../adn/00_indice.md)
|
||||
- *Otras referencias relevantes*
|
||||
|
||||
---
|
||||
|
||||
*Manifiesto generado automáticamente el #{Date.today}*
|
||||
PLANTILLA_PROYECTO
|
||||
|
||||
File.write(ruta_proyecto, plantilla)
|
||||
|
||||
@logger.exito("Manifiesto de proyecto creado: #{codigo}")
|
||||
puts "#{Color::GREEN}✓ Manifiesto creado en: #{ruta_proyecto}#{Color::RESET}"
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user