command line parsing implemented, implemented --force option to die(), few typos

This commit is contained in:
levasseur
2021-06-23 16:59:41 +02:00
parent cbf8180605
commit e1321111d9
5 changed files with 199 additions and 99 deletions

157
init.sh
View File

@@ -14,13 +14,20 @@ set -o errexit
export VERSION="0.95.1"
# Stocke le chemin du script
MYPATH=$(dirname $0)
export MYPATH=$(dirname $0)
# récupère le nom d'hote
export HOSTNAME=$(hostname)
# Charge les bibliothèques
for lib in $MYPATH/lib/*.sh; do
. $lib
done
# =============================
# ==== Basic sanity checks ====
# =============================
# Check if a function exists
function_exists() {
declare -f -F $1 > /dev/null
@@ -28,18 +35,22 @@ function_exists() {
}
function_exists prnt || (
echo "Il manque des fonctions vitales venant des bibliothèques !"
echo "*** ERREUR FATALE !"
echo "*** Il manque des fonctions vitales venant des bibliothèques."
exit 2
)
# Vérifie qu'on soit root
if [[ $EUID -ne 0 ]];
prnt E "Ce script doit être démarré en tant que root. Arrêt."
die 1
die 1 --force
fi
# Variables globales importantes
export HOSTNAME=$(hostname)
# ===========================
# ==== Log file creation ====
# ===========================
# Variables globales importantes
export LOGFILE=${LOGFILE:-"$MYPATH/log/init-$(uname -n)-$(stdtime).log"}
prnt I "Création du répertoire d'accueil du fichier log..."
@@ -61,19 +72,23 @@ else
. $MYPATH/conf/init.conf.sh
else
prnt E "Aucune configuration trouvée, impossible de continuer."
die 2
die 2 --force
fi
fi
# ================================
# ==== Main program functions ====
# ================================
# Affiche l'aide
disp_help()
{
cat << EOF
Utilisation : init.sh [OPTION] [-m module1,...,moduleN]
Utilisation : init.sh [OPTIONS] [-m|--module <module1,...,moduleN>]
Initialise une machine pour l'intégrer à un réseau.
Option :
-m, --module=<liste> Lance les modules indiqués même s'il ne sont pas
Options :
-m, --module <liste> Lance les modules indiqués même s'il ne sont pas
dans les fichiers de configuration.
-c, --check-only Lance les procédure de vérification préexecution
sans rien modifier.
@@ -81,6 +96,10 @@ Option :
-k, --keep-going L'execution continura en cas d'erreur.
-r, --resume Reprend l'execution la ou elle c'est arrêté.
-h, --help Affiche ce texte d'aide.
-v, --version Show version of that script and version of all
available modules.
Attention : les options courtes ne sont pas concaténable.
Variable d'environnement :
LOGFILE Stocke le nom complet du fichier de log qui sera
@@ -97,44 +116,112 @@ Fichiers de configuration :
Veuiller consulter les fichiers de configuration fournis en exemple
pour avoir un aperçu des paramêtres disponibles.
EOF
}
# Show version infos
show_version()
{
echo -e "${White}init.sh${DEFAULTCOL} version ${Green}$VERSION${DEFAULTCOL}"
echo ""
echo "Available modules:"
for mod in $MYPATH/modules/*.sh; do
. $mod
local modname=$(get_mod_name $mod)
local version=VER_$modname
echo -e "\t$modname:\t ${!version}"
done
}
# Get module name from module file
get_mod_name()
{
echo $(basename $1 | cut -f 1 -d '.')
}
# ======================
# ==== Main Program ====
# ======================
# Processing command line options
want_module=false
for opt in $@; do
case $opt in
"-h"|"--help")
disp_help
exit 0
;;
*)
prnt E "Paramètre \'$opt\' non géré."
disp_help
exit 1
;;
esac
if [[ want_module == false ]]; then
case $opt in
"-h"|"--help")
disp_help
exit 0
;;
"-v"|"--version")
show_version
exit 0
"-m"|"--module")
want_module=true
;;
"-c"|"--check-only")
export CHECKONLY=true
;;
"-j"|"--jump")
export JUMP=true
;;
"-k"|"--keep-going")
export KEEPGOING=true
;;
"-r"|"--resume")
if [[ -s $MYPATH/stage ]]; 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
;;
*)
prnt E "Paramètre \'$opt\' non géré."
disp_help
exit 1
;;
esac
else
if [[ ! MANUAL_MODULE_LIST ]]; then
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 paramètre --module."
die 1 --force
fi
fi
done
if [[ $want_module == true ]]; then
prnt E "La liste des modules à exécuter est manquante !"
die 1 --force
fi
# Check unconsistant parameters
[[ $CHECK_ONLY == true ]] && [[ $JUMP == true ]] && (
prnt E "Les options --check-only et --jump s'excluent mutuellement !"
die 1 --force
)
[[ $KEEPGOING == true ]] && [[ $CHECKONLY == true ]] && (
prnt E "Les options --keep-going et --check-only sont incompatible !"
die 1 --force
)
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
upgrade_dist
[[ ! $PVEHST ]] && install_ceph && conf_ceph
[[ ! $PVEHST ]] && apt_blacklist
#[[ ! $PVEHST ]] && authnz
#[[ ! $PVEHST ]] && add_users
conf_locale
install_pkg
conf_ntp
conf_ssh
install_profile
patch_snmp
install_mk-agent
conf_syslog
conf_mail
prnt I "That's all folks !"
echo "Après vérification des logs, vous devriez redémarrer la machine..."