alicante-infra/upgrade_v3.2_fix.sh

110 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# Colores
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}=== ALICANTE CORE UPGRADER V3.2 (FIXED) ===${NC}"
# 1. Definir archivo correcto (GRACIAS AL COMANDO TREE)
TEMPLATE_FILE="roles/core/templates/apps-docs-compose.j2"
GROUP_VARS="group_vars/all.yml"
# Verificar que existe el archivo objetivo
if [ ! -f "$TEMPLATE_FILE" ]; then
echo -e "${RED}[ERROR] No encuentro $TEMPLATE_FILE${NC}"
echo "Por favor, verifica que estás en /sc/alicante-infra"
exit 1
fi
# 2. Actualizar group_vars (Idempotente: verifica si ya está)
echo -e "${YELLOW}[1/3] Verificando variables globales...${NC}"
if grep -q "carbone_port" "$GROUP_VARS"; then
echo -e " ✅ Variables ya existen en group_vars/all.yml (del intento anterior)."
else
cat <<EOT >> "$GROUP_VARS"
# --- ALICANTE CORE V3.2 CONFIGURATION ---
# Carbone (Stack Docs)
carbone_port: 4000
carbone_version: "4"
carbone_image: "carbone/carbone"
EOT
echo -e " ✅ Variables añadidas."
fi
# 3. Inyectar Servicio Carbone (Método seguro con archivos temporales)
echo -e "${YELLOW}[2/3] Parcheando $TEMPLATE_FILE ...${NC}"
# Crear backup
cp "$TEMPLATE_FILE" "${TEMPLATE_FILE}.bak"
# Crear archivo temporal con el bloque del servicio
cat <<EOF > /tmp/carbone_service_block.yml
carbone:
image: "{{ carbone_image }}:{{ carbone_version }}"
container_name: carbone
restart: unless-stopped
ports:
- "{{ carbone_port }}:4000"
environment:
TZ: "{{ timezone }}"
volumes:
- carbone_templates:/app/templates
- carbone_output:/app/output
networks:
- docs_network
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:4000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
EOF
# Crear archivo temporal con los volúmenes
cat <<EOF > /tmp/carbone_volumes_block.yml
carbone_templates:
carbone_output:
EOF
# Lógica de inserción:
# 1. Si ya existe "container_name: carbone", no hacer nada.
# 2. Si no, usar AWK para insertar el bloque de servicio ANTES de la línea "volumes:"
# 3. Añadir los volúmenes al final del archivo.
if grep -q "container_name: carbone" "$TEMPLATE_FILE"; then
echo -e " ⚠️ El servicio Carbone ya parece estar en el template."
else
# Insertar servicio ANTES de la línea que empieza por 'volumes:'
awk 'NR==FNR{svc=$0; next} /^volumes:/{print svc} 1' /tmp/carbone_service_block.yml "$TEMPLATE_FILE" > "${TEMPLATE_FILE}.tmp" && mv "${TEMPLATE_FILE}.tmp" "$TEMPLATE_FILE"
# Añadir volúmenes al final del archivo (asumiendo que volumes: es el último bloque)
cat /tmp/carbone_volumes_block.yml >> "$TEMPLATE_FILE"
echo -e " ✅ Template actualizado correctamente."
fi
# Limpieza
rm -f /tmp/carbone_service_block.yml /tmp/carbone_volumes_block.yml
# 4. Actualizar Checklist
echo -e "${YELLOW}[3/3] Actualizando checklist...${NC}"
CHECKLIST="deployment-checklist.sh"
if [ -f "$CHECKLIST" ]; then
if ! grep -q "Carbone" "$CHECKLIST"; then
# Añadir check simple al final si no existe
echo 'verify_service "Carbone" "4000"' >> "$CHECKLIST"
echo -e " ✅ Checklist actualizado."
fi
fi
echo -e "${GREEN}=== ¡ACTUALIZACIÓN LOCAL COMPLETADA! ===${NC}"
echo -e "Ahora ejecuta:"
echo -e "1. git diff (para ver qué ha pasado)"
echo -e "2. git add . && git commit -m 'Fix: V3.2 upgrade paths' && git push"
echo -e "3. Despliega en Semaphore"