#!/bin/bash # Colores para output GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color echo -e "${BLUE}==============================================${NC}" echo -e "${BLUE} ALICANTE CORE UPGRADER: V3.0/3.1 -> V3.2 ${NC}" echo -e "${BLUE}==============================================${NC}" # 1. Verificaciones previas REPO_DIR=$(pwd) if [ ! -f "$REPO_DIR/group_vars/all.yml" ]; then echo -e "${RED}[ERROR] No se encuentra group_vars/all.yml. Asegúrate de ejecutar esto en la raíz del repo 'alicante-infra'.${NC}" exit 1 fi echo -e "${YELLOW}[1/5] Creando backups de seguridad...${NC}" cp group_vars/all.yml group_vars/all.yml.bak.v3 cp roles/core/templates/docs-compose.j2 roles/core/templates/docs-compose.j2.bak.v3 if [ -f "deployment-checklist.sh" ]; then cp deployment-checklist.sh deployment-checklist.sh.bak.v3; fi echo -e "${GREEN}Backups creados con extensión .bak.v3${NC}" # 2. Actualizar Variables Globales echo -e "${YELLOW}[2/5] Inyectando configuración en group_vars/all.yml...${NC}" # Verificamos si ya existe para no duplicar if grep -q "carbone_port" group_vars/all.yml; then echo -e " Variable carbone_port ya existe. Saltando inyección." else cat <> group_vars/all.yml # --- ALICANTE CORE V3.2 CONFIGURATION --- # Carbone (Stack Docs) carbone_port: 4000 carbone_version: "4" carbone_image: "carbone/carbone" EOT echo -e "${GREEN} Variables de Carbone añadidas.${NC}" fi # 3. Actualizar Template docs-compose.j2 echo -e "${YELLOW}[3/5] Parcheando roles/core/templates/docs-compose.j2...${NC}" TEMPLATE_FILE="roles/core/templates/docs-compose.j2" # Definimos el bloque del servicio Carbone # NOTA: Usamos indentación de 2 espacios asumiendo estructura estándar docker-compose read -r -d '' CARBONE_SERVICE << EOM 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 EOM # Definimos los volúmenes read -r -d '' CARBONE_VOLUMES << EOM carbone_templates: carbone_output: EOM # Inserción inteligente usando sed # 1. Insertar servicio antes de la definición global de 'volumes:' if grep -q "container_name: carbone" "$TEMPLATE_FILE"; then echo -e " Servicio Carbone ya existe en el template. Saltando." else # Busca la línea que empieza exactamente con 'volumes:' e inserta el servicio antes sed -i "/^volumes:/i \\$CARBONE_SERVICE" "$TEMPLATE_FILE" # Busca la línea que empieza con 'volumes:' e inserta los volúmenes justo después sed -i "/^volumes:/a \\$CARBONE_VOLUMES" "$TEMPLATE_FILE" echo -e "${GREEN} Servicio y volúmenes inyectados en el template.${NC}" fi # 4. Actualizar Checklist y Docs echo -e "${YELLOW}[4/5] Actualizando scripts de mantenimiento...${NC}" if [ -f "deployment-checklist.sh" ]; then if ! grep -q "Carbone" "deployment-checklist.sh"; then # Insertar verificación antes de la función main o al final sed -i '/# Check Management Stack/i \ verify_service "Carbone" "4000"' deployment-checklist.sh echo -e "${GREEN} Checklist actualizado.${NC}" fi fi # Renombrar documentación principal si existe if [ -f "ALICANTE_CORE_V3.1_COMPLETE.md" ]; then mv ALICANTE_CORE_V3.1_COMPLETE.md ALICANTE_CORE_V3.2_COMPLETE.md echo -e "${GREEN} Documentación renombrada a V3.2.${NC}" fi # 5. Git Operations echo -e "${YELLOW}[5/5] Preparando Git...${NC}" echo -e "${BLUE}------------------------------------------------${NC}" echo -e "El código ha sido actualizado localmente." echo -e "Para aplicar los cambios, ejecuta los siguientes pasos:" echo -e "" echo -e "1. Revisa los cambios:" echo -e " ${YELLOW}git diff${NC}" echo -e "" echo -e "2. Sube los cambios al repo:" echo -e " ${YELLOW}git add .${NC}" echo -e " ${YELLOW}git commit -m \"Upgrade: Alicante Core V3.2 (Added Carbone)\"${NC}" echo -e " ${YELLOW}git push origin main${NC}" echo -e "" echo -e "3. Ve a Semaphore UI y ejecuta el Deploy." echo -e "${BLUE}------------------------------------------------${NC}"