#!/bin/bash # Script de despliegue de tablas de contexto IA # Para servidores: architect (local), deck, corp # Fecha: 2024-12-24 set -e # Exit on error SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCHEMA_FILE="${SCRIPT_DIR}/ia_context_schema.sql" SSH_KEY="$HOME/.ssh/tzzr" # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo "============================================================================" echo "TZZR - Despliegue de Tablas de Contexto IA" echo "============================================================================" echo "" # Función para desplegar en un servidor deploy_to_server() { local server_name=$1 local server_host=$2 local is_local=$3 echo -e "${YELLOW}Desplegando en ${server_name} (${server_host})...${NC}" if [ "$is_local" = "true" ]; then # Despliegue local en architect echo " → Ejecutando SQL en PostgreSQL local..." if sudo -u postgres psql -f "$SCHEMA_FILE" 2>&1 | tee /tmp/deploy_${server_name}.log; then echo -e "${GREEN} ✅ ${server_name}: Deployment exitoso${NC}" return 0 else echo -e "${RED} ❌ ${server_name}: Error en deployment${NC}" cat /tmp/deploy_${server_name}.log return 1 fi else # Despliegue remoto vía SSH echo " → Copiando schema al servidor..." if ! scp -i "$SSH_KEY" -o StrictHostKeyChecking=no "$SCHEMA_FILE" "root@${server_host}:/tmp/ia_context_schema.sql" 2>&1; then echo -e "${RED} ❌ ${server_name}: Error copiando archivo${NC}" return 1 fi echo " → Ejecutando SQL en PostgreSQL remoto..." if ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "root@${server_host}" \ "sudo -u postgres psql -f /tmp/ia_context_schema.sql && rm /tmp/ia_context_schema.sql" 2>&1 | tee /tmp/deploy_${server_name}.log; then echo -e "${GREEN} ✅ ${server_name}: Deployment exitoso${NC}" return 0 else echo -e "${RED} ❌ ${server_name}: Error en deployment${NC}" cat /tmp/deploy_${server_name}.log return 1 fi fi } # Verificar que el schema existe if [ ! -f "$SCHEMA_FILE" ]; then echo -e "${RED}Error: No se encuentra el archivo de schema: ${SCHEMA_FILE}${NC}" exit 1 fi echo "Schema a desplegar: $SCHEMA_FILE" echo "" # Contadores total=0 success=0 failed=0 # Desplegar en architect (local) total=$((total + 1)) if deploy_to_server "architect" "localhost" "true"; then success=$((success + 1)) else failed=$((failed + 1)) fi echo "" # Desplegar en deck (remoto) total=$((total + 1)) echo "Verificando conectividad a deck..." if ssh -i "$SSH_KEY" -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@72.62.1.113 "echo 'OK'" &>/dev/null; then if deploy_to_server "deck" "72.62.1.113" "false"; then success=$((success + 1)) else failed=$((failed + 1)) fi else echo -e "${YELLOW} ⚠️ deck: Servidor no disponible (SSH connection refused)${NC}" failed=$((failed + 1)) fi echo "" # Desplegar en corp (remoto) total=$((total + 1)) if deploy_to_server "corp" "92.112.181.188" "false"; then success=$((success + 1)) else failed=$((failed + 1)) fi echo "" # Resumen echo "============================================================================" echo "RESUMEN DE DESPLIEGUE" echo "============================================================================" echo "Total servidores: $total" echo -e "${GREEN}Exitosos: $success${NC}" echo -e "${RED}Fallidos: $failed${NC}" echo "" if [ $success -eq $total ]; then echo -e "${GREEN}✅ DEPLOYMENT COMPLETADO EXITOSAMENTE EN TODOS LOS SERVIDORES${NC}" exit 0 elif [ $success -gt 0 ]; then echo -e "${YELLOW}⚠️ DEPLOYMENT COMPLETADO CON ERRORES PARCIALES${NC}" exit 1 else echo -e "${RED}❌ DEPLOYMENT FALLÓ EN TODOS LOS SERVIDORES${NC}" exit 1 fi