#!/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 runs template function display_help() { uecho "$scriptname: Gérer un répertoire d'hôte de runs USAGE $scriptname [options] OPTIONS -d, --destdir DESTDIR Spécifier le répertoire d'hôte dans lequel copier les fichiers. -l, --list Lister les templates disponibles. -m, --merge Copier les templates spécifiés dans le répertoire d'hôte s'il n'y existent pas déjà. Les templates ayant l'extension '.template' doivent être demandés explicitement. Sinon, ils sont ignorés. -z, --unmerge Supprimer les fichiers du répertoire d'hôte s'ils n'ont pas été modifiés par rapport aux templates. -C, --clean Supprimer les répertoires vides dans le répertoire de référence. Peut être utile après -z -g, --diff Afficher les différences entre les templates et les fichiers du 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" # répertoire source setx __templatectl_srcdir=templatesrc runsconfig # répertoire d'hôte [ -n "$__templatectl_destdir" ] || __templatectl_destdir=. # 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 "$@"