support de la saisie des variables dynamiques

This commit is contained in:
Jephte CLAIN 2014-11-29 22:11:51 +04:00
parent 1982afd229
commit 05bebad535
1 changed files with 78 additions and 33 deletions

View File

@ -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