Gestions d'erreurs du conteneur

This commit is contained in:
Maniack Crudelis 2016-12-10 17:02:31 +01:00
parent 621e7d1784
commit e46e9da61b
2 changed files with 87 additions and 38 deletions

View file

@ -23,25 +23,47 @@ LXC_INIT () {
LXC_START () {
if [ "$no_lxc" -eq 0 ]
then
# Démarrage de la machine
sudo lxc-start -n $LXC_NAME -d | tee -a "$RESULT" 2>&1
for i in `seq 1 10`
do # Vérifie que la machine est accessible en ssh avant de commencer. Il lui faut le temps de démarrer.
echo -n .
if ssh $ARG_SSH $LXC_NAME "exit 0" > /dev/null 2>&1; then
break
for i in `seq 1 3`
do # Tente jusqu'à 3 fois de démarrer le conteneur
# Démarrage de la machine
sudo lxc-start -n $LXC_NAME -d | tee -a "$RESULT" 2>&1
for j in `seq 1 10`
do # Vérifie que la machine est accessible en ssh avant de commencer. Il lui faut le temps de démarrer.
echo -n .
if ssh $ARG_SSH $LXC_NAME "exit 0" > /dev/null 2>&1; then
break
fi
sleep 1
done
failstart=0
sudo lxc-ls -f | grep $LXC_NAME | sed 's/- NO//'
if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -ne 0 ]; then
ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\n" "lred" "bold"
failstart=1
if [ "$i" -ne 3 ]; then
echo "Redémarrage du conteneur..."
fi
LXC_STOP
elif ssh $ARG_SSH $LXC_NAME "ping -q -c 2 security.debian.org > /dev/null 2>&1; exit \$?"; then # Si le conteneur a démarré, test sa connectivité.
ECHO_FORMAT "Le conteneur ne parvient pas à accéder à internet...\n" "lred" "bold"
failstart=1
if [ "$i" -ne 3 ]; then
echo "Redémarrage du conteneur..."
fi
LXC_STOP
else
break # Sort de la boucle for si le démarrage est réussi
fi
if [ "$i" -eq 3 ] && [ "$failstart" -eq 1 ]; then # Si le dernier démarrage est encore en erreur, stoppe le test
ECHO_FORMAT "Le conteneur a rencontré des erreurs 3 fois de suite...\nSi le problème persiste, utilisez le script lxc_check.sh pour vérifier et réparer le conteneur." "lred" "bold"
return 1
fi
sleep 1
done
sudo lxc-ls -f | grep $LXC_NAME | sed 's/- NO//'
if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -ne 0 ]; then
ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\nSi le problème persiste, utilisez le script lxc_check.sh pour vérifier et réparer le conteneur." "lred" "bold"
return 1
fi
scp -rq "$APP_CHECK" "$LXC_NAME": >> "$RESULT" 2>&1
ssh $ARG_SSH $LXC_NAME "$1 > /dev/null 2>> debug_output.log; exit \$?" >> "$RESULT" 2>&1 # Exécute la commande dans la machine LXC
returncode=$?
sudo cat "/var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/debug_output.log" >> "$OUTPUTD" # Récupère le contenu du OUTPUTD distant pour le réinjecter dans le local
return "$?"
return $returncode
else # Sinon exécute la commande directement.
eval "$1" > /dev/null 2>> "$OUTPUTD"
fi

75
sub_scripts/testing_process.sh Normal file → Executable file
View file

