From 9a1ea864fab190011df5259b89c02d8efe327fa3 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Fri, 21 Oct 2022 00:52:40 +0200 Subject: [PATCH] Merging helpers --- demo_restore_crash.sh | 1 - demo_start.sh | 1 - demo_stop.sh | 1 - demo_switch.sh | 1 - demo_upgrade.sh | 1 - ynh_lxd | 184 +++++++++++++++++++++++++++++++++++++++++- ynh_lxd_demo | 177 ---------------------------------------- 7 files changed, 180 insertions(+), 186 deletions(-) delete mode 100644 ynh_lxd_demo diff --git a/demo_restore_crash.sh b/demo_restore_crash.sh index a9236fe..3d5fb13 100755 --- a/demo_restore_crash.sh +++ b/demo_restore_crash.sh @@ -6,7 +6,6 @@ if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi source $script_dir/ynh_lxd -source $script_dir/ynh_lxd_demo source /usr/share/yunohost/helpers app=${__APP__:-yunohost_demo} diff --git a/demo_start.sh b/demo_start.sh index acb145c..a08675b 100755 --- a/demo_start.sh +++ b/demo_start.sh @@ -6,7 +6,6 @@ if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi source $script_dir/ynh_lxd -source $script_dir/ynh_lxd_demo source /usr/share/yunohost/helpers app=${__APP__:-yunohost_demo} diff --git a/demo_stop.sh b/demo_stop.sh index c9d9b20..bb9ba51 100755 --- a/demo_stop.sh +++ b/demo_stop.sh @@ -6,7 +6,6 @@ if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(ynh_print_info --message=$PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi source $script_dir/ynh_lxd -source $script_dir/ynh_lxd_demo source /usr/share/yunohost/helpers app=${__APP__:-yunohost_demo} diff --git a/demo_switch.sh b/demo_switch.sh index 771c8ce..05c2b56 100755 --- a/demo_switch.sh +++ b/demo_switch.sh @@ -7,7 +7,6 @@ if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi source $script_dir/ynh_lxd -source $script_dir/ynh_lxd_demo source /usr/share/yunohost/helpers app=${__APP__:-yunohost_demo} diff --git a/demo_upgrade.sh b/demo_upgrade.sh index 7150ca5..cde8987 100755 --- a/demo_upgrade.sh +++ b/demo_upgrade.sh @@ -7,7 +7,6 @@ if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi source $script_dir/ynh_lxd -source $script_dir/ynh_lxd_demo source /usr/share/yunohost/helpers app=${__APP__:-yunohost_demo} diff --git a/ynh_lxd b/ynh_lxd index 45478be..f6e35e2 100644 --- a/ynh_lxd +++ b/ynh_lxd @@ -1,7 +1,7 @@ #!/bin/bash #================================================= -# LXC helpers +# LXD HELPERS #================================================= # Check if a LXC container exists @@ -647,7 +647,7 @@ ynh_lxc_reset() { } #================================================= -# Logging helpers +# LOGGING HELPERS #================================================= readonly NORMAL=$(printf '\033[0m') @@ -723,7 +723,7 @@ function log_report_test_failed () { } #================================================= -# Timing helpers +# TIMING HELPERS #================================================= # Start a timer @@ -781,7 +781,7 @@ ynh_lxc_stop_timer() { } #================================================= -# PACKAGE_CHECK helpers +# PACKAGE_CHECK HELPERS #================================================= # ynh_lxd commands have to be launch with FOR_PACKAGE_CHECK=1 @@ -966,3 +966,179 @@ ynh_lxc_check_witness() { return 1 fi } + +#================================================= +# DEMO HELPERS +#================================================= + +# Start an LXC container in demo mode +# +# usage: ynh_lxc_start_as_demo --name=name --ip=ip +# | arg: -n, --name= - name of the LXC +# | arg: -n, --ip= - demo ip of the lxc +# +# Requires YunoHost version *.*.* or higher. +ynh_lxc_start_as_demo() { + # Declare an array to define the options of this helper. + local legacy_args=ni + local -A args_array=([n]=name= [i]=ip=) + local name + local ip + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + ynh_lxc_stop --name="$name" + lxc config device set $name eth1 ipv4.address $ip + _ynh_lxc_start_and_wait --name="$name" +} + +# Stop an LXC container in demo mode +# +# usage: ynh_lxc_stop_as_demo --name=name +# | arg: -n, --name= - name of the LXC +# +# Requires YunoHost version *.*.* or higher. +ynh_lxc_stop_as_demo() { + # Declare an array to define the options of this helper. + local legacy_args=n + local -A args_array=([n]=name=) + local name + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + ynh_lxc_stop --name="$name" + lxc config device unset $name eth1 ipv4.address +} + +# Upgrading demo container +# +# usage: ynh_lxc_upgrade_demo --name=name --time_to_switch=time_to_switch +# | arg: -n, --name= - name of the LXC +# | arg: -t, --time_to_switch= - time to switch +# +# Requires YunoHost version *.*.* or higher. +ynh_lxc_upgrade_demo() { + # Declare an array to define the options of this helper. + local legacy_args=nt + local -A args_array=([n]=name= [t]=time_to_switch=) + local name + local time_to_switch + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + ynh_print_info --message="Upgrading $name" + # Attend que la machine soit éteinte. + # Timeout à $time_to_switch +5 minutes, en seconde + TIME_OUT=$(($time_to_switch * 60 + 300)) + wait_period=0 + while ! ynh_lxc_is_stopped --name=$name + do + wait_period=$(($wait_period+10)) + if [ $wait_period -gt $TIME_OUT ];then + break + else + sleep 5 + fi + done + + while test -e /var/lib/lxd/$name.lock_fileS; do + sleep 5 # Attend que le conteneur soit libéré par le script switch. + done + + touch /var/lib/lxd/$name.lock_fileU # Met en place un fichier pour indiquer que la machine est indisponible pendant l'upgrade + + # Supprime les éventuels swap présents. + /sbin/swapoff /var/lib/lxd/$name/rootfs/swap_* + + # Restaure le snapshot + ynh_lxc_load_snapshot --name=$name --snapname=snap0 + + # Démarre le conteneur + date >> "$final_path/demo_boot.log" + + # Update + update_apt=0 + ynh_lxc_run_inside --name="$name" --command="apt-get update" + ynh_lxc_run_inside --name="$name" --command="apt-get dist-upgrade --dry-run | grep -q "^Inst " > /dev/null" # Vérifie si il y aura des mises à jour. + if [ "$?" -eq 0 ]; then + date + update_apt=1 + # Upgrade + ynh_lxc_run_inside --name="$name" --command="apt-get dist-upgrade --option Dpkg::Options::=--force-confold -yy" + # Clean + ynh_lxc_run_inside --name="$name" --command="apt-get autoremove -y" + ynh_lxc_run_inside --name="$name" --command="apt-get autoclean" + fi + ynh_lxc_run_inside --name="$name" --command="yunohost tools update" + ynh_lxc_run_inside --name="$name" --command="yunohost tools upgrade system" + + # Exécution des scripts de upgrade.d + LOOP=$((LOOP + 1)) + while read LIGNE + do + if [ ! "$LIGNE" == "exemple" ] && [ ! "$LIGNE" == "old_scripts" ] && [ ! "$LIGNE" == "Constant_upgrade" ] && ! echo "$LIGNE" | grep -q ".fail$" # Le fichier exemple, le dossier old_scripts et les scripts fail sont ignorés + then + date + # Exécute chaque script trouvé dans upgrade.d + ynh_print_info --message="Exécution du script $LIGNE sur le conteneur $name" + /bin/bash "$final_path/upgrade.d/$LIGNE" $name + if [ "$?" -ne 0 ]; then # Si le script a échoué, le snapshot est annulé. + ynh_print_info --message="Échec du script $LIGNE" + mv -f "$final_path/upgrade.d/$LIGNE" "$final_path/upgrade.d/$LIGNE.fail" + ynh_print_info --message="Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $name sur le serveur de demo $DOMAIN!\nLe script a été renommé en .fail, il ne sera plus exécuté tant que le préfixe ne sera pas retiré.\n\nExtrait du log:\n$(tail -n +$log_line "$script_dir/demo_upgrade.log")" | mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR + update_apt=0 + else + ynh_print_info --message="Le script $LIGNE a été exécuté sans erreur" + update_apt=1 + fi + fi + done <<< "$(ls -1 "$final_path/upgrade.d")" + + # Exécution des scripts de upgrade.d/Constant_upgrade + while read LIGNE + do + if [ "$update_apt" -eq "1" ] + then + date + # Exécute chaque script trouvé dans upgrade.d/Constant_upgrade + ynh_print_info --message="Exécution du script $LIGNE sur le conteneur $name" + /bin/bash "$final_path/upgrade.d/Constant_upgrade/$LIGNE" $name + if [ "$?" -ne 0 ]; then + ynh_print_info --message="Échec du script $LIGNE" + ynh_print_info --message="Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $name sur le serveur de demo $DOMAIN!\n" + else + ynh_print_info --message="Le script $LIGNE a été exécuté sans erreur" + fi + fi + done <<< "$(ls -1 "$final_path/upgrade.d/Constant_upgrade")" + + # Upgrade des apps + ynh_lxc_run_inside --name="$name" --command="yunohost tools update" + ynh_lxc_run_inside --name="$name" --command="systemctl restart nginx" + ynh_lxc_run_inside --name="$name" --command="yunohost tools upgrade apps" + ynh_lxc_run_inside --name="$name" --command="systemctl restart nginx" + + # Arrêt de la machine virtualisée + ynh_lxc_stop --name=$name + + if [ "$update_apt" -eq "1" ] + then + # Archivage du snapshot + ynh_exec_warn_less tar -cz --acls --xattrs -f /var/lib/lxd/snapshots/$name/snap0.tar.gz /var/lib/lxd/snapshots/$name/snap0 + # Remplacement du snapshot + ynh_lxc_create_snapshot --name=$name --snapname=snap0 + + if [ "$LOOP" -eq 2 ] + then # Après l'upgrade du 2e conteneur, déplace les scripts dans le dossier des anciens scripts si ils ont été exécutés avec succès. + ls -1 "$final_path/upgrade.d" | while read LIGNE + do + if [ ! "$LIGNE" == "exemple" ] && [ ! "$LIGNE" == "old_scripts" ] && [ ! "$LIGNE" == "Constant_upgrade" ] && ! echo "$LIGNE" | grep -q ".fail$" # Le fichier exemple, le dossier old_scripts et les scripts fail sont ignorés + then + mv -f "$final_path/upgrade.d/$LIGNE" "$final_path/upgrade.d/old_scripts/$LIGNE" + fi + done + fi + fi + ynh_secure_remove --file="/var/lib/lxd/$name.lock_fileU" # Libère le lock, la machine est à nouveau disponible + ynh_print_info --message="Finished upgrading $name" +} diff --git a/ynh_lxd_demo b/ynh_lxd_demo deleted file mode 100644 index 51a99db..0000000 --- a/ynh_lxd_demo +++ /dev/null @@ -1,177 +0,0 @@ -#!/bin/bash - -#================================================= -# Demo helpers -#================================================= - -# Start an LXC container in demo mode -# -# usage: ynh_lxc_start_as_demo --name=name --ip=ip -# | arg: -n, --name= - name of the LXC -# | arg: -n, --ip= - demo ip of the lxc -# -# Requires YunoHost version *.*.* or higher. -ynh_lxc_start_as_demo() { - # Declare an array to define the options of this helper. - local legacy_args=ni - local -A args_array=([n]=name= [i]=ip=) - local name - local ip - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - ynh_lxc_stop --name="$name" - lxc config device set $name eth1 ipv4.address $ip - _ynh_lxc_start_and_wait --name="$name" -} - -# Stop an LXC container in demo mode -# -# usage: ynh_lxc_stop_as_demo --name=name -# | arg: -n, --name= - name of the LXC -# -# Requires YunoHost version *.*.* or higher. -ynh_lxc_stop_as_demo() { - # Declare an array to define the options of this helper. - local legacy_args=n - local -A args_array=([n]=name=) - local name - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - ynh_lxc_stop --name="$name" - lxc config device unset $name eth1 ipv4.address -} - -# Upgrading demo container -# -# usage: ynh_lxc_upgrade_demo --name=name --time_to_switch=time_to_switch -# | arg: -n, --name= - name of the LXC -# | arg: -t, --time_to_switch= - time to switch -# -# Requires YunoHost version *.*.* or higher. -ynh_lxc_upgrade_demo() { - # Declare an array to define the options of this helper. - local legacy_args=nt - local -A args_array=([n]=name= [t]=time_to_switch=) - local name - local time_to_switch - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - ynh_print_info --message="Upgrading $name" - # Attend que la machine soit éteinte. - # Timeout à $time_to_switch +5 minutes, en seconde - TIME_OUT=$(($time_to_switch * 60 + 300)) - wait_period=0 - while ! ynh_lxc_is_stopped --name=$name - do - wait_period=$(($wait_period+10)) - if [ $wait_period -gt $TIME_OUT ];then - break - else - sleep 5 - fi - done - - while test -e /var/lib/lxd/$name.lock_fileS; do - sleep 5 # Attend que le conteneur soit libéré par le script switch. - done - - touch /var/lib/lxd/$name.lock_fileU # Met en place un fichier pour indiquer que la machine est indisponible pendant l'upgrade - - # Supprime les éventuels swap présents. - /sbin/swapoff /var/lib/lxd/$name/rootfs/swap_* - - # Restaure le snapshot - ynh_lxc_load_snapshot --name=$name --snapname=snap0 - - # Démarre le conteneur - date >> "$final_path/demo_boot.log" - - # Update - update_apt=0 - ynh_lxc_run_inside --name="$name" --command="apt-get update" - ynh_lxc_run_inside --name="$name" --command="apt-get dist-upgrade --dry-run | grep -q "^Inst " > /dev/null" # Vérifie si il y aura des mises à jour. - if [ "$?" -eq 0 ]; then - date - update_apt=1 - # Upgrade - ynh_lxc_run_inside --name="$name" --command="apt-get dist-upgrade --option Dpkg::Options::=--force-confold -yy" - # Clean - ynh_lxc_run_inside --name="$name" --command="apt-get autoremove -y" - ynh_lxc_run_inside --name="$name" --command="apt-get autoclean" - fi - ynh_lxc_run_inside --name="$name" --command="yunohost tools update" - ynh_lxc_run_inside --name="$name" --command="yunohost tools upgrade system" - - # Exécution des scripts de upgrade.d - LOOP=$((LOOP + 1)) - while read LIGNE - do - if [ ! "$LIGNE" == "exemple" ] && [ ! "$LIGNE" == "old_scripts" ] && [ ! "$LIGNE" == "Constant_upgrade" ] && ! echo "$LIGNE" | grep -q ".fail$" # Le fichier exemple, le dossier old_scripts et les scripts fail sont ignorés - then - date - # Exécute chaque script trouvé dans upgrade.d - ynh_print_info --message="Exécution du script $LIGNE sur le conteneur $name" - /bin/bash "$final_path/upgrade.d/$LIGNE" $name - if [ "$?" -ne 0 ]; then # Si le script a échoué, le snapshot est annulé. - ynh_print_info --message="Échec du script $LIGNE" - mv -f "$final_path/upgrade.d/$LIGNE" "$final_path/upgrade.d/$LIGNE.fail" - ynh_print_info --message="Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $name sur le serveur de demo $DOMAIN!\nLe script a été renommé en .fail, il ne sera plus exécuté tant que le préfixe ne sera pas retiré.\n\nExtrait du log:\n$(tail -n +$log_line "$script_dir/demo_upgrade.log")" | mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR - update_apt=0 - else - ynh_print_info --message="Le script $LIGNE a été exécuté sans erreur" - update_apt=1 - fi - fi - done <<< "$(ls -1 "$final_path/upgrade.d")" - - # Exécution des scripts de upgrade.d/Constant_upgrade - while read LIGNE - do - if [ "$update_apt" -eq "1" ] - then - date - # Exécute chaque script trouvé dans upgrade.d/Constant_upgrade - ynh_print_info --message="Exécution du script $LIGNE sur le conteneur $name" - /bin/bash "$final_path/upgrade.d/Constant_upgrade/$LIGNE" $name - if [ "$?" -ne 0 ]; then - ynh_print_info --message="Échec du script $LIGNE" - ynh_print_info --message="Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $name sur le serveur de demo $DOMAIN!\n" - else - ynh_print_info --message="Le script $LIGNE a été exécuté sans erreur" - fi - fi - done <<< "$(ls -1 "$final_path/upgrade.d/Constant_upgrade")" - - # Upgrade des apps - ynh_lxc_run_inside --name="$name" --command="yunohost tools update" - ynh_lxc_run_inside --name="$name" --command="systemctl restart nginx" - ynh_lxc_run_inside --name="$name" --command="yunohost tools upgrade apps" - ynh_lxc_run_inside --name="$name" --command="systemctl restart nginx" - - # Arrêt de la machine virtualisée - ynh_lxc_stop --name=$name - - if [ "$update_apt" -eq "1" ] - then - # Archivage du snapshot - ynh_exec_warn_less tar -cz --acls --xattrs -f /var/lib/lxd/snapshots/$name/snap0.tar.gz /var/lib/lxd/snapshots/$name/snap0 - # Remplacement du snapshot - ynh_lxc_create_snapshot --name=$name --snapname=snap0 - - if [ "$LOOP" -eq 2 ] - then # Après l'upgrade du 2e conteneur, déplace les scripts dans le dossier des anciens scripts si ils ont été exécutés avec succès. - ls -1 "$final_path/upgrade.d" | while read LIGNE - do - if [ ! "$LIGNE" == "exemple" ] && [ ! "$LIGNE" == "old_scripts" ] && [ ! "$LIGNE" == "Constant_upgrade" ] && ! echo "$LIGNE" | grep -q ".fail$" # Le fichier exemple, le dossier old_scripts et les scripts fail sont ignorés - then - mv -f "$final_path/upgrade.d/$LIGNE" "$final_path/upgrade.d/old_scripts/$LIGNE" - fi - done - fi - fi - ynh_secure_remove --file="/var/lib/lxd/$name.lock_fileU" # Libère le lock, la machine est à nouveau disponible - ynh_print_info --message="Finished upgrading $name" -}