2016-08-12 17:35:14 +02:00
#!/bin/bash
2016-08-13 01:08:44 +02:00
# Script de switch entre les 2 conteneurs de demo.
# Ce script n'a vocation qu'a être dans un cron
2016-08-12 17:35:14 +02:00
# Récupère le dossier du script
2016-09-18 19:23:54 +02:00
if [ " ${ 0 : 0 : 1 } " = = "/" ] ; then script_dir = " $( dirname " $0 " ) " ; else script_dir = " $( echo $PWD /$( dirname " $0 " | cut -d '.' -f2) | sed 's@/$@@' ) " ; fi
2016-08-12 17:35:14 +02:00
2022-10-13 05:46:46 +02:00
source $script_dir /ynh_lxd
2022-11-05 20:15:50 +01:00
source $script_dir /ynh_lxd_demo
2022-10-13 05:46:46 +02:00
source /usr/share/yunohost/helpers
2016-09-18 19:23:54 +02:00
2022-10-13 05:46:46 +02:00
app = ${ __APP__ :- yunohost_demo }
final_path = $( ynh_app_setting_get --app= $app --key= final_path)
lxdbr_demo_network = $( ynh_app_setting_get --app= $app --key= lxdbr_demo_network)
lxc_ip1 = $( ynh_app_setting_get --app= $app --key= lxc_ip1)
lxc_ip2 = $( ynh_app_setting_get --app= $app --key= lxc_ip2)
lxc_name1 = $( ynh_app_setting_get --app= $app --key= lxc_name1)
lxc_name2 = $( ynh_app_setting_get --app= $app --key= lxc_name2)
2022-10-16 01:38:07 +02:00
domain = $( ynh_app_setting_get --app= $app --key= domain)
2022-10-13 05:46:46 +02:00
path_url = $( ynh_app_setting_get --app= $app --key= path)
log_line = $( wc -l " $final_path /demo_switch.log " | cut -d ' ' -f 1) # Repère la fin du log actuel. Pour récupérer les lignes ajoutées sur cette exécution.
2016-09-18 19:23:54 +02:00
log_line = $(( $log_line + 1 )) # Ignore la première ligne, reprise de l'ancien log.
2022-10-15 22:25:49 +02:00
date | tee -a " $final_path /demo_switch.log " 2>& 1
2022-10-16 01:38:07 +02:00
ynh_print_info --message= ">> Start switching demo." | tee -a " $final_path /demo_switch.log " 2>& 1
2016-09-18 19:23:54 +02:00
2022-10-13 05:46:46 +02:00
while test -e /var/lib/lxd/$lxc_name1 .lock_file* || test -e /var/lib/lxd/$lxc_name2 .lock_file*; do
2016-09-18 19:23:54 +02:00
sleep 5 # Attend que le conteneur soit libéré par les script upgrade ou switch, le cas échéant.
done
2016-08-12 17:35:14 +02:00
# Vérifie l'état des machines.
2022-10-13 05:46:46 +02:00
if ynh_lxc_is_started --name= $lxc_name1
2016-08-13 22:05:38 +02:00
then # Si la machine 1 est démarrée.
2022-10-13 05:46:46 +02:00
LXC_A = $lxc_name1
IP_A = " $lxdbr_demo_network $lxc_ip1 "
LXC_B = $lxc_name2
IP_B = " $lxdbr_demo_network $lxc_ip2 "
2016-08-12 17:35:14 +02:00
else # Sinon, on suppose que c'est la machine 2 qui est en cours.
2022-10-13 05:46:46 +02:00
LXC_A = $lxc_name2
IP_A = " $lxdbr_demo_network $lxc_ip2 "
LXC_B = $lxc_name1
IP_B = " $lxdbr_demo_network $lxc_ip1 "
2016-08-12 17:35:14 +02:00
# Si aucune machine ne tourne, la première démarrera.
fi
2020-06-24 11:27:11 +02:00
# Supprime les éventuels swap présents.
2022-10-13 05:46:46 +02:00
/sbin/swapoff /var/lib/lxd/$LXC_A /rootfs/swap_*
2020-06-24 11:27:11 +02:00
2022-10-15 22:47:40 +02:00
ynh_print_info --message= " > Starting $LXC_B "
2016-08-12 17:35:14 +02:00
# Démarre le conteneur B et arrête le conteneur A.
2022-11-05 20:15:50 +01:00
ynh_lxc_demo_start --name= $LXC_B --ip= $IP_B
2022-10-13 05:46:46 +02:00
sleep 5 # Attend 10 seconde pour s'assurer du démarrage de la machine.
if ! ynh_lxc_is_started --name= $LXC_B
2016-08-13 22:05:38 +02:00
then
2016-09-07 23:31:11 +02:00
# Le conteneur n'a pas réussi à démarrer. On averti un responsable par mail...
2022-10-15 22:47:40 +02:00
ynh_print_info --message= " > Échec du démarrage du conteneur $LXC_B sur le serveur de demo $DOMAIN ! \n\nExtrait du log:\n $( tail -n +$log_line " $final_path /demo_switch.log " ) \n\nLe script 'demo_restore_crash.sh' va être exécuté pour tenter de fixer l'erreur. " | mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR
2022-10-13 05:46:46 +02:00
/bin/bash $final_path /demo_restore_crash.sh &
2016-08-13 19:31:36 +02:00
exit 1
2016-08-12 17:35:14 +02:00
else
2022-10-15 22:47:40 +02:00
ynh_print_info --message= " > Stopping $LXC_A "
2016-08-16 15:36:12 +02:00
# Bascule sur le conteneur B avec le load balancing de nginx...
# Automatique par nginx lorsque la machine A sera éteinte.
2016-08-12 17:35:14 +02:00
# Arrêt du conteneur A. Il est remplacé par le B
2022-10-13 05:46:46 +02:00
touch /var/lib/lxd/$LXC_A .lock_fileS # Met en place un fichier pour indiquer que la machine n'est pas encore dispo.
2022-11-05 20:15:50 +01:00
ynh_lxc_demo_stop --name= $LXC_A
2019-12-31 13:12:05 +01:00
# Supprime les éventuels swap présents.
2022-10-13 05:46:46 +02:00
/sbin/swapoff /var/lib/lxd/$LXC_A /rootfs/swap_*
2022-10-15 22:47:40 +02:00
ynh_print_info --message= " > Restauring $LXC_A from snapshot "
2016-08-12 17:35:14 +02:00
# Restaure le snapshot de la machine A avant sa prochaine exécution
2022-11-05 20:15:50 +01:00
ynh_lxc_snapshot_load --name= $LXC_A --snapname= snap0
2022-10-13 05:46:46 +02:00
ynh_lxc_stop --name= $LXC_A
ynh_secure_remove --file= " /var/lib/lxd/ $LXC_A .lock_fileS " # Libère le lock
2022-10-15 22:47:40 +02:00
ynh_print_info --message= " > Finish restoring $LXC_A "
2016-08-12 17:35:14 +02:00
fi
2022-10-15 22:25:49 +02:00
date | tee -a " $final_path /demo_switch.log " 2>& 1
ynh_print_info --message= ">> Finished switching demo." | tee -a " $final_path /demo_switch.log " 2>& 1