@ -42,23 +42,27 @@ CHECK_URL () {
fi
echo -e "$IP_CURL $DOMAIN #package_check\n$IP_CURL $SOUS_DOMAIN #package_check" | sudo tee -a /etc/hosts > /dev/null # Renseigne le hosts pour le domain à tester, pour passer directement sur localhost
curl_error=0
for i in 0 1
http503=0
i=1
while [ "$i" -ne 3 ] # Tant que i vaut 1 ou 2, les tests continuent.
do # 2 passes, pour effectuer un test avec le / final, et un autre sans.
if [ "$i" -eq 0 ]; then # Test sans / final.
if [ "$i" -eq 1 ]; then # Test sans / final.
if [ "${CHECK_PATH:${#CHECK_PATH}-1}" == "/" ] # Si le dernier caractère est un /
then
MOD_CHECK_PATH="${CHECK_PATH:0:${#CHECK_PATH}-1}" # Supprime le /
else
MOD_CHECK_PATH=$CHECK_PATH
fi
i=2 # La prochaine boucle passera au 2e test
fi
if [ "$i" -eq 1 ]; then # Test avec / final.
if [ "$i" -eq 2 ]; then # Test avec / final.
if [ "${CHECK_PATH:${#CHECK_PATH}-1}" != "/" ] # Si le dernier caractère n'est pas un /
then
MOD_CHECK_PATH="$CHECK_PATH/" # Ajoute / à la fin du path
else
MOD_CHECK_PATH=$CHECK_PATH
fi
i=3 # La prochaine boucle terminera les tests
fi
rm -f "$script_dir/url_output" # Supprime le précédent fichier html si il est encore présent
curl -LksS -w "%{http_code};%{url_effective}\n" $SOUS_DOMAIN$MOD_CHECK_PATH -o "$script_dir/url_output" > "$script_dir/curl_print"
@ -76,6 +80,19 @@ CHECK_URL () {
then # Le code d'erreur 401 fait exception, si il y a 401 c'est en général l'application qui le renvoi. Donc l'install est bonne.
curl_error=1
fi
if [ "${HTTP_CODE}" = "503" ]
then # Le code d'erreur 503 indique que la ressource est temporairement indisponible. On va le croire pour cette fois et lui donner une autre chance.
curl_error=0
ECHO_FORMAT "Service temporairement indisponible...\n" "lyellow" "bold"
http503=$(( $http503 + 1 ))
if [ $http503 -eq 3 ]; then
curl_error=1 # Après 3 erreurs 503, le code est considéré définitivement comme une erreur
else
i=$(( $i - 1 )) # La boucle est décrémenté de 1 pour refaire le même test.
sleep 1 # Attend 1 seconde pour laisser le temps au service de se mettre en place.
continue # Retourne en début de boucle pour recommencer le test
fi
fi
fi
URL_TITLE=$(grep "<title>" "$script_dir/url_output" | cut -d '>' -f 2 | cut -d '<' -f1)
ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white"
@ -333,16 +350,20 @@ CHECK_UPGRADE () {
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold"
# Upgrade de l'app
COPY_LOG 1
LXC_START "sudo yunohost --debug app upgrade $APPID -f \"$APP_PATH_YUNO\""
YUNOHOST_RESULT=$?
COPY_LOG 2
LOG_EXTRACTOR
# Test l'accès à l'app
CHECK_URL
tnote=$((tnote+1))
if [ "$YUNOHOST_RESULT" -ne 0 ]; then
ECHO_FORMAT "\nInstallation échouée...\n" "lred" "bold"
else
ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold"
# Upgrade de l'app
COPY_LOG 1
LXC_START "sudo yunohost --debug app upgrade $APPID -f \"$APP_PATH_YUNO\""
YUNOHOST_RESULT=$?
COPY_LOG 2
LOG_EXTRACTOR
# Test l'accès à l'app
CHECK_URL
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$curl_error" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
@ -403,14 +424,18 @@ CHECK_BACKUP_RESTORE () {
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
ECHO_FORMAT "\nBackup de l'application...\n" "white" "bold"
# Backup de l'app
COPY_LOG 1
LXC_START "sudo yunohost --debug backup create -n Backup_test --apps $APPID --hooks $BACKUP_HOOKS"
YUNOHOST_RESULT=$?
COPY_LOG 2
LOG_EXTRACTOR
tnote=$((tnote+1))
if [ "$YUNOHOST_RESULT" -ne 0 ]; then
ECHO_FORMAT "\nInstallation échouée...\n" "lred" "bold"
else
ECHO_FORMAT "\nBackup de l'application...\n" "white" "bold"
# Backup de l'app
COPY_LOG 1
LXC_START "sudo yunohost --debug backup create -n Backup_test --apps $APPID --hooks $BACKUP_HOOKS"
YUNOHOST_RESULT=$?
COPY_LOG 2
LOG_EXTRACTOR
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
note=$((note+1))
@ -735,9 +760,11 @@ CHECK_COMMON_ERROR () {
LOG_EXTRACTOR
if [ "$1" == "incorrect_path" ] || [ "$1" == "port_already_use" ]; then
# Test l'accès à l'app
CHECK_URL
if [ "$curl_error" -ne 0 ]; then
YUNOHOST_RESULT=$curl_error
if [ "$YUNOHOST_RESULT" -eq 0 ]; then # Test l'url si l'installation à réussie.
CHECK_URL
if [ "$curl_error" -ne 0 ]; then
YUNOHOST_RESULT=$curl_error
fi
fi
fi
tnote=$((tnote+1))