fix(dron): corregir ámbito/nodo de registro en bitácora para pipeline DASUTEN
Bug 2 — proc_dasuten.rb: - Separa nodo operacional (srvv-fenix, srv-ns8, etc.) del nodo de bitácora - Registro siempre bajo nodo=dtic-BKPs / ámbito=dtic-DIIAA - Agrega constantes NODO_BITACORA y AMBITO_BITACORA Bug 3 — ejecutor.rb (detectar_nodo_id): - Ignoraba el parámetro 'nodo' y siempre usaba Socket.gethostname - Fix: usa el nombre pasado para lookup en DB - Fallback a hostname local solo si nodo es nil/empty o no existe en DB - Segundo fallback a hostname si el nodo pasado tampoco existe en DB DB: creado nodo 'dtic-BKPs' (ID:49, tipo:servicio, ámbito:dtic-DIIAA) Refs: A04.P006 — Pipeline DASUTEN / A03 BKPs
This commit is contained in:
@@ -16,6 +16,11 @@ module ADN
|
||||
'cli', 'drones'
|
||||
)
|
||||
|
||||
# Nodo y ámbito de REGISTRO en bitácora (lógico, no operacional)
|
||||
# El nodo operacional (srvv-fenix, srv-ns8, etc.) es interno al dron
|
||||
NODO_BITACORA = 'dtic-BKPs'.freeze
|
||||
AMBITO_BITACORA = 'dtic-DIIAA'.freeze
|
||||
|
||||
SCRIPTS = {
|
||||
'dasuten_export_full' => 'dasuten_exportar_srvv-fenix.rb',
|
||||
'dasuten_export_dif' => 'dasuten_exportar_diferencial_srvv-fenix.rb',
|
||||
@@ -48,12 +53,13 @@ module ADN
|
||||
return false
|
||||
end
|
||||
|
||||
nodo = tarea[:nodo] || detectar_nodo(tarea[:id])
|
||||
nota = tarea[:texto] || "DASUTEN: #{tarea[:id]}"
|
||||
ambito = tarea[:ambito] || 'dtic-DASUTEN'
|
||||
nodo_bitacora = NODO_BITACORA # Registro lógico en bitácora
|
||||
ambito_bitacora = AMBITO_BITACORA # Ámbito de registro en bitácora
|
||||
|
||||
# Lanzar dron con bitácora automática
|
||||
cmd = "#{@dron_runner} dron lanzar --nota #{Shellwords.escape(nota)} --nodo #{Shellwords.escape(nodo)} --ambito #{Shellwords.escape(ambito)} -- ruby #{script_path}"
|
||||
# --nodo y --ambito son para REGISTRO en bitácora, no el nodo operacional
|
||||
cmd = "#{@dron_runner} dron lanzar --nota #{Shellwords.escape(nota)} --nodo #{Shellwords.escape(nodo_bitacora)} --ambito #{Shellwords.escape(ambito_bitacora)} -- ruby #{script_path}"
|
||||
|
||||
@logger.info("Ejecutando dron: #{nota}")
|
||||
@logger.debug("Comando: #{cmd}")
|
||||
|
||||
@@ -295,13 +295,23 @@ module Dron
|
||||
return nodo if nodo.is_a?(Integer)
|
||||
|
||||
require 'socket'
|
||||
hostname = Socket.gethostname.downcase
|
||||
|
||||
# Usar el nodo pasado como parámetro; fallback al hostname local si es nil/empty
|
||||
nombre_buscar = nodo.to_s.strip.downcase
|
||||
if nombre_buscar.empty?
|
||||
nombre_buscar = Socket.gethostname.downcase
|
||||
end
|
||||
|
||||
resultado = nil
|
||||
BitacorasDB::BitacoraDB.with_connection do |db|
|
||||
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) = $1 LIMIT 1', [hostname])
|
||||
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) = $1 LIMIT 1', [nombre_buscar])
|
||||
if resultado.nil? || resultado.ntuples == 0
|
||||
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) LIKE $1 LIMIT 1', ["#{hostname}%"])
|
||||
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) LIKE $1 LIMIT 1', ["#{nombre_buscar}%"])
|
||||
end
|
||||
# Último fallback: hostname local si el nodo pasado no existe en DB
|
||||
if (resultado.nil? || resultado.ntuples == 0) && nombre_buscar != Socket.gethostname.downcase
|
||||
hostname = Socket.gethostname.downcase
|
||||
resultado = db.execute('SELECT id FROM nodos WHERE LOWER(nombre) = $1 LIMIT 1', [hostname])
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user