Naposledy aktivní 2 weeks ago

Erreur32's Avatar Erreur32 revidoval tento gist 2 weeks ago. Přejít na revizi

1 file changed, 144 insertions

watchtower_run_once.sh(vytvořil soubor)

@@ -0,0 +1,144 @@
1 + #!/bin/bash
2 +
3 + # ============================================================
4 + # Script : watchtower_run_once.sh
5 + # Description : Watchtower en exécution unique avec logs + SMTP + COULEURS
6 + # Auteur : Erreur32 (optimisé)
7 + # ============================================================
8 +
9 + # Force terminal colors
10 + export TERM=xterm-256color
11 +
12 + # ========== COULEURS ANSI ==========
13 + RED='\033[0;31m'
14 + GREEN='\033[0;32m'
15 + YELLOW='\033[1;33m'
16 + BLUE='\033[0;34m'
17 + CYAN='\033[0;36m'
18 + BOLD='\033[1m'
19 + NC='\033[0m' # No Color
20 +
21 + # Helper functions pour logs colorés
22 + log_both() {
23 + local COLOR="$1"
24 + local MSG="$2"
25 + # Terminal avec couleur
26 + echo -e "${COLOR}${MSG}${NC}"
27 + # Fichier sans couleur
28 + echo -e "${MSG}" | sed 's/\x1b\[[0-9;]*m//g' >> "$LOG_FILE"
29 + }
30 +
31 + log_divider() {
32 + echo -e "${CYAN}${BOLD}────────────────────────────────────────────${NC}" | tee -a "$LOG_FILE"
33 + }
34 +
35 + # --------VARIABLES CONFIG--------
36 + SMTP_USER="myoueb"
37 + SMTP_DOMAIN="echosystem.fr"
38 + SMTP_PASS="vIVC2ouz36SwgWfWSoAO32"
39 + SMTP_SERVER="ssl0.ovh.net"
40 + SMTP_PORT="587"
41 + SMTP_FROM="${SMTP_USER}@${SMTP_DOMAIN}"
42 + SMTP_TO="${SMTP_USER}@${SMTP_DOMAIN}"
43 + SMTP_STARTTLS="yes"
44 +
45 + WATCHTOWER_HOSTNAME="watchtower.MYOUEB.local"
46 +
47 + LOG_PATH="/home/docker/watchtower/log"
48 + DOCKER_IMAGE="nickfedor/watchtower:latest"
49 + API_VERSION="1.44"
50 +
51 + mkdir -p "$LOG_PATH"
52 +
53 + # --------FONCTION PRINCIPALE--------
54 + function watchtower_cron() {
55 +
56 + # Fichier de log horodaté
57 + LOG_FILE="${LOG_PATH}/cron-$(date '+%Y-%m-%d-%Hh%M').txt"
58 +
59 + # Header coloré
60 + log_both "${BOLD}${CYAN}" "╔════════════════════════════════════════════╗"
61 + log_both "${BOLD}${CYAN}" "║ Watchtower Run Once ║"
62 + log_both "${BOLD}${CYAN}" "╚════════════════════════════════════════════╝"
63 +
64 + log_both "" "Date : $(date)"
65 + log_both "${CYAN}" "Log : $LOG_FILE"
66 + log_divider
67 +
68 + # Mise à jour de l'image
69 + echo "[*] Pulling latest Watchtower image..." | tee -a "$LOG_FILE"
70 + docker pull "$DOCKER_IMAGE" >/dev/null 2>&1
71 + echo "✅ Done" | tee -a "$LOG_FILE"
72 + log_divider
73 +
74 + log_both "${BLUE}" "[*] Running Watchtower scan..."
75 + echo " (Using --label-enable to respect labels)" | tee -a "$LOG_FILE"
76 + echo " (Containers with label com.centurylinklabs.watchtower.enable=false will be excluded)" | tee -a "$LOG_FILE"
77 +
78 + # Exécution Watchtower avec --label-enable
79 + docker run --rm \
80 + -v /var/run/docker.sock:/var/run/docker.sock \
81 + --hostname "${WATCHTOWER_HOSTNAME}" \
82 + "$DOCKER_IMAGE" \
83 + --api-version="$API_VERSION" \
84 + --run-once \
85 + --label-enable \
86 + --notification-url="smtp://${SMTP_USER}%40${SMTP_DOMAIN}:${SMTP_PASS}@${SMTP_SERVER}:${SMTP_PORT}/?from=${SMTP_FROM}&to=${SMTP_TO}&starttls=${SMTP_STARTTLS}" \
87 + --notifications-level=debug \
88 + 2>&1 | tee -a "$LOG_FILE"
89 +
90 + log_divider
91 +
92 + # Analyse des résultats
93 + RESULT=$(grep -Eo "Failed=[0-9]+|Scanned=[0-9]+|Updated=[0-9]+" "$LOG_FILE")
94 + FAILED=$(echo "$RESULT" | grep "Failed=" | cut -d= -f2)
95 + SCANNED=$(echo "$RESULT" | grep "Scanned=" | cut -d= -f2)
96 + UPDATED=$(echo "$RESULT" | grep "Updated=" | cut -d= -f2)
97 +
98 + # Sécurisation valeurs vides
99 + FAILED=${FAILED:-0}
100 + SCANNED=${SCANNED:-0}
101 + UPDATED=${UPDATED:-0}
102 +
103 + # Affichage résumé coloré
104 + log_both "${BOLD}${CYAN}" "RÉSUMÉ"
105 + log_both "${WHITE}" " Scannés : ${BOLD}$SCANNED${NC}${WHITE}"
106 +
107 + if [[ "$UPDATED" -gt 0 ]]; then
108 + log_both "${BOLD}${GREEN}" " ✅ Mis à jour : ${BOLD}$UPDATED${NC}${GREEN}"
109 + STATUS="SUCCESS"
110 + else
111 + log_both "${YELLOW}" " ℹ️ Mis à jour : ${BOLD}$UPDATED${NC}${YELLOW}"
112 + STATUS="NO_UPDATES"
113 + fi
114 +
115 + if [[ "$FAILED" -eq 0 ]]; then
116 + log_both "${GREEN}" " ❌ Échoués : ${BOLD}0${NC}${GREEN}"
117 + else
118 + log_both "${RED}" " ❌ Échoués : ${BOLD}$FAILED${NC}${RED}"
119 + STATUS="ERROR"
120 + fi
121 +
122 + log_divider
123 +
124 + # Nettoyage : uniquement si mise à jour
125 + if [[ "$UPDATED" -gt 0 ]]; then
126 + echo "[*] Cleaning up unused images..." | tee -a "$LOG_FILE"
127 + docker image prune -af >/dev/null 2>&1
128 + docker volume prune -f >/dev/null 2>&1
129 + log_both "${GREEN}" "✅ Cleanup done"
130 + echo "Nettoyage effectué (car mises à jour détectées)." >> "$LOG_FILE"
131 + else
132 + log_both "${YELLOW}" "⊘ No cleanup (no updates)"
133 + echo "Pas de nettoyage (aucune mise à jour)." >> "$LOG_FILE"
134 + fi
135 +
136 + log_divider
137 + log_both "${BOLD}${GREEN}" "✨ Status final : $STATUS"
138 + echo "---------------------------" >> "$LOG_FILE"
139 + echo "Status final : $STATUS" >> "$LOG_FILE"
140 + echo "Fin à : $(date)" >> "$LOG_FILE"
141 + log_both "${CYAN}" "Log saved --> $LOG_FILE"
142 + }
143 +
144 + watchtower_cron
Novější Starší