🔧 Core & Ámbitos: Commit general de mejoras y nodos pendientes
- Docs: A03 BKP updates y nuevo manifiesto nodo dasu-sql4 - W-Zombi: Nuevas rutas explícitas (exec.rb, ps1.rb) y estado stateful (cmd.json) - Bóveda: candados/.boveda.json modificados al agregar nuevos servidores (sql2, sql3) - Cleanup: Remover token .session de candados - Core API: Fixes en Bitacora_db
This commit is contained in:
@@ -11,5 +11,6 @@
|
|||||||
"dominio-utnlarioja.intranet:monlaricardo": "eyJpdiI6InFRQ3VNYWlVSHlKMURNdzciLCJ0YWciOiJ1a3hESUZlaEt6enV3UXZxWUFrWXhRPT0iLCJkYXRhIjoiNVNaekdxVyt6dE5WQmhPaXF3PT0ifQ==",
|
"dominio-utnlarioja.intranet:monlaricardo": "eyJpdiI6InFRQ3VNYWlVSHlKMURNdzciLCJ0YWciOiJ1a3hESUZlaEt6enV3UXZxWUFrWXhRPT0iLCJkYXRhIjoiNVNaekdxVyt6dE5WQmhPaXF3PT0ifQ==",
|
||||||
"deepseek_key": "eyJpdiI6InRCc2IvL3J4SGNsejgvL04iLCJ0YWciOiJBbjRlMTNXNlZzUGhNSWowSUU1a01nPT0iLCJkYXRhIjoiQXR4azk1aU9sb2QydzNwa0FMTHpjVkJKQTIvZU4wY1U2V2crK3NBbVd1UnRmUGh6In0=",
|
"deepseek_key": "eyJpdiI6InRCc2IvL3J4SGNsejgvL04iLCJ0YWciOiJBbjRlMTNXNlZzUGhNSWowSUU1a01nPT0iLCJkYXRhIjoiQXR4azk1aU9sb2QydzNwa0FMTHpjVkJKQTIvZU4wY1U2V2crK3NBbVd1UnRmUGh6In0=",
|
||||||
"srv-ns8:rmonla": "eyJpdiI6IlJ4cHZkbFpJQWVsTTl3T1YiLCJ0YWciOiJ3WTZGMDEvNHNsZm1wZm5jMEF4Q1lBPT0iLCJkYXRhIjoibFljUHRYTm44bUxvQjhCa2tBPT0ifQ==",
|
"srv-ns8:rmonla": "eyJpdiI6IlJ4cHZkbFpJQWVsTTl3T1YiLCJ0YWciOiJ3WTZGMDEvNHNsZm1wZm5jMEF4Q1lBPT0iLCJkYXRhIjoibFljUHRYTm44bUxvQjhCa2tBPT0ifQ==",
|
||||||
"dasu-sql3:Administrador": "eyJpdiI6IlRiMDh3U1N2aVhTcDYzbzciLCJ0YWciOiI5NVNyUDFlMXlrM0dGRlNqUXhLbEt3PT0iLCJkYXRhIjoiVkp2V09zSjczcS96UktTSlZTOFdBdz09In0="
|
"dasu-sql3:Administrador": "eyJpdiI6IlRiMDh3U1N2aVhTcDYzbzciLCJ0YWciOiI5NVNyUDFlMXlrM0dGRlNqUXhLbEt3PT0iLCJkYXRhIjoiVkp2V09zSjczcS96UktTSlZTOFdBdz09In0=",
|
||||||
|
"srvv-nginx-rm:rmonla": "eyJpdiI6ImFsQnk5UjhLaDFYWHJsWnciLCJ0YWciOiJJaEtCS215ekkwYVdFR0ZHNzFVN0VBPT0iLCJkYXRhIjoiUkcvSS9sMjhoQnFpRmZobFZBPT0ifQ=="
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
1775682230
|
|
||||||
@@ -473,7 +473,11 @@ module BitacorasDB
|
|||||||
inicio_horario = Time.new(2000, 1, 1, 8, 0, 0)
|
inicio_horario = Time.new(2000, 1, 1, 8, 0, 0)
|
||||||
fin_horario = Time.new(2000, 1, 1, 13, 0, 0)
|
fin_horario = Time.new(2000, 1, 1, 13, 0, 0)
|
||||||
|
|
||||||
if modo_bitacora == 'P' && inicio_time >= fin_horario
|
# Ensure we are comparing Times
|
||||||
|
require 'time'
|
||||||
|
inicio_t = inicio_time.is_a?(String) ? Time.parse(inicio_time) : inicio_time
|
||||||
|
|
||||||
|
if modo_bitacora == 'P' && inicio_t >= fin_horario
|
||||||
modo = 'R' # Fuera de horario presencial
|
modo = 'R' # Fuera de horario presencial
|
||||||
else
|
else
|
||||||
modo = modo_bitacora
|
modo = modo_bitacora
|
||||||
@@ -670,9 +674,15 @@ module BitacorasDB
|
|||||||
where_clause_events = if conditions.empty?
|
where_clause_events = if conditions.empty?
|
||||||
''
|
''
|
||||||
else
|
else
|
||||||
# Reemplazar referencias a e. por ev. y eliminar condiciones que no aplican a events
|
# Adaptar condiciones para events: traducir referencias y eliminar las que no aplican
|
||||||
conditions_events = conditions.reject { |c| c.include?('bitacora_id') || c.include?('tema_id') || c.include?('ambito_id') }
|
conditions_events = conditions.map do |c|
|
||||||
"WHERE #{conditions_events.join(' AND ').gsub('e.', 'ev.')}"
|
if c.include?('e.ambito_id')
|
||||||
|
c.gsub('e.ambito_id', 'n.ambito_id')
|
||||||
|
else
|
||||||
|
c.gsub('e.', 'ev.')
|
||||||
|
end
|
||||||
|
end.reject { |c| c.include?('bitacora_id') || c.include?('tema_id') }
|
||||||
|
conditions_events.empty? ? '' : "WHERE #{conditions_events.join(' AND ')}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Unificar eventos de tabla events y entradas para mostrar todo junto
|
# Unificar eventos de tabla events y entradas para mostrar todo junto
|
||||||
@@ -1045,7 +1055,7 @@ module BitacorasDB
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Actualizar un evento existente
|
# Actualizar un evento existente
|
||||||
def actualizar_evento(id, descripcion: nil, estado: nil, fin: nil)
|
def actualizar_evento(id, descripcion: nil, estado: nil, fin: nil, metadata: nil)
|
||||||
set_clauses = []
|
set_clauses = []
|
||||||
values = []
|
values = []
|
||||||
i = 1
|
i = 1
|
||||||
@@ -1068,6 +1078,12 @@ module BitacorasDB
|
|||||||
i += 1
|
i += 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if metadata
|
||||||
|
set_clauses << "metadata = $#{i}"
|
||||||
|
values << metadata.to_json
|
||||||
|
i += 1
|
||||||
|
end
|
||||||
|
|
||||||
return nil if set_clauses.empty?
|
return nil if set_clauses.empty?
|
||||||
|
|
||||||
set_clauses << "updated_at = NOW()"
|
set_clauses << "updated_at = NOW()"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"id":2,"cmd":"$ErrorActionPreference='Stop'; Write-Host '=== Instalando QEMU-GA ==='; msiexec /i D:\\guest-agent\\qemu-ga-x86_64.msi /quiet /norestart; Start-Sleep 10; Start-Service QEMU-GA; Write-Host 'QEMU-GA: ' (Get-Service QEMU-GA).Status; Write-Host '=== Instalando Tailscale ==='; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; iwr https://pkgs.tailscale.com/stable/tailscale-setup-latest.exe -OutFile C:\\tailscale-setup.exe -UseBasicParsing; Start-Process C:\\tailscale-setup.exe /quiet -Wait; Start-Sleep 5; Write-Host '=== Conectando Tailscale ==='; $out = & 'C:\\Program Files\\Tailscale\\tailscale.exe' up 2>&1; Write-Host $out; Write-Host '=== IP Tailscale ==='; & 'C:\\Program Files\\Tailscale\\tailscale.exe' ip"}
|
{"id":200,"cmd":"Rename-Computer -NewName dasu-sql3"}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
require 'json'
|
||||||
|
|
||||||
|
module WZombi
|
||||||
|
module Routes
|
||||||
|
class Exec
|
||||||
|
def initialize(config)
|
||||||
|
@config = config
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(_req, res)
|
||||||
|
res['Content-Type'] = 'text/plain; charset=utf-8'
|
||||||
|
cmd = JSON.parse(File.read(@config.cmd_path))['cmd']
|
||||||
|
res.body = "#{cmd}\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
require 'json'
|
||||||
|
|
||||||
|
module WZombi
|
||||||
|
module Routes
|
||||||
|
class Ps1
|
||||||
|
def initialize(config)
|
||||||
|
@config = config
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(_req, res)
|
||||||
|
res['Content-Type'] = 'text/plain; charset=utf-8'
|
||||||
|
cmd = JSON.parse(File.read(@config.cmd_path))['cmd']
|
||||||
|
res.body = "#{cmd}\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
**Versión:** 1.2
|
**Versión:** 1.2
|
||||||
**Estado:** ✅ COMPLETADO (F4.1 alertas pendiente futura iteración)
|
**Estado:** ✅ COMPLETADO (F4.1 alertas pendiente futura iteración)
|
||||||
**Dependencia:** [A03.P001 — Migración a Tools ADN](A03.P001_Migracion_ADN.md) ✅
|
**Dependencia:** [A03.P001 — Migración a Tools ADN](A03.P001_Migracion_ADN.md) ✅
|
||||||
**Última verificación:** 2026-04-06 13:17 (drones operativos)
|
**Última verificación:** 2026-04-09 08:40 (dron activos: XEN01 en procesamiento)
|
||||||
|
|
||||||
## 📋 Resumen Ejecutivo
|
## 📋 Resumen Ejecutivo
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ El ámbito **dtic-BKPs** engloba todas las operaciones de respaldo (backup), pro
|
|||||||
| `dron estado` | Estado detallado de cada dron |
|
| `dron estado` | Estado detallado de cada dron |
|
||||||
| `dron limpiar` | Limpiar tareas completadas/fallidas |
|
| `dron limpiar` | Limpiar tareas completadas/fallidas |
|
||||||
|
|
||||||
**Estado actual (2026-04-06 13:17):** Flota limpia — 2 drones completados y removidos.
|
**Estado actual (2026-04-09 08:40):** Dron activo procesando XEN01 (srv-MauriK, srv-SysACADWeb)
|
||||||
|
|
||||||
**Evento AUTO:** Crea evento de bitácora automáticamente y lo cierra al finalizar. Ideal para cron jobs y tareas desatendidas.
|
**Evento AUTO:** Crea evento de bitácora automáticamente y lo cierra al finalizar. Ideal para cron jobs y tareas desatendidas.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# Nodo: dasu-sql4
|
||||||
|
|
||||||
|
## Identidad
|
||||||
|
- **Hostname**: `dasu-sql4`
|
||||||
|
- **Rol**: SQL Server 2019 (DASUTEN) — Modo Workgroup
|
||||||
|
- **OS**: Windows Server 2022 Core (Español)
|
||||||
|
- **Estado**: 🚧 Configurando
|
||||||
|
- **Última Actualización**: 2026-04-09
|
||||||
|
- **Padre**: srv-dasu
|
||||||
|
|
||||||
|
## Virtualización
|
||||||
|
- **Hipervisor**: srv-dasu
|
||||||
|
- **VMID**: 106
|
||||||
|
- **Tipo**: QEMU/KVM
|
||||||
|
- **BIOS**: SeaBIOS
|
||||||
|
- **Machine**: pc-i440fx-10.1
|
||||||
|
- **CPU**: 2 vCPU
|
||||||
|
- **RAM**: 4 GB
|
||||||
|
- **Disco**:
|
||||||
|
- sata0: 60GB (local-lvm thin) - SO
|
||||||
|
- **Red**: VirtIO (bridge vmbr0)
|
||||||
|
- **MAC**: BC:24:11:BA:19:A0
|
||||||
|
|
||||||
|
## Red
|
||||||
|
- **IP**: 192.168.1.26 (DHCP ISP)
|
||||||
|
- **Gateway**: 192.168.1.1
|
||||||
|
- **DNS**: ISP (automático)
|
||||||
|
|
||||||
|
## ISO
|
||||||
|
- Windows Server 2022 Spanish Evaluation
|
||||||
|
- VirtIO drivers
|
||||||
|
|
||||||
|
## Historial
|
||||||
|
- 2026-04-09 10:30: VM 106 creada (reemplaza dasu-sql3 fallen)
|
||||||
|
- 2026-04-09 10:40: Windows Server 2022 Español instalado
|
||||||
|
- 2026-04-09 10:50: hostname configurado: dasu-sql4
|
||||||
|
|
||||||
|
## Pendiente
|
||||||
|
- Instalar drivers VirtIO
|
||||||
|
- OpenSSH Server (puerto 7022)
|
||||||
|
- Tailscale VPN
|
||||||
|
- SQL Server 2019
|
||||||
Reference in New Issue
Block a user