#!/usr/bin/env ruby # frozen_string_literal: true # ========================================================== # adn/tools/cli/drones/dasuten_transferir_srvv-fenix-srv-ns8.rb # ========================================================== # Dron: Preparar backup desde share de srv-ns8 para upload # Flujo: /mnt/ns8Disco2/bkps-dasuten/ → /var/tmp/ (para rclone) # Nota: El backup ya está en el share gracias al dron de export # ========================================================== require 'time' require 'json' require 'fileutils' # Leer ruta del backup desde el output del dron de export EXPORT_OUTPUT_FILE = '/tmp/dron_export_output.json' backup_ns8_unix = nil backup_name = nil if File.exist?(EXPORT_OUTPUT_FILE) output = JSON.parse(File.read(EXPORT_OUTPUT_FILE)) backup_ns8_unix = output['backup_ruta_unix'] || output['backup_ruta_ns8'] backup_name = File.basename(backup_ns8_unix) backup_tipo = output['backup_tipo'] || 'full' puts "[*] Dron: Preparar backup #{backup_tipo.upcase} para upload" end unless backup_ns8_unix puts "[!] Error: No se encontró ruta de backup en output de export" exit 1 end BACKUP_LOCAL = "/var/tmp/#{backup_name}" puts " Origen: #{backup_ns8_unix}" puts " Archivo: #{backup_name}" puts " Destino: #{BACKUP_LOCAL}" begin puts "\n[1/2] Copiando desde share a /var/tmp..." start = Time.now # Copiar archivo del share al directorio temporal para rclone FileUtils.cp(backup_ns8_unix, BACKUP_LOCAL) duracion = (Time.now - start).round(2) puts "[+] Copia completada en #{duracion} segundos" # 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 " Ruta: #{BACKUP_LOCAL}" else puts "[!] Archivo no encontrado en destino" exit 1 end # Output para orquestador resultado = { paso: 'transfer_complete', backup_local: BACKUP_LOCAL, backup_origen: backup_ns8_unix, nodo: 'srv-ns8', duracion: duracion, timestamp: Time.now.iso8601, siguiente_paso: 'upload_drive' } puts "\n✅ Backup listo para upload" puts " Output: #{resultado.to_json}" File.write('/tmp/dron_transfer_output.json', resultado.to_json) rescue => e puts "[!] Error fatal: #{e.message}" puts e.backtrace.first(5).join("\n") exit 1 end