Ajout script check_git
This commit is contained in:
parent
e28e407cdd
commit
73d64e1ff1
126
conf/usr/local/sbin/check_git
Executable file
126
conf/usr/local/sbin/check_git
Executable file
@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
################################################################################
|
||||
|
||||
# Script permettant de vérifier la cohérence entre des depôts Git clonés
|
||||
# et les fichiers présents sur le système
|
||||
|
||||
################################################################################
|
||||
|
||||
# Copyright © 2019-2020 Alban Vidal - zordhak@debian.org
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
################################################################################
|
||||
|
||||
# Vérifie sur le fichier listant les repo existe, sinon échec
|
||||
# TODO : Mettre à jour le README et expliquer un peu comment fonctionne ce check
|
||||
if [ ! -f /etc/zorval/liste_repo_check_git ] ; then
|
||||
echo "ERREUR, le fichier /etc/zorval/liste_repo_check_git n'existe pas"
|
||||
echo "Merci de faire un tour sur le dépôt Git suivant :"
|
||||
echo "https://framagit.org/zorval/scripts/check-nrpe"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
|
||||
RETURN_CODE=0
|
||||
EXIT_MESSAGE=""
|
||||
|
||||
################################################################################
|
||||
|
||||
# Pour chaque repo :
|
||||
# - Partie n°1 : git status
|
||||
# - Partie n°2 : boucle pour checker chaque fichier
|
||||
# - Partie n°3 : boucle pour checker les liens symboliques
|
||||
|
||||
while read REPO ; do
|
||||
|
||||
# Test si le répertoire existe ou non
|
||||
if [ ! -d $REPO ] ; then
|
||||
RETURN_CODE=1
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n- HS ${REPO} -> n'existe pas\n"
|
||||
continue # Passage à l'occurence suivante (le check de ce repo est ignoré)
|
||||
fi
|
||||
|
||||
# On retire l'éventuel '/' à la fin de $REPO, sinon le check ne fonctionne pas
|
||||
REPO=${REPO%/}
|
||||
|
||||
#------------------------------------------------------------#
|
||||
# Partie n° 1 - git pull et status
|
||||
cd $REPO
|
||||
# pull désactivé car l'utilisateur 'nagios' n'a pas les droits pour puller
|
||||
#git pull > /dev/null 2>&1
|
||||
OUTPUT=$(git status --porcelain)
|
||||
# Si 'git status' renvoie quelque chose -> Warning
|
||||
if [ ! -z "$OUTPUT" ]; then
|
||||
RETURN_CODE=1
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n- HS ${REPO} -> 'git status' incorrect."
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n${OUTPUT}"
|
||||
else
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n- OK ${REPO}"
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------#
|
||||
# Partie n°2 : boucle pour checker chaque fichier
|
||||
FILES=$(find $REPO -type f) # Liste des fichiers dans le dépot
|
||||
|
||||
# Pour chaque fichier
|
||||
IFS=$'\n'
|
||||
for FILE in $FILES; do
|
||||
# On fait un sha1sum dans le repo git
|
||||
REPO_SHA1SUM=$(sha1sum $FILE | awk '{print $1}')
|
||||
FILE=$(echo $FILE | sed "s,$REPO,,")
|
||||
# Si le fichier existe dans /
|
||||
if [ -f $FILE ]; then
|
||||
# On fait un sha1sum du fichier dans /
|
||||
LOCAL_SHA1SUM=$(sha1sum $FILE | awk '{print $1}')
|
||||
# Si le sha1sum est différent, les fichiers sont différents
|
||||
if [ "$REPO_SHA1SUM" != "$LOCAL_SHA1SUM" ]; then
|
||||
RETURN_CODE=1
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n diff ${FILE#/} $FILE"
|
||||
fi
|
||||
# Sinon s'il n'existe pas
|
||||
else
|
||||
RETURN_CODE=1
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n Absent : $FILE"
|
||||
fi
|
||||
done
|
||||
|
||||
#------------------------------------------------------------#
|
||||
# Partie n°3 : Vérification des liens symboliques présents dans le dépôt
|
||||
LN_REPO=$(find $REPO -type l) # Liste des liens symboliques dans le dépôt
|
||||
for LN in $LN_REPO ; do
|
||||
# On vérifie si il existe en local
|
||||
LN=$(echo $LN | sed "s,$REPO,,")
|
||||
# Test si il existe ou non en local
|
||||
if [ ! -L $LN ] ; then
|
||||
RETURN_CODE=1
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n Lien absent : $LN"
|
||||
fi
|
||||
done
|
||||
|
||||
EXIT_MESSAGE="${EXIT_MESSAGE}\n" # Ajoute à retour à la ligne à la fin du check d'un dépôt
|
||||
|
||||
done < /etc/zorval/liste_repo_check_git
|
||||
|
||||
################################################################################
|
||||
|
||||
if [ $RETURN_CODE -eq 0 ] ; then
|
||||
echo -e "Git OK\n${EXIT_MESSAGE}"
|
||||
else
|
||||
echo -e "Git ERROR\n${EXIT_MESSAGE}"
|
||||
fi
|
||||
|
||||
exit $RETURN_CODE
|
Loading…
Reference in New Issue
Block a user