#!/bin/bash

leader_db_backup="/var/lib/one/backups/HA-Upgrade-Auto.sql"

if [ "$(CreoleGet eole_module)" = "hapy" ] && [ "$(CreoleGet activer_one_ha)" = "oui" ]
then
    # Procédure spéciale en partie manuelle si on est sur un module Hâpy en mode HA
    . /usr/lib/eole/ihm.sh
    EchoOrange "Vous êtes sur le point de monter en version un module Hâpy en mode HA."
    EchoOrange "Tous les membres du cluster doivent être traités de manière coordonnée."
    EchoOrange "1. Vérification qu’aucune VM ne soit dans un état transitoire (prolog, migr, epil, save),"
    EchoOrange "2. désactivation de la zone et des hôtes qui la composent,"
    EchoOrange "3. migration du serveur d’index 0 en position de leader avant les autres (base de données de référence) :"
    EchoOrange "\t3.1. première phase d’Upgrade-Auto avec montée de version de la base de données de référence"
    EchoOrange "\t3.2. extraction de la base de données et propagation manuelle de l’extraction sur les followers"
    EchoOrange "\t3.3. Upgrade-Auto des followers si ils ont la base de données à jour à disposition."

    Question_ouinon "Souhaitez-vous continuer ?"
    if [ ! $? = 0 ]; then
        EchoRouge "Annulation de la montée de version"
        exit 1
    fi

    if [ "$(CreoleGet one_ha_server_index)" != "0" ] && [ ! -f "${leader_db_backup}" ]
    then
        EchoRouge "Le nœud ne peut pas être mis à jour sans l’extaction de la base de référence."
        EchoRouge "Procéder d’abord à la première phase de l’Upgrade-Auto du nœud d’index 0 lorsqu’il est leader."
        exit 1
    fi

    EchoBleu "Test de l’état des VM"
    states="$(onevm list -l stat --no-header --no-pager | uniq)"
    if $(echo "$states" | grep -q -E -e "(clon)|(pend)|(prol)|(boot)|(migr)|(snap)|(save)|(epil)|(shut)|(drsz)|(back)|(rest)")
    then
        EchoRouge "Des VM ont un état incompatible avec la migration ; abandon de la procédure."
        exit 1
    else
        EchoVert "OK"
    fi

    EchoBleu "Vérification du rôle de l’hôte courant"
    current_leader=$(onezone show -j 0 | jq -r '.[].SERVER_POOL.SERVER | map(select(.STATE == "3")) | .[0].NAME')
    if [ "$current_leader" != "$(CreoleGet nom_machine)" ]
    then
        EchoRouge "Ce serveur n’est pas le leader actuel du cluster ; abandon de la procédure."
        exit 1
    else
        EchoVert "OK"
    fi

    EchoBleu "Désactivation de la zone et des hôtes"
    for cluster_host in $(CreoleGet one_nodes)
    do
        onehost disable $cluster_host
    done
    onezone disable 0

fi

exit 0
