From ffdd0e411281246a662dc3fd24aed14f3b75d482 Mon Sep 17 00:00:00 2001 From: alexandrev-tibco Date: Sat, 30 Aug 2025 16:16:41 +0200 Subject: [PATCH] +1 --- manage-lxc-vm-notes.sh | 53 +++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/manage-lxc-vm-notes.sh b/manage-lxc-vm-notes.sh index bab1816..4c6aaaa 100755 --- a/manage-lxc-vm-notes.sh +++ b/manage-lxc-vm-notes.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -e +# Ejecutar de forma tolerante a fallos por VM; no abortar todo el script. SUMMARY_LINES=() @@ -99,6 +99,20 @@ update_notes() { echo "[INFO] Procesando $type $vmid..." + # Ruta del archivo de configuración del contenedor (host) + local conf_path="/etc/pve/lxc/${vmid}.conf" + + # Sanear conf: comentar líneas mal formadas de notas previas (p. ej. "homepage : image") + # Solo afectamos patrones con espacio antes de los dos puntos, que no son válidos en PVE. + if [ -f "$conf_path" ]; then + if grep -qE '^[^#].*\s: ' "$conf_path"; then + echo "[WARN] $conf_path contiene líneas no válidas con ' : '. Comentándolas para restaurar parseo..." + sed -i -E 's/^([^#].*\s: .*)$/# \1/' "$conf_path" || true + fi + # Eliminar bloque anterior de notas comentadas si existe + sed -i '/^# Notes:/,$d' "$conf_path" || true + fi + # Detectar OS os=$(pct exec "$vmid" -- cat /etc/os-release 2>/dev/null | grep '^ID=' | cut -d= -f2 | tr -d '"') [ -z "$os" ] && echo "[WARN] No se pudo detectar OS para $type $vmid. Saltando." && return @@ -146,13 +160,13 @@ update_notes() { ;; esac - # Ejecutar comandos - pct exec "$vmid" -- sh -c "$update_cmd" - pct exec "$vmid" -- sh -c "$install_base_pkgs || true" - pct exec "$vmid" -- sh -c "$install_tailscale || true" - pct exec "$vmid" -- sh -c "$enable_docker" - pct exec "$vmid" -- sh -c "$enable_ssh" - pct exec "$vmid" -- sh -c "$enable_tailscale_check" + # Ejecutar comandos con tolerancia a errores (no romper el flujo) + pct exec "$vmid" -- sh -c "$update_cmd" || echo "[WARN] update falló en $type $vmid, continúo" + pct exec "$vmid" -- sh -c "$install_base_pkgs || true" || true + pct exec "$vmid" -- sh -c "$install_tailscale || true" || true + pct exec "$vmid" -- sh -c "$enable_docker" || echo "[WARN] no se pudo habilitar docker en $type $vmid" + pct exec "$vmid" -- sh -c "$enable_ssh" || echo "[WARN] no se pudo habilitar ssh en $type $vmid" + pct exec "$vmid" -- sh -c "$enable_tailscale_check" || true echo "[INFO] Verificando configuración del Docker API y métricas en $type $vmid..." WAIT_SECS_HOST="${DOCKER_WAIT_SECONDS:-30}" @@ -347,23 +361,24 @@ OVR docker_info_commented=$(printf "%s\n" "$docker_info" | sed "s/^/# /") full_note=$(printf "# Notes:\n# %s\n%s\n" "$tailscale_note" "$docker_info_commented") - # Añadir al archivo de configuración del contenedor - conf_path="/etc/pve/lxc/${vmid}.conf" - - # Eliminar notas anteriores si existen - sed -i '/^# Notes:/,$d' "$conf_path" - echo -e "$full_note" >> "$conf_path" - - echo "[INFO] Notas actualizadas en $conf_path:" + # Añadir notas al archivo de configuración del contenedor + if [ -f "$conf_path" ]; then + echo -e "$full_note" >> "$conf_path" + echo "[INFO] Notas actualizadas en $conf_path:" + else + echo "[WARN] No existe $conf_path; no se pueden escribir notas." + fi echo "$full_note" } echo "[INFO] Iniciando gestión automática de LXC..." -# Iterar sobre LXC activos +# Iterar sobre LXC activos (no detener por fallos puntuales) for vmid in $(pct list | awk 'NR>1 {print $1}'); do - update_notes "$vmid" "LXC" - collect_lxc_summary "$vmid" + if ! update_notes "$vmid" "LXC"; then + echo "[ERROR] Falló actualización de notas para LXC $vmid; continúo con el resto." + fi + collect_lxc_summary "$vmid" || echo "[WARN] No se pudo recoger resumen para LXC $vmid" done # VMs: intentar obtener IPs vía QEMU Guest Agent (si disponible)