diff --git a/README.MD b/README.MD index 833fa07..23df42c 100644 --- a/README.MD +++ b/README.MD @@ -30,3 +30,6 @@ Il va alterner toutes les 30 minutes (par défaut) les 2 conteneurs et rétablir ## demo_upgrade Ce script est placé en cron par demo_lxc_build. demo_upgrade vérifie chaque nuit les mises à jour sur les conteneurs, et les applique le cas échéant. Si nécessaire, il se charge également de refaire le snapshot. + +Pour effectuer des modifications pérennes sur les conteneurs, il est possible d'ajouter des scripts dans le dossier upgrade.d. Ces scripts seront exécutés après l'upgrade des packages dans chaque conteneur. +En cas d'échec d'exécution, le script sera mis de côté en attendant sa correction. Sinon, il sera archivé. diff --git a/demo_upgrade.sh b/demo_upgrade.sh index a8063c1..f8706bc 100755 --- a/demo_upgrade.sh +++ b/demo_upgrade.sh @@ -14,6 +14,7 @@ PLAGE_IP=$(cat "$script_dir/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2 TIME_TO_SWITCH=$(cat "$script_dir/demo_lxc_build.sh" | grep TIME_TO_SWITCH= | cut -d '=' -f2) IP_UPGRADE=$PLAGE_IP.150 +LOOP=0 UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot MACHINE=$1 @@ -50,6 +51,25 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot sudo lxc-attach -n $MACHINE -- apt-get autoremove sudo lxc-attach -n $MACHINE -- apt-get autoclean + # Exécution des scripts de upgrade.d + LOOP=$((LOOP + 1)) + ls -1 "$script_dir/upgrade.d" | while read LIGNE + do + if [ ! "$LIGNE" == "exemple" ] && [ ! "$LIGNE" == "old_scripts" ] && ! echo "$LIGNE" | grep -q ".fail$" # Le fichier exemple, le dossier old_scripts et les scripts fail sont ignorés + then + # Exécute chaque script trouvé dans upgrade.d + /bin/bash "$script_dir/upgrade.d/$LIGNE" $MACHINE + if [ "$?" -ne 0 ]; then # Si le script a échoué, le snapshot est annulé. + echo "Échec du script $LIGNE" + mv -f "$script_dir/upgrade.d/$LIGNE" "$script_dir/upgrade.d/$LIGNE.fail" + update_apt=0 + elif [ "$LOOP" -eq 2 ] + then # Après l'upgrade du 2e conteneur, déplace le script dans le dossier des anciens scripts si il a été exécuté avec succès. + mv -f "$script_dir/upgrade.d/$LIGNE" "$script_dir/upgrade.d/old_scripts/$LIGNE" + fi + fi + done + # Arrêt de la machine virtualisée sudo lxc-stop -n $MACHINE diff --git a/upgrade.d/exemple b/upgrade.d/exemple new file mode 100644 index 0000000..64b5d38 --- /dev/null +++ b/upgrade.d/exemple @@ -0,0 +1,13 @@ +#!/bin/bash + +# Ce script est un script d'exemple à dupliquer pour effectuer des modifications pérennes dans les conteneurs de demo. +# Le script n'est pas exécuté dans le conteneur, il convient donc d'utiliser lxc-attach pour opérer à l'intérieur. +# L'ensemble des scripts ajoutés ici seront exécutés lors de l'upgrade des conteneurs dans la nuit +# Toutefois, l'exécution sera loggée dans $script_dir/demo_upgrade.log + +# Récupère le dossier du script +if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi + +MACHINE=$1 # Nom du conteneur + +sudo lxc-attach -n $MACHINE -- echo coucou diff --git a/upgrade.d/old_scripts/.gitignore b/upgrade.d/old_scripts/.gitignore new file mode 100644 index 0000000..f0ff6f7 --- /dev/null +++ b/upgrade.d/old_scripts/.gitignore @@ -0,0 +1,3 @@ +*.swp +*~ +Notes