[P2606] WebServer NGINX: plan actualizado, ficha nodo, HTTPS operativo
- P2606: Plan v1.1 EN EJECUCIÓN. Fases 1-3 completadas. - Ficha nodo srvv-nginx-rm.md. P2606 en adn/07_proyectos.md. - Incluye cambios acumulados de sesiones anteriores.
This commit is contained in:
+74
-7
@@ -54,14 +54,14 @@ module ADN
|
||||
descripcion: "Gestión y consulta de nodos de infraestructura",
|
||||
uso: "./adn/tools/run nodos <acción> [opciones]",
|
||||
opciones: [
|
||||
{ names: ['agrupar [--servidor SRV]'], desc: "Agrupar VMs por servidor anfitrión" },
|
||||
{ names: ['listar [--tipo TIPO]'], desc: "Listar fichas de nodos (.md)" },
|
||||
{ names: ['agrupar [--por ambitos|servidor]'], desc: "Agrupar nodos de la red" },
|
||||
{ names: ['listar [--tipo TIPO] [--ambito AMB]'], desc: "Listar fichas de nodos (.md)" },
|
||||
{ names: ['buscar <término>'], desc: "Buscar nodos por nombre o contenido" }
|
||||
],
|
||||
ejemplos: [
|
||||
{ cmd: "./adn/tools/run nodos agrupar", desc: "Agrupar todos los VMs por servidor" },
|
||||
{ cmd: "./adn/tools/run nodos agrupar --servidor srv-pmox1", desc: "Agrupar VMs del servidor srv-pmox1" },
|
||||
{ cmd: "./adn/tools/run nodos listar --tipo srvv", desc: "Listar nodos de tipo srvv" },
|
||||
{ cmd: "./adn/tools/run nodos agrupar --por ambitos", desc: "Agrupar nodos estructurados desde la DB" },
|
||||
{ cmd: "./adn/tools/run nodos agrupar --por servidor --servidor srv-pmox1", desc: "Agrupar VMs del servidor en base a fichas" },
|
||||
{ cmd: "./adn/tools/run nodos listar --ambito dtic-DASUTEN", desc: "Listar nodos MD cruzados con ámbito DB" },
|
||||
{ cmd: "./adn/tools/run nodos buscar dasuten", desc: "Buscar nodos relacionados con dasuten" }
|
||||
]
|
||||
)
|
||||
@@ -110,12 +110,59 @@ module ADN
|
||||
# ─── Agrupar ────────────────────────────────────────────────────────
|
||||
|
||||
def agrupar_nodos
|
||||
opts = { servidor: nil }
|
||||
opts = { servidor: nil, por: 'servidor' }
|
||||
parser = OptionParser.new do |opt|
|
||||
opt.on('--servidor SRV', 'Filtrar por servidor anfitrión') { |s| opts[:servidor] = s }
|
||||
opt.on('--por CAMPO', 'Agrupar por: servidor, ambitos') { |c| opts[:por] = c }
|
||||
end
|
||||
parser.order!(@args)
|
||||
|
||||
if opts[:por] == 'ambitos'
|
||||
agrupar_por_ambitos
|
||||
else
|
||||
agrupar_por_servidor(opts)
|
||||
end
|
||||
end
|
||||
|
||||
def agrupar_por_ambitos
|
||||
puts "#{Color::CYAN}📋 Agrupando nodos por Ámbitos (Desde DB)#{Color::RESET}"
|
||||
puts "#{Color::DIM}#{'-' * 60}#{Color::RESET}"
|
||||
|
||||
require_relative '../db/core/bitacora_db'
|
||||
|
||||
ambitos_hash = Hash.new { |h, k| h[k] = [] }
|
||||
sin_ambito = []
|
||||
|
||||
BitacorasDB::BitacoraDB.with_connection do |db|
|
||||
nodos = db.list_nodos(limit: 1000)
|
||||
nodos.each do |n|
|
||||
if n['ambito_nombre']
|
||||
ambitos_hash[n['ambito_nombre']] << n['nombre']
|
||||
else
|
||||
sin_ambito << n['nombre']
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
ambitos_hash.keys.sort.each do |amb|
|
||||
vms = ambitos_hash[amb]
|
||||
puts "#{Color::GREEN}🏢 #{amb}#{Color::RESET} (#{vms.length} nodos)"
|
||||
vms.sort.each { |vm| puts " ├── 💻 #{vm}" }
|
||||
puts ""
|
||||
end
|
||||
|
||||
if sin_ambito.any?
|
||||
puts "#{Color::YELLOW}❓ Nodos sin ámbito asignado:#{Color::RESET}"
|
||||
sin_ambito.sort.each { |nodo| puts " ├── 💻 #{nodo}" }
|
||||
puts ""
|
||||
end
|
||||
|
||||
total_vms = ambitos_hash.values.flatten.length + sin_ambito.length
|
||||
puts "#{Color::DIM}#{'-' * 60}#{Color::RESET}"
|
||||
puts "#{Color::DIM}Total: #{ambitos_hash.keys.length} ámbitos, #{total_vms} nodos#{Color::RESET}"
|
||||
end
|
||||
|
||||
def agrupar_por_servidor(opts)
|
||||
puts "#{Color::CYAN}📋 Agrupando nodos por Servidor Host#{Color::RESET}"
|
||||
puts "#{Color::DIM}#{'-' * 60}#{Color::RESET}"
|
||||
|
||||
@@ -173,14 +220,30 @@ module ADN
|
||||
# ─── Listar ─────────────────────────────────────────────────────────
|
||||
|
||||
def listar_nodos
|
||||
opts = { tipo: nil }
|
||||
opts = { tipo: nil, ambito: nil }
|
||||
parser = OptionParser.new do |opt|
|
||||
opt.on('--tipo TIPO', 'Filtrar por prefijo (srv, srvv, pcv, pc, cam, dc, sql)') { |t| opts[:tipo] = t }
|
||||
opt.on('--ambito NOMBRE', 'Cruzar nombres de base de datos para filtrar') { |a| opts[:ambito] = a }
|
||||
end
|
||||
parser.order!(@args)
|
||||
|
||||
puts "#{Color::CYAN}📋 Listando fichas de nodos#{Color::RESET}"
|
||||
puts "#{Color::DIM}#{'-' * 60}#{Color::RESET}"
|
||||
|
||||
nodos_validos = nil
|
||||
if opts[:ambito]
|
||||
require_relative '../db/core/bitacora_db'
|
||||
BitacorasDB::BitacoraDB.with_connection do |db|
|
||||
ambito = db.get_ambito(opts[:ambito])
|
||||
if ambito
|
||||
nodos_db = db.list_nodos(ambito_id: ambito['id'], limit: 1000)
|
||||
nodos_validos = nodos_db.map { |n| n['nombre'] }
|
||||
else
|
||||
puts "#{Color::RED}✗ Error: Ámbito '#{opts[:ambito]}' no encontrado en la DB.#{Color::RESET}"
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
archivos = Dir.glob(File.join(ADN::NODOS_DIR, '*.md')).sort
|
||||
nodos = archivos.map { |a| File.basename(a, '.md') }
|
||||
@@ -189,6 +252,10 @@ module ADN
|
||||
if opts[:tipo]
|
||||
nodos.select! { |n| n.start_with?(opts[:tipo]) }
|
||||
end
|
||||
|
||||
if nodos_validos
|
||||
nodos.select! { |n| nodos_validos.include?(n) }
|
||||
end
|
||||
|
||||
if nodos.empty?
|
||||
puts "#{Color::YELLOW}⚠ No se encontraron nodos#{opts[:tipo] ? " con prefijo '#{opts[:tipo]}'" : ''}#{Color::RESET}"
|
||||
|
||||
Reference in New Issue
Block a user