From c47f4c2e4c6d8bbb1f63700cc9f1d4d702c9afe5 Mon Sep 17 00:00:00 2001 From: Cesar Jhoanny Mendivil Rubio Date: Wed, 1 Oct 2025 16:47:39 -0700 Subject: [PATCH] tools: add helper to inspect and repair libretime_config volume --- scripts/fix-config-volume.sh | 79 ++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 scripts/fix-config-volume.sh diff --git a/scripts/fix-config-volume.sh b/scripts/fix-config-volume.sh new file mode 100644 index 000000000..3a124d48b --- /dev/null +++ b/scripts/fix-config-volume.sh @@ -0,0 +1,79 @@ +#!/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:-}" + +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 =="