Last active 2 weeks ago

watchtower_run_once.sh Raw
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
10export TERM=xterm-256color
11
12# ========== COULEURS ANSI ==========
13RED='\033[0;31m'
14GREEN='\033[0;32m'
15YELLOW='\033[1;33m'
16BLUE='\033[0;34m'
17CYAN='\033[0;36m'
18BOLD='\033[1m'
19NC='\033[0m' # No Color
20
21# Helper functions pour logs colorés
22log_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
31log_divider() {
32 echo -e "${CYAN}${BOLD}────────────────────────────────────────────${NC}" | tee -a "$LOG_FILE"
33}
34
35# --------VARIABLES CONFIG--------
36SMTP_USER="myoueb"
37SMTP_DOMAIN="echosystem.fr"
38SMTP_PASS="vIVC2ouz36SwgWfWSoAO32"
39SMTP_SERVER="ssl0.ovh.net"
40SMTP_PORT="587"
41SMTP_FROM="${SMTP_USER}@${SMTP_DOMAIN}"
42SMTP_TO="${SMTP_USER}@${SMTP_DOMAIN}"
43SMTP_STARTTLS="yes"
44
45WATCHTOWER_HOSTNAME="watchtower.MYOUEB.local"
46
47LOG_PATH="/home/docker/watchtower/log"
48DOCKER_IMAGE="nickfedor/watchtower:latest"
49API_VERSION="1.44"
50
51mkdir -p "$LOG_PATH"
52
53# --------FONCTION PRINCIPALE--------
54function 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
144watchtower_cron