diff --git a/lib/ulib/templates/runsconfig/runs.conf b/lib/ulib/templates/runsconfig/runs.conf index d08b2de..560da44 100644 --- a/lib/ulib/templates/runsconfig/runs.conf +++ b/lib/ulib/templates/runsconfig/runs.conf @@ -1,4 +1,5 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -# Ce fichier contient les paramètres qui sont partagés par tous les scripts de @@host@@ +# Ce fichier contient les paramètres qui sont partagés par tous les scripts +# de @@host@@ #var name=value arr+=value arr-=value #var arr value0 value1... diff --git a/lib/ulib/templates/runsconfig/sysinfos.conf b/lib/ulib/templates/runsconfig/sysinfos.conf index b50fcad..ab25b64 100644 --- a/lib/ulib/templates/runsconfig/sysinfos.conf +++ b/lib/ulib/templates/runsconfig/sysinfos.conf @@ -1,5 +1,6 @@ # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 -# Ce fichier contient les informations sur le type de système installé sur @@host@@ +# Ce fichier contient les informations sur le type de système installé +# sur @@host@@ # Il est possible de recopier la valeur affichée par la commande usysinfos #sysname=() #sysdist=() diff --git a/runsconfig b/runsconfig index 952374a..1fdc0fc 100755 --- a/runsconfig +++ b/runsconfig @@ -1,7 +1,7 @@ #!/bin/bash # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 source "$(dirname "$0")/lib/ulib/ulib" || exit 1 -urequire DEFAULTS template +urequire DEFAULTS runs template function display_help() { uecho "$scriptname: Gérer un répertoire d'hôte de runs @@ -25,10 +25,70 @@ OPTIONS être utile après -z -g, --diff Afficher les différences entre les templates et les fichiers du - répertoire d'hôte." + répertoire d'hôte. + --list-vars + Afficher la valeur par défaut des variables prédéfinies + --write-vars + Forcer l'écriture des valeurs actuelles des variables dans le fichier + .runsconfig, ce qui permet d'éviter de les spécifier à chaque fois avec + l'option -v + -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." } function __templatectl_display_help() { display_help; } +set_defaults runs +# essayer de déterminer l'hôte à partir du répertoire courant +host= +array_split __hostsdirs "$RUNSHOSTSPATH" : +setx __cwd=pwd +for __hostsdir in "${__hostsdirs[@]}"; do + setx __hostsdir=abspath "$__hostsdir" + if [ "${__cwd#$__hostsdir/}" != "$__cwd" ]; then + host="${__cwd#$__hostsdir/}" + host="${host%%/*}" + break + fi +done +# sinon lire l'environnement +if [ -z "$host" ]; then + runs_initdomains + setx host=myhost + splithost "$host" hostname domain + if [ -z "$domain" ]; then + host="$(runs_find_host "$host")" + splithost "$host" hostname domain + fi + [ -n "$domain" ] || host="$(runs_add_domain "$host")" +fi +hostname="${host%%.*}" +TEMPLATE_VARS=( + host hostname +) +function update_template_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" + setv "$1" "$2" + + case "$1" in + host) hostname="${host%%.*}";; + esac + + [ "$2" != "$__orig_value" ] +} + +__vars=() +__list_vars= +__write_vars= +__TEMPLATECTL_SUPPLOPTS=( + -v:,--var: __vars + --list-vars __list_vars=1 + --write-vars __write_vars=1 +) __templatectl_parseopts "$@" && \ set -- "${args[@]}" || die "$args" @@ -37,6 +97,43 @@ setx __templatectl_srcdir=templatesrc runsconfig # répertoire d'hôte [ -n "$__templatectl_destdir" ] || __templatectl_destdir=. -[ -n "$templatectl_opt" ] || templatectl_auto=1 +# charger les variables +__runsconfig_vars="$__templatectl_destdir/.runsconfig" +if [ -f "$__runsconfig_vars" ]; then + source "$__runsconfig_vars" + for __var in "${__runsconfig[@]}"; do + splitvar "$__var" __name __value + update_template_var "$__name" "$__value" + done +fi + +# mettre à jour les variables +__modified= +for __var in "${__vars[@]}"; do + splitvar "$__var" __name __value + update_template_var "$__name" "$__value" && __modified=1 +done + +# enregistrer les valeurs des variables +if [ -n "$__modified" -o "$__write_vars" ]; then + >"$__runsconfig_vars" + echo "__runsconfig=(" >>"$__runsconfig_vars" + for __var in "${TEMPLATE_VARS[@]}"; do + echo_setv "$__var=${!__var}" >>"$__runsconfig_vars" + done + echo ")" >>"$__runsconfig_vars" +fi + +# afficher les variables +if [ -n "$__list_vars" ]; then + for __var in "${TEMPLATE_VARS[@]}"; do + echo_setv "$__var=${!__var}" + done +fi + +# gérer les fichiers template et locaux +if [ -z "$__templatectl_opt" -a -z "$__list_vars" -a -z "$__write_vars" ]; then + __templatectl_auto=1 +fi [ -d "$__templatectl_destdir" ] || die "$__templatectl_destdir: répertoire introuvable" __templatectl_do "$@"