#!/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 <> "$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 < /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 < /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"