Cambios realizados: 1. srv-ns8 - Share SMB configurado: - Path: /mnt/ns8Disco2/bkps-dasuten - Share name: bkps-dasuten - Usuario: rmonla - Acceso: \\10.0.10.8\bkps-dasuten 2. dasuten_transferir_srvv-fenix-srv-ns8.rb: - Elimina copia automática al share - Agrega nota sobre cómo copiar manualmente desde fenix - Mantiene backup en /var/tmp/ para upload a Drive Uso desde srvv-fenix (Windows): net use X: \\10.0.10.8\bkps-dasuten /user:rmonla <password> copy E:\BK_SQL\sysdasuten\archivo.bak X:\ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
121 lines
4.1 KiB
Ruby
121 lines
4.1 KiB
Ruby
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
# ==========================================================
|
|
# adn/tools/cli/drones/dasuten_transferir_srvv-fenix-srv-ns8.rb
|
|
# ==========================================================
|
|
# Dron: Transferencia SMB desde srvv-fenix a srv-ns8
|
|
# Flujo: srvv-fenix (E:\BK_SQL\) → srv-ns8 (/var/tmp/)
|
|
# Usa: smbclient con credenciales de candados
|
|
# ==========================================================
|
|
|
|
require 'time'
|
|
require 'json'
|
|
require 'shellwords'
|
|
require 'pathname'
|
|
|
|
# Ruta por defecto (backup completo)
|
|
BACKUP_REMOTO_DEFAULT = "sysdasuten_compressed_ADN.bak"
|
|
BACKUP_LOCAL_DEFAULT = "/var/tmp/sysdasuten_compressed_ADN.bak"
|
|
|
|
# Si existe output del dron anterior (export o export_dif), leer la ruta
|
|
EXPORT_OUTPUT_FILE = '/tmp/dron_export_output.json'
|
|
EXPORT_DIF_OUTPUT_FILE = '/tmp/dron_export_dif_output.json'
|
|
|
|
backup_remoto_name = BACKUP_REMOTO_DEFAULT
|
|
backup_local = BACKUP_LOCAL_DEFAULT
|
|
|
|
if File.exist?(EXPORT_DIF_OUTPUT_FILE)
|
|
output = JSON.parse(File.read(EXPORT_DIF_OUTPUT_FILE))
|
|
if output['backup_ruta']
|
|
# Extraer solo el nombre del archivo de la ruta completa (E:\BK_SQL\archivo.bak)
|
|
# Usar split para manejar tanto backslashes como forward slashes
|
|
backup_remoto_name = output['backup_ruta'].split(/[\\\/]/).last
|
|
backup_local = "/var/tmp/#{backup_remoto_name}"
|
|
puts "[*] Dron: Transferencia SMB srvv-fenix → srv-ns8 (DIFERENCIAL)"
|
|
end
|
|
elsif File.exist?(EXPORT_OUTPUT_FILE)
|
|
output = JSON.parse(File.read(EXPORT_OUTPUT_FILE))
|
|
if output['backup_ruta']
|
|
backup_remoto_name = output['backup_ruta'].split(/[\\\/]/).last
|
|
backup_local = "/var/tmp/#{backup_remoto_name}"
|
|
puts "[*] Dron: Transferencia SMB srvv-fenix → srv-ns8 (COMPLETO)"
|
|
end
|
|
end
|
|
|
|
BACKUP_SERVER = "//10.0.10.200/BK_SQL"
|
|
BACKUP_FILE = backup_remoto_name
|
|
|
|
# Directorio de destino en srv-ns8 (compartido para backups DASUTEN)
|
|
# Nota: Este directorio está expuesto vía Samba para acceso desde srvv-fenix
|
|
BACKUP_NS8_DIR = "/mnt/ns8Disco2/bkps-dasuten"
|
|
|
|
puts "[*] Dron: Transferencia SMB srvv-fenix → srv-ns8"
|
|
puts " Share: #{BACKUP_SERVER}"
|
|
puts " Archivo: #{BACKUP_FILE}"
|
|
puts " Destino: #{backup_local}"
|
|
|
|
begin
|
|
# Autorizar candados primero
|
|
system("ruby adn/tools/candados/candados.rb authorize >/dev/null 2>&1")
|
|
|
|
# Obtener credencial de candados
|
|
pass_cmd = "ruby adn/tools/candados/candados.rb get utnlarioja.intranet:monlaricardo 2>/dev/null"
|
|
pass = `#{pass_cmd}`.strip
|
|
|
|
if pass.empty?
|
|
puts "[!] No se pudo obtener credencial de candados"
|
|
exit 1
|
|
end
|
|
|
|
# Transferencia SMB
|
|
puts "\n[1/2] Descargando vía SMB..."
|
|
start = Time.now
|
|
|
|
# Escapar contraseña para smbclient (evitar problemas con $ y caracteres especiales)
|
|
pass_escaped = pass.gsub('$', '\\$')
|
|
cmd_smb = "smbclient #{BACKUP_SERVER} -U \"monlaricardo%#{pass_escaped}\" -W UTNlarioja -c \"lcd /var/tmp; get #{BACKUP_FILE}\" 2>&1"
|
|
system(cmd_smb)
|
|
|
|
if $?.success?
|
|
duracion = (Time.now - start).round(2)
|
|
puts "[+] Transferencia completada en #{duracion} segundos"
|
|
else
|
|
puts "[!] Error en transferencia SMB (código: #{$?.exitstatus})"
|
|
exit 1
|
|
end
|
|
|
|
# Verificar archivo local
|
|
puts "\n[2/2] Verificando archivo..."
|
|
if File.exist?(backup_local)
|
|
tamaño_mb = (File.size(backup_local) / 1024.0 / 1024.0).round(2)
|
|
puts "[+] Archivo verificado: #{tamaño_mb} MB"
|
|
puts " Nota: Para copiar al share SMB, ejecutar desde srvv-fenix:"
|
|
puts " net use X: \\\\10.0.10.8\\bkps-dasuten /user:rmonla <password>"
|
|
puts " copy #{backup_local} X:\\#{backup_remoto_name}"
|
|
else
|
|
puts "[!] Archivo no encontrado en destino"
|
|
exit 1
|
|
end
|
|
|
|
# Output para orquestador
|
|
resultado = {
|
|
paso: 'transfer_complete',
|
|
backup_local: backup_local,
|
|
backup_ns8_share: "#{BACKUP_NS8_DIR}/#{backup_remoto_name}",
|
|
nodo: 'srv-ns8',
|
|
duracion: duracion,
|
|
timestamp: Time.now.iso8601,
|
|
siguiente_paso: 'upload_drive'
|
|
}
|
|
|
|
puts "\n✅ Transferencia completada"
|
|
puts " Output: #{resultado.to_json}"
|
|
|
|
File.write('/tmp/dron_transfer_output.json', resultado.to_json)
|
|
|
|
rescue => e
|
|
puts "[!] Error fatal: #{e.message}"
|
|
exit 1
|
|
end
|