libretime/scripts/fix-config-volume.sh

80 lines
3.5 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Script helper: inspecciona el montaje de config y (opcionalmente) elimina y regenera
# Uso:
# bash scripts/fix-config-volume.sh # inspecciona y recrea config-generator
# bash scripts/fix-config-volume.sh --force-delete # detiene stack, borra volumen libretime_config y regenera
ROOT_DIR=$(cd "$(dirname "$0")/.." && pwd)
cd "$ROOT_DIR"
echo "== comprobar que docker existe =="
if ! command -v docker >/dev/null 2>&1; then
echo "ERROR: docker no encontrado en PATH. Instala/abre Docker Desktop y vuelve a intentarlo." >&2
exit 1
fi
echo "== docker compose ps =="
docker compose -f docker-compose.easypanel.yml ps || true
CID=$(docker compose -f docker-compose.easypanel.yml ps -q api || true)
echo "API CID: ${CID:-<no-cid>}"
if [ -n "${CID:-}" ]; then
echo "== mounts del contenedor api =="
docker inspect --format '{{json .Mounts}}' "$CID" | jq . || docker inspect --format '{{json .Mounts}}' "$CID" || true
echo "== contenido que ve la API en /etc/libretime =="
docker compose -f docker-compose.easypanel.yml exec api sh -c 'ls -la /etc/libretime || true; sed -n "1,200p" /etc/libretime/config.yml || true' || true
else
echo "Contenedor API no está en ejecución o no se encontró CID. Continuamos con otras comprobaciones."
fi
echo "== archivo local ./config.local.yml (si existe) =="
if [ -f ./config.local.yml ]; then
sed -n '1,200p' ./config.local.yml || true
else
echo "no existe ./config.local.yml"
fi
echo "== inspeccionar volumen libretime_config =="
docker run --rm -v libretime_config:/tmp alpine sh -c 'ls -la /tmp || true; sed -n "1,200p" /tmp/config.yml || true' || true
echo "== recrear config-generator (no-deps) para intentar generar config.yml =="
docker compose -f docker-compose.easypanel.yml up -d --no-deps --force-recreate config-generator || true
sleep 2
docker compose -f docker-compose.easypanel.yml logs --tail 200 config-generator || true
echo "== volver a inspeccionar volumen libretime_config =="
docker run --rm -v libretime_config:/tmp alpine sh -c 'ls -la /tmp || true; sed -n "1,200p" /tmp/config.yml || true' || true
if [ "${1:-}" = "--force-delete" ]; then
echo "\n== OPCIÓN: eliminar y regenerar el volumen libretime_config (se pide confirmación) =="
read -p "¿Deseas detener el stack y borrar el volumen libretime_config? (y/N): " confirm
if [ "$confirm" = "y" ]; then
echo "Deteniendo stack..."
docker compose -f docker-compose.easypanel.yml down || true
mkdir -p backups
echo "Haciendo backup (si existe) del config del volumen a ./backups/config.yml.bak"
docker run --rm -v libretime_config:/tmp -v "$(pwd)/backups":/backup alpine sh -c 'cp -a /tmp/config.yml /backup/config.yml.bak || true; ls -la /tmp || true' || true
echo "Eliminando volumen libretime_config..."
docker volume rm libretime_config || true
echo "Regenerando config-generator para crear un nuevo config.yml en el volumen limpio..."
docker compose -f docker-compose.easypanel.yml up -d --no-deps --force-recreate config-generator || true
sleep 2
docker compose -f docker-compose.easypanel.yml logs --tail 200 config-generator || true
echo "Contenido del nuevo volumen:"
docker run --rm -v libretime_config:/tmp alpine sh -c 'ls -la /tmp; sed -n "1,200p" /tmp/config.yml || true' || true
echo "Listo. Reinicia la API con: docker compose -f docker-compose.easypanel.yml up -d --no-deps --force-recreate api"
else
echo "Abandonado: no se eliminará el volumen."
fi
fi
echo "== fin del script =="