Modif script migration pour facilier reprise sur erreur

This commit is contained in:
Emmanuel Viennet 2021-11-22 22:39:05 +01:00
parent 5e2e36cfab
commit 502f6a9277
3 changed files with 76 additions and 36 deletions

View File

@ -1,7 +1,7 @@
# -*- mode: python -*- # -*- mode: python -*-
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
SCOVERSION = "9.0.65" SCOVERSION = "9.0.66"
SCONAME = "ScoDoc" SCONAME = "ScoDoc"

View File

@ -66,7 +66,8 @@ def make_shell_context():
@app.cli.command() @app.cli.command()
def sco_db_init(): # sco-db-init @click.option("--erase/--no-erase", default=False)
def sco_db_init(erase=False): # sco-db-init
"""Initialize the database. """Initialize the database.
Starts from an existing database and create all Starts from an existing database and create all
the necessary SQL tables and functions. the necessary SQL tables and functions.
@ -76,7 +77,7 @@ def sco_db_init(): # sco-db-init
"""La variable SCODOC_ADMIN_MAIL n'est pas positionnée: vérifier votre .env""" """La variable SCODOC_ADMIN_MAIL n'est pas positionnée: vérifier votre .env"""
) )
return 100 return 100
initialize_scodoc_database() initialize_scodoc_database(erase=erase)
@app.cli.command() @app.cli.command()

View File

