From 05bebad535555afcc5ecf02a5969e90303c3e397 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Sat, 29 Nov 2014 22:11:51 +0400 Subject: [PATCH] support de la saisie des variables dynamiques --- apacheconfig | 111 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 78 insertions(+), 33 deletions(-) diff --git a/apacheconfig b/apacheconfig index 50fc704..c50575d 100755 --- a/apacheconfig +++ b/apacheconfig @@ -31,14 +31,24 @@ répertoire de référence appelé répertoire local, avant son déploiement. Afficher les différences entre les templates et les fichiers du répertoire local. --list-vars - Afficher la valeur par défaut des variables prédéfinies + Afficher pour information les valeurs par défaut des variables de + template. --write-vars - Forcer l'écriture des valeurs actuelles des variables dans le fichier - .apacheconfig, ce qui permet d'éviter de les spécifier à chaque fois - avec l'option -v + Ecrire dans le fichier .apacheconfig les valeurs par défaut des + variables, ce qui permet après édition du fichier d'éviter de les + spécifier à chaque fois avec l'option -v + Le fichier n'est pas écrasé s'il existe déjà. -v, --var NAME=VALUE Spécifier la valeur d'une variable. Il est possible de spécifier des - valeurs qui ne sont pas dans la liste prédéfinie. + valeurs qui ne sont pas dans la liste prédéfinie. Par défaut, il s'agit + d'une variable de template, utilisée pour mettre à jour la copie locale + d'un template avec l'option --merge + Dans le fichier .apacheconfig, les valeurs des variables de template + n'est pas censée changer. Lors de la copie des templates avec l'option + --merge, chaque occurence de @@VAR@@ dans un template est remplacée dans + la copie locale par la valeur de la variable de template VAR + Les variables dynamiques sont remplacées lors du déploiement du fichier + avec l'option --update Le répertoire local peut contenir les fichiers et répertoires suivants, qui sont tous optionnels: @@ -80,6 +90,8 @@ IMPORTANT: les fonctions de déploiement ne sont pour le moment supportées que sur debian -u, --update, --deploy Mettre à jour la configuration système à partir du répertoire local. + Lors du déploiement de la configuration, les valeurs de variables + dynamiques sont remplacées dans les fichiers destination. -r, --certsdir CERTSDIR Spécifier le cas échéant le répertoire contenant les certificats à déployer. @@ -114,13 +126,28 @@ OPTIONS AVANCEES } function __templatectl_display_help() { display_help; } +# Valeurs par défaut des variables de template +setx host=myhost +hostname="${host%%.*}" +DEFAULT_TEMPLATE_VARS=( + host="$host" + hostname="$hostname" + aliases="$hostname" + admin=supervision-gdrsi@listes.univ-reunion.fr + certsdir=renater + caname=terena.crt + certname= + keyname= + #configdir= # défini ci-dessous +) + function parent_apacheconfig() { # chercher à partir du répertoire courant si un des répertoires parents # s'appelle apacheconfig local dir="$(pwd)" dirname while true; do - dirname="$(basename "$dir")" + dirname="$(basename -- "$dir")" if [ "$dir" == / ]; then # s'arrêter à la racine return 1 @@ -135,24 +162,14 @@ function parent_apacheconfig() { done } -setx host=myhost -setx hostname=myhostname -aliases="$hostname" -admin=supervision-gdrsi@listes.univ-reunion.fr -certsdir=renater -caname=terena.crt -certname= -keyname= -TEMPLATE_VARS=( - host hostname aliases admin - certsdir caname certname keyname -) -function update_template_var() { +TEMPLATE_VARS=() +DYNAMIC_VARS=() +function update_var() { # mettre à jour la valeur d'une variable en tenant compte de certaines # dépendances. par exemple, si on modifie host, il faut mettre à jour # hostname. local __orig_value="${!1}" - array_addu TEMPLATE_VARS "$1" + array_contains DYNAMIC_VARS "$1" || array_addu TEMPLATE_VARS "$1" setv "$1" "$2" local __update_aliases @@ -199,9 +216,10 @@ __TEMPLATECTL_SUPPLOPTS=( __templatectl_parseopts "$@" && \ set -- "${args[@]}" || die "$args" -# répertoire source +# répertoire de template setx __templatectl_srcdir=templatesrc apacheconfig -# répertoire de référence + +# répertoire local __autocreate= if [ -z "$__templatectl_destdir" ]; then if [ -d apacheconfig ]; then @@ -215,39 +233,66 @@ if [ -z "$__templatectl_destdir" ]; then __autocreate=1 fi fi +setx __templatectl_destdir=abspath "$__templatectl_destdir" -# charger les variables +# charger les variables. important: la liste des variables définie dans le +# fichier .apacheconfig prend la précédence sur la liste définie par défaut +__template_vars=("${DEFAULT_TEMPLATE_VARS[@]}") +__dynamic_vars=() __apacheconfig_vars="$__templatectl_destdir/.apacheconfig" -if [ -f "$__apacheconfig_vars" ]; then - source "$__apacheconfig_vars" - for __var in "${__apacheconfig[@]}"; do - splitvar "$__var" __name __value - update_template_var "$__name" "$__value" - done -fi +# d'abord charger __template_vars +[ -f "$__apacheconfig_vars" ] && source "$__apacheconfig_vars" +for __var in "${__template_vars[@]}"; do + splitvar "$__var" __name __value + update_var "$__name" "$__value" +done +array_contains TEMPLATE_VARS configdir || update_var configdir "$__templatectl_destdir" +# puis charger __dynamic_vars +[ -f "$__apacheconfig_vars" ] && source "$__apacheconfig_vars" +for __var in "${__dynamic_vars[@]}"; do + splitvar "$__var" __name __value + array_del TEMPLATE_VARS "$__name" + array_addu DYNAMIC_VARS "$__name" + update_var "$__name" "$__value" +done # mettre à jour les variables __modified= for __var in "${__vars[@]}"; do splitvar "$__var" __name __value - update_template_var "$__name" "$__value" && __modified=1 + update_var "$__name" "$__value" && __modified=1 done # enregistrer les valeurs des variables -if [ -n "$__modified" -o "$__write_vars" ]; then +if [ -n "$__write_vars" ]; then + [ -f "$__apacheconfig_vars" ] && + die "Refus d'écraser le fichier existant $(ppath "$__apacheconfig_vars")" + >"$__apacheconfig_vars" - echo "__apacheconfig=(" >>"$__apacheconfig_vars" + echo "__template_vars=(" >>"$__apacheconfig_vars" for __var in "${TEMPLATE_VARS[@]}"; do echo_setv "$__var=${!__var}" >>"$__apacheconfig_vars" done echo ")" >>"$__apacheconfig_vars" + echo "__dynamic_vars=(" >>"$__apacheconfig_vars" + for __var in "${DYNAMIC_VARS[@]}"; do + echo_setv "$__var=${!__var}" >>"$__apacheconfig_vars" + done + echo ")" >>"$__apacheconfig_vars" fi # afficher les variables if [ -n "$__list_vars" ]; then + echo "# template vars" for __var in "${TEMPLATE_VARS[@]}"; do echo_setv "$__var=${!__var}" done + if [ ${#DYNAMIC_VARS[*]} -gt 0 ]; then + echo "# dynamic vars" + for __var in "${DYNAMIC_VARS[@]}"; do + echo_setv "$__var=${!__var}" + done + fi fi # Gérer les templates et fichiers locaux