Files
init.sh/lib/zzz_main_fct.sh

190 lines
6.6 KiB
Bash

# ------------------------------------------------------------------------------
# Base functions
# Copyright (c) 2019-2021 Geoffray Levasseur <fatalerrors@geoffray-levasseur.org>
# ------------------------------------------------------------------------------
# This file is distributed under 3-clause BSD license.
# The complete license agreement can be obtained at:
# https://opensource.org/licenses/BSD-3-Clause
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
# Read command line and set appropriate vars. Some basic checks can trigger
# errors with immediate exit.
read_commandline()
{
# Processing command line options
local want_module=false
local want_logfile=false
local want_conffile=false
for opt in $@; do
if [[ $want_module != true ]] && [[ $want_logfile != true ]] &&
[[ $want_conffile != true ]]; then
case $opt in
"-h"|"--help")
disp_help
exit 0
;;
"-v"|"--version")
show_version
exit 0
;;
"-m"|"--module")
local want_module=true
;;
"-c"|"--check-only")
export CHECK_ONLY=true
;;
"-j"|"--jump")
export JUMP=true
;;
"-k"|"--keep-going")
export KEEPGOING=true
;;
"-r"|"--resume")
if [[ -s $STAGE_FILE ]]; then
export RESUME=true
else
prnt E "Le fichier d'état n'existe pas ou est vide !"
prnt E "Sans ce fichier, la reprise n'est pas possible."
die 1 --force
fi
;;
"-R"|"--no-root-check")
export NO_ROOT_CHECK=true
;;
"-l"|"--logfile")
local want_logfile=true
;;
"-f"|"--file")
local want_conffile=true
;;
*)
prnt E "Paramètre \"$opt\" non géré."
die 1 --force
;;
esac
else
if [[ $want_module == true ]]; then
[[ $want_logfile == true ]] && synthax_error
[[ $want_conffile == true ]] && synthax_error
if [[ ! $MANUAL_MODULE_LIST ]]; then
export MANUAL_MODULE_LIST=$opt
want_module=false
else
prnt E "Une liste de module à déjà été fournie !"
prnt E "La ligne de commande ne tolère qu'un seul paramètre --module."
die 1 --force
fi
elif [[ $want_logfile == true ]]; then
[[ $want_module == true ]] && synthax_error
[[ $want_conffile == true ]] && synthax_error
if [[ ! $NEW_LOGFILE ]]; then
export NEW_LOGFILE=$opt
want_logfile=false
else
prnt E "Il n'est pas possible de spécifier plusieurs fichiers de log."
die 1 --force
fi
elif [[ $want_conffile == true ]]; then
[[ $want_module == true ]] && synthax_error
[[ $want_logfile == true ]] && synthax_error
export CONFFILES="$CONFFILES $opt"
want_logfile=false
fi
fi
done
# If those var are true at that point, something is wrong
if [[ $want_logfile == true ]] || [[ $want_module == true ]]; then
prnt E "Erreur de syntaxe dans la ligne de commande."
die 1
fi
}
export -f read_commandline
# ------------------------------------------------------------------------------
# Load configuration with the following priorities:
# 1) Those given on command line, if any
# 2) <workingdir>/conf/<hostname>.conf (Hostname based and specific)
# 3) <workingdir>/conf/init.conf.sh (Generic default)
load_configuration()
{
if [[ -n $CONFFILES ]]; then
for f in $CONFFILES; do
prnt I "Chargement de $f spécifié manuellement."
if [[ -s $f ]]; then
. $f
else
prnt E "Le fichier $f n'existe pas ou est vide."
die 6 --force
fi
done
else
prnt I "Chargement de la configuration..."
if [[ -e $MYPATH/conf/$HOSTNAME.conf ]]; then
prnt I "Une configuration spécifique sera utilisé."
. $MYPATH/conf/$HOSTNAME.conf
else
if [[ -e $MYPATH/conf/init.conf.sh ]]; then
prnt I "Une configuration générique sera utilisé."
. $MYPATH/conf/init.conf.sh
else
prnt E "Aucune configuration trouvée, impossible de continuer."
die 6 --force
fi
fi
fi
}
export -f load_configuration
# ------------------------------------------------------------------------------
# Do deeper command line analysis to detect unconsistancies
process_commandline_and_vars()
{
# Check unconsistant parameters
if [[ $CHECK_ONLY == true ]]; then
[[ $JUMP == true ]] && (
prnt E "Les options --check-only et --jump s'excluent mutuellement !"
die 1 --force
)
[[ $KEEPGOING == true ]] && (
prnt E "Les options --keep-going et --check-only sont incompatible !"
die 1 --force
)
fi
if [[ $RESUME == true ]]; then
[[ $CHECK_ONLY == true ]] && (
prnt E "La reprise n'a pas de sens avec --check-only."
die 1 --force
)
[[ $MANUAL_MODULE_LIST ]] && (
prnt E "Le mode reprise ne fonctionne pas avec une liste de modules passé manuellement."
die 1 --force
)
fi
# Configure module list
if [[ $MANUAL_MODULE_LIST ]]; then
prnt W "Une liste de modules manuelle sera utilisé."
export MODULE_LIST=$(echo $MANUAL_MODULE_LIST | sed "s/,/ /g")
fi
# Check for module list existance en basic syntax
if [[ -n $MODULE_LIST ]]; then
if [[ $(echo $MODULE_LIST | grep '-') ]]; then
prnt E "Le tiret est interdit dans les noms de module."
die 5
fi
else
prnt E "Aucun module à exécuter !"
die 5
fi
}
export -f process_commandline_and_vars
# EOF