@ -30,41 +30,72 @@ usage() {
echo "Ce script doit être lancé en tant que root sur le nouveau" echo "Ce script doit être lancé en tant que root sur le nouveau"
echo "serveur ScoDoc 9 / Debian 11." echo "serveur ScoDoc 9 / Debian 11."
echo echo
echo "Usage: $0 archive" echo "Usage: $0 [-h] [-m] [-z] archive"
echo " ou $0 -m"
echo echo
echo " archive doit être un répertoire exporté via save_scodoc7_data.sh" echo " archive doit être un répertoire exporté via save_scodoc7_data.sh"
echo " sur le serveur ScoDoc 7" echo " sur le serveur ScoDoc 7"
echo " Avec l'option -m, effectue une migration \"en place\"" echo " Options:"
echo " avec import des données ScoDoc 7 qui étaient sur cette même" echo " -m"
echo " machine." echo " effectue une migration \"en place\""
echo " Dans ce cas, le répertoire /opt/scodoc DOIT avoir été renommé" echo " avec import des données ScoDoc 7 qui étaient sur cette même"
echo " /opt/scodoc7" echo " machine."
echo " AVANT l'installation de ScoDoc 9." echo " Dans ce cas, le répertoire /opt/scodoc DOIT avoir été renommé"
echo echo " /opt/scodoc7"
echo " AVANT l'installation de ScoDoc 9."
echo
echo " -z"
echo " efface la base existante, utilise le scodoc-data existant sans"
echo " l'effacer et tolère les fichiers manquants dans la source."
echo " Utilisée pour reprendre une migration interrompue."
exit 1 exit 1
} }
if [ ! $# -eq 1 ]
then INPLACE=0
RESTART=0
while getopts "hmz" opt; do
case "$opt" in
h)
usage usage
fi ;;
if [ "$1" == "-h" ] || [ "$1" == "--help" ] m)
then
usage
fi
if [ "$1" == "-m" ]
then
echo "Migration en place" echo "Migration en place"
INPLACE=1 INPLACE=1
SCODOC7_HOME=/opt/scodoc7 SCODOC7_HOME=/opt/scodoc7
# vérifie que ScoDoc7 est bien arrêté: # vérifie que ScoDoc7 est bien arrêté:
systemctl is-active scodoc >& /dev/null && systemctl stop scodoc systemctl is-active scodoc >& /dev/null && systemctl stop scodoc
else ;;
z)
echo "Mode reprise sur erreur"
RESTART=1
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
shift "$((OPTIND - 1))"
if [ "$INPLACE" = "0" ]
then
echo "Migration depuis archive $1" echo "Migration depuis archive $1"
INPLACE=0
SCODOC7_HOME="$1" # racine de l'archive importée SCODOC7_HOME="$1" # racine de l'archive importée
fi fi
# --- 0. En mode reprise, efface la base de données. En effet, les base d'origine ne sont pas
# effacées par le script de migration, et en cas d'erreur en cours d'import, il est plus
# sûr de repartir de zéro.
if [ "$RESTART" = "1" ]
then
echo "Efface la base existante"
su -c "(cd /opt/scodoc && source venv/bin/activate && flask sco-db-init --erase)" "$SCODOC_USER" || die "Erreur: sco-db-init"
fi
# --- 1. Vérifie qu'aucun des départements à importer n'existe déjà # --- 1. Vérifie qu'aucun des départements à importer n'existe déjà
check_existing_depts() { check_existing_depts() {
sco7_depts="" sco7_depts=""
@ -115,22 +146,28 @@ migrate_database_ownership() {
migrate_local_files() { migrate_local_files() {
echo "Déplacement des fichiers de configuration et des archives" echo "Déplacement des fichiers de configuration et des archives"
SCODOC_VAR_DIR_BACKUP="$SCODOC_VAR_DIR".bak if [ "$RESTART" = "0" ] # ne le fait pas en mode "reprise"
if [ -e "$SCODOC_VAR_DIR_BACKUP" ]
then then
die "supprimer ou déplacer $SCODOC_VAR_DIR_BACKUP avant de continuer" SCODOC_VAR_DIR_BACKUP="$SCODOC_VAR_DIR".bak
if [ -e "$SCODOC_VAR_DIR_BACKUP" ]
then
die "supprimer ou déplacer $SCODOC_VAR_DIR_BACKUP avant de continuer"
fi
if [ -e "$SCODOC_VAR_DIR" ]
then
echo " renomme $SCODOC_VAR_DIR en $SCODOC_VAR_DIR_BACKUP"
mv "$SCODOC_VAR_DIR" "$SCODOC_VAR_DIR_BACKUP"
fi
mkdir "$SCODOC_VAR_DIR" || die "erreur creation repertoire"
fi fi
if [ -e "$SCODOC_VAR_DIR" ] if [ $(ls "${SCODOC7_HOME}/var/scodoc" | wc -l) -ne 0 ]
then then
echo " renomme $SCODOC_VAR_DIR en $SCODOC_VAR_DIR_BACKUP" echo " déplace ${SCODOC7_HOME}/var/scodoc/ dans $SCODOC_VAR_DIR..."
mv "$SCODOC_VAR_DIR" "$SCODOC_VAR_DIR_BACKUP" mv "${SCODOC7_HOME}"/var/scodoc/* "$SCODOC_VAR_DIR" || die "migrate_local_files failed"
fi fi
mkdir "$SCODOC_VAR_DIR" || die "erreur creation repertoire"
echo " déplace ${SCODOC7_HOME}/var/scodoc/ dans $SCODOC_VAR_DIR..."
mv "${SCODOC7_HOME}"/var/scodoc/* "$SCODOC_VAR_DIR" || die "migrate_local_files failed"
# Récupère le .env: normalement ./opt/scodoc/.env est un lien vers # Récupère le .env: normalement ./opt/scodoc/.env est un lien vers
# /opt/scodoc-data/.env # /opt/scodoc-data/.env
# sauf si installation non standard (developeurs) avec .env réelement dans /opt/scodoc # sauf si installation non standard (developeurs) avec .env réellement dans /opt/scodoc
if [ -L "$SCODOC_DIR"/.env ] if [ -L "$SCODOC_DIR"/.env ]
then then
cp -p "$SCODOC_VAR_DIR_BACKUP"/.env "$SCODOC_VAR_DIR" || die "fichier .env manquant dans l'ancien $SCODOC_VAR_DIR !" cp -p "$SCODOC_VAR_DIR_BACKUP"/.env "$SCODOC_VAR_DIR" || die "fichier .env manquant dans l'ancien $SCODOC_VAR_DIR !"
@ -144,8 +181,10 @@ migrate_local_files() {
old_logs_dest="$SCODOC_VAR_DIR/log/scodoc7" old_logs_dest="$SCODOC_VAR_DIR/log/scodoc7"
echo "Copie des anciens logs ScoDoc 7 dans $old_logs_dest" echo "Copie des anciens logs ScoDoc 7 dans $old_logs_dest"
mkdir -p "$old_logs_dest" || die "erreur creation $old_logs_dest" mkdir -p "$old_logs_dest" || die "erreur creation $old_logs_dest"
mv "${SCODOC7_HOME}"/log/* "$old_logs_dest" || die "erreur mv" if [ $(ls "${SCODOC7_HOME}/log" | wc -l) -ne 0 ]
then
mv "${SCODOC7_HOME}"/log/* "$old_logs_dest" || die "erreur mv"
fi
# Le fichier de customization local: # Le fichier de customization local:
# peut être dans .../var/config/scodoc_local.py # peut être dans .../var/config/scodoc_local.py
# ou bien, sur les très anciennes installs, dans Products/ScoDoc/config/scodoc_config.py # ou bien, sur les très anciennes installs, dans Products/ScoDoc/config/scodoc_config.py