apacheconfig: support des hôtes dynamiques ou statiques

This commit is contained in:
Jephté Clain 2015-10-30 21:46:49 +04:00
parent 93ac7ea005
commit 27592d4450
7 changed files with 124 additions and 38 deletions

View File

@ -50,12 +50,15 @@ OPTIONS
déployer." déployer."
} }
TEMPLATE_STATIC_VARS=() # toujours placer une variable dépendante AVANT la variable maitre
TEMPLATE_STATIC_VARS=(
hostname aliases host
)
TEMPLATE_DYNAMIC_VARS=( TEMPLATE_DYNAMIC_VARS=(
host hostname aliases ips_namevirtualhosts ips_listens ips
ips ips_default_namevirtualhost ips_namevirtualhosts ips_listens dhostname daliases dhost
admin certsdir caname certname keyname configdir) admin certsdir caname certname keyname configdir)
TEMPLATE_NOWRITE_VARS=(hostname aliases configdir) TEMPLATE_NOWRITE_VARS=(hostname aliases dhostname daliases configdir)
__TEMPLATE_DEFAULTF_host=__template_defaultf_host __TEMPLATE_DEFAULTF_host=__template_defaultf_host
__TEMPLATE_UPDATEF_host=__template_updatef_host __TEMPLATE_UPDATEF_host=__template_updatef_host
@ -74,36 +77,49 @@ __TEMPLATE_DEFAULTF_ips=__template_defaultf_ips
__TEMPLATE_UPDATEF_ips=__template_updatef_ips __TEMPLATE_UPDATEF_ips=__template_updatef_ips
function __template_defaultf_ips() { function __template_defaultf_ips() {
local -a ips local -a ips
if [ "$host" != "@@dhost@@" ]; then
resolv_ips ips "$host" resolv_ips ips "$host"
else
resolv_ips ips "$dhost"
fi
echo "${ips[*]}" echo "${ips[*]}"
} }
function __template_updatef_ips() { function __template_updatef_ips() {
local -a ipports; local ipport ip port local -a ipports; local ipport ip port
local dnvh nvhs ls local nvhs ls
nvhs= nvhs=
ls= ls=
array_split ipports "$ips" " " array_split ipports "$ips" " "
for ipport in "${ipports[@]}"; do for ipport in "${ipports[@]}"; do
splitpair "$ipport" ip port splitpair "$ipport" ip port
[ -n "$port" ] || port=443 [ -n "$port" ] || port=443
[ -n "$dnvh" ] || dnvh="#ips_default_namevirtualhost
NameVirtualHost *:80"
[ -n "$nvhs" ] || nvhs="#ips_namevirtualhosts" [ -n "$nvhs" ] || nvhs="#ips_namevirtualhosts"
[ -n "$ls" ] || ls="#ips_listens"
nvhs="$nvhs nvhs="$nvhs
NameVirtualHost $ip:$port" NameVirtualHost $ip:$port"
[ -n "$ls" ] || ls="#ips_listens"
ls="$ls ls="$ls
Listen $ip:$port" Listen $ip:$port"
done done
[ -n "$dnvh" ] && __template_set_var ips_default_namevirtualhost "$dnvh"
[ -n "$nvhs" ] && __template_set_var ips_namevirtualhosts "$nvhs" [ -n "$nvhs" ] && __template_set_var ips_namevirtualhosts "$nvhs"
[ -n "$ls" ] && __template_set_var ips_listens "$ls" [ -n "$ls" ] && __template_set_var ips_listens "$ls"
} }
__TEMPLATE_DEFAULTF_dhost=__template_defaultf_dhost
__TEMPLATE_UPDATEF_dhost=__template_updatef_dhost
function __template_defaultf_dhost() {
myhost
}
function __template_updatef_dhost() {
local update_daliases
[ "$daliases" == "$dhostname" ] && update_daliases=1
__template_set_var dhostname "${dhost%%.*}"
[ -n "$update_daliases" ] && __template_set_var daliases "$dhostname"
[ -n "$ips" ] || __template_set_var ips ""
}
TEMPLATECTL_NAME=apacheconfig TEMPLATECTL_NAME=apacheconfig
TEMPLATECTL_SRCDIRS=(apacheconfig) TEMPLATECTL_SRCDIRS=(apacheconfig)
TEMPLATECTL_CONFIG=".$TEMPLATECTL_NAME" TEMPLATECTL_CONFIG="$TEMPLATECTL_NAME"
TEMPLATECTL_DEFAULTS=( TEMPLATECTL_DEFAULTS=(
admin=supervision-gdrsi@listes.univ-reunion.fr admin=supervision-gdrsi@listes.univ-reunion.fr
certsdir=renater certsdir=renater
@ -112,12 +128,15 @@ TEMPLATECTL_VARS=()
action= action=
destdir= destdir=
nohideconfig=
templateopt= templateopt=
certsdir= certsdir=
args=( args=(
--help '$exit_with display_help' --help '$exit_with display_help'
-c,--create action=create -c,--create action=create
-d:,--destdir: destdir= -d:,--destdir: destdir=
--no-hideconfig nohideconfig=1
--hideconfig nohideconfig=
-t::,--template:: '$set@ templateopt; action=template' -t::,--template:: '$set@ templateopt; action=template'
--help-template '$templateopt=-help; action=template' --help-template '$templateopt=-help; action=template'
-l,--list '$templateopt=l; action=template' -l,--list '$templateopt=l; action=template'
@ -137,7 +156,7 @@ args=(
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
__template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die __template_set_destdir destdir autocreate "$TEMPLATECTL_NAME" || die
setx config=templatectl_config "$destdir" setx config=templatectl_config "$destdir" ${nohideconfig:+nohideconfig}
modified= modified=
templatectl_loadvars "$config" && modified=1 templatectl_loadvars "$config" && modified=1
@ -168,18 +187,26 @@ if [ "$action" == create ]; then
fi fi
[ -d "$destdir" ] || die "$destdir: répertoire introuvable" [ -d "$destdir" ] || die "$destdir: répertoire introuvable"
if [ -n "$host" ]; then
read_value -i "Veuillez entrer le nom d'hôte" host "$host"
else
check_interaction -c && einfo "Vous pouvez entrer un nom d'hôte spécifique pour la nouvelle configuration, ou laisser la valeur par défaut @@dhost@@ pour qu'il soit calculé dynamiquement lors du déploiement"
read_value "Veuillez entrer le nom d'hôte" host @@dhost@@
fi
__template_set_var host "$host"
if [ -f "$config" ]; then if [ -f "$config" ]; then
ask_yesno "Le fichier $(ppath "$config") existe. Voulez-vous l'écraser?" O || die ask_yesno "Le fichier $(ppath "$config") sera écrasé. Voulez-vous continuer?" O || die
rm -f "$config" || die rm -f "$config" || die
fi fi
templatectl -d "$destdir" --no-load-vars -m --write-vars templatectl -d "$destdir" --config "$config" --no-load-vars -m --write-vars
################################################################################ ################################################################################
elif [ "$action" == template ]; then elif [ "$action" == template ]; then
__TEMPLATECTL_HELP="USAGE: $scriptname -t -- args... __TEMPLATECTL_HELP="USAGE: $scriptname -t -- args...
$__TEMPLATECTL_HELP" $__TEMPLATECTL_HELP"
templatectl -d "$destdir" --no-load-vars ${templateopt:+-$templateopt} "$@" templatectl -d "$destdir" --config "$config" --no-load-vars ${templateopt:+-$templateopt} "$@"
################################################################################ ################################################################################
elif [ "$action" == deploy ]; then elif [ "$action" == deploy ]; then
@ -197,6 +224,6 @@ elif [ "$action" == deploy ]; then
for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do for __name in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_add args "$__name=${!__name}" array_add args "$__name=${!__name}"
done done
apache_autoconf "${args[@]}" "$@" || die apache_autoconf --ignore "$(basename -- "$config")" "${args[@]}" "$@" || die
eend eend
fi fi

View File

@ -85,7 +85,12 @@ function pconf() {
} }
if [ -n "$UTOOLS_USSH_ALIAS" ]; then if [ -n "$UTOOLS_USSH_ALIAS" ]; then
function ssh() { "@@dest@@/ussh" "$@"; } function ssh() {
local dest="@@dest@@"
if [ "$dest" == "@@"dest"@@" ]; then "$(which ssh)" "$@"
else "@@dest@@/ussh" "$@"
fi
}
fi fi
# Configuration # Configuration

View File

@ -212,11 +212,14 @@ __APACHE_AUTOCONF_HELP="\
function __display_apache_autoconf_help() { eecho "$__APACHE_AUTOCONF_HELP"; } function __display_apache_autoconf_help() { eecho "$__APACHE_AUTOCONF_HELP"; }
function apache_autoconf() { function apache_autoconf() {
eval "$(utools_local)" eval "$(utools_local)"
local autoconfdir certsdir confdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir local -a ignores
local autoconfdir certsdir confdir confsdir modulesdir sitesdir cgibindir wwwdir certsconfdir rrdir
local restart=1 local restart=1
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __display_apache_autoconf_help' \ --help '$exit_with __display_apache_autoconf_help' \
--ignore: ignores \
--confdir: confdir= \ --confdir: confdir= \
--confsdir: confsdir= \
--modulesdir: modulesdir= \ --modulesdir: modulesdir= \
--sitesdir: sitesdir= \ --sitesdir: sitesdir= \
--cgibindir: cgibindir= \ --cgibindir: cgibindir= \
@ -240,15 +243,16 @@ function apache_autoconf() {
return 1 return 1
} }
certsdir="$1"; shift certsdir="$1"; shift
if [ -z "$confdir" -o -z "$modulesdir" -o -z "$sitesdir" \ if [ -z "$confdir" -o -z "$confsdir" -o -z "$modulesdir" \
-o -z "$cgibindir" -o -z "$wwwdir" -o -z "$certsconfdir" \ -o -z "$sitesdir" -o -z "$cgibindir" -o -z "$wwwdir" \
-o -z "$rrdir" ]; then -o -z "$certsconfdir" -o -z "$rrdir" ]; then
[ -d "$autoconfdir" ] || { [ -d "$autoconfdir" ] || {
eerror "$autoconfdir: répertoire invalide" eerror "$autoconfdir: répertoire invalide"
return 1 return 1
} }
fi fi
[ -n "$confdir" ] || confdir="$autoconfdir" [ -n "$confdir" ] || confdir="$autoconfdir"
[ -n "$confsdir" ] || confsdir="$autoconfdir/confs"
[ -n "$modulesdir" ] || modulesdir="$autoconfdir/modules" [ -n "$modulesdir" ] || modulesdir="$autoconfdir/modules"
[ -n "$sitesdir" ] || sitesdir="$autoconfdir/sites" [ -n "$sitesdir" ] || sitesdir="$autoconfdir/sites"
[ -n "$cgibindir" ] || cgibindir="$autoconfdir/cgi-bin" [ -n "$cgibindir" ] || cgibindir="$autoconfdir/cgi-bin"
@ -298,7 +302,22 @@ function apache_autoconf() {
eend eend
fi fi
# Configuration des modules # Gestion des configurations
if [ -d "$confsdir" ]; then
local -a confs
local conf
etitle "Installation des configurations"
array_from_lines confs "$(list_files "$confsdir" "*.conf")"
for conf in "${confs[@]}"; do
estep "$conf"
__apache_autoconf_fillcopy \
"$confsdir/$conf" \
"$APACHECONFDIR/conf-available/$conf" && modified=1
done
eend
fi
# Gestion des modules
if [ -d "$modulesdir" ]; then if [ -d "$modulesdir" ]; then
local -a confs local -a confs
local conf local conf
@ -383,14 +402,31 @@ s#@@ca@@#$APACHESSLCERTSDIR/$(basename "$ca")#g
etitle "Configuration de base" etitle "Configuration de base"
array_from_lines confs "$(list_files "$confdir")" array_from_lines confs "$(list_files "$confdir")"
for conf in "${confs[@]}"; do for conf in "${confs[@]}"; do
array_contains ignores "$conf" && continue
case "$conf" in case "$conf" in
modules.conf|sites.conf) continue;; confs.conf|modules.conf|sites.conf) continue;;
esac esac
estep "$conf" estep "$conf"
__apache_autoconf_fillcopy \ __apache_autoconf_fillcopy \
"$confdir/$conf" \ "$confdir/$conf" \
"$APACHECONFDIR/$conf" && modified=1 "$APACHECONFDIR/$conf" && modified=1
done done
if [ -f "$confdir/confs.conf" ]; then
local -a confs
local conf
array_from_lines confs "$(<"$confdir/confs.conf" filter_conf)"
for conf in "${confs[@]}"; do
if [ "${conf#-}" != "$conf" ]; then
conf="${conf#-}"
estep "Désactivation de la configuration $conf"
a2disconf "$conf" && modified=1
else
conf="${conf#+}"
estep "Activation de la configuration $conf"
a2enconf "$conf" && modified=1
fi
done
fi
if [ -f "$confdir/modules.conf" ]; then if [ -f "$confdir/modules.conf" ]; then
local -a modules local -a modules
local module local module

View File

@ -28,6 +28,8 @@ function qseds() {
local s="$*" local s="$*"
s="${s//\\/\\\\}" s="${s//\\/\\\\}"
s="${s//\//\\/}" s="${s//\//\\/}"
s="${s//
/\\n}"
recho "$s" recho "$s"
} }
function _qform() { function _qform() {

View File

@ -146,7 +146,7 @@ function __template_fillvars() {
[ -n "$__found" ] || { echo "$1"; return; } [ -n "$__found" ] || { echo "$1"; return; }
# construire le script sed pour le remplacement des variables # construire le script sed pour le remplacement des variables
local __script __first=1 local __script __first=1 __repl
for __var in "${TEMPLATE_STATIC_VARS[@]}"; do for __var in "${TEMPLATE_STATIC_VARS[@]}"; do
[ -n "$__first" ] || __script="$__script"$'\n' [ -n "$__first" ] || __script="$__script"$'\n'
__first= __first=
@ -360,9 +360,10 @@ function template_unmerge() {
function template_cleandest() { function template_cleandest() {
# Supprimer dans le répertoire de destination $1 tous les répertoires vides. # Supprimer dans le répertoire de destination $1 tous les répertoires vides.
# Cette fonction est habituellement utilisée après template_unmerge() # Cette fonction est habituellement utilisée après template_unmerge()
# Ignorer les chemins qui contiennent .git/ et .svn/
local -a dirs local -a dirs
[ -d "$1" ] || return 1 [ -d "$1" ] || return 1
array_from_lines dirs "$(cd "$1"; find . -type d | __template_plsort -r)" array_from_lines dirs "$(cd "$1"; find . -type d | grep -v .git/ | grep -v .svn/ | __template_plsort -r)"
array_del dirs . array_del dirs .
(cd "$1"; rmdir "${dirs[@]}" 2>/dev/null) (cd "$1"; rmdir "${dirs[@]}" 2>/dev/null)
} }
@ -414,7 +415,14 @@ function template_srcdir() {
function templatectl_config() { function templatectl_config() {
# Obtenir le chemin vers le fichier de configuration pour le répertoire $1 # Obtenir le chemin vers le fichier de configuration pour le répertoire $1
echo "$1/$(basename -- "$TEMPLATECTL_CONFIG")" # Si $2==nohideconfig, utiliser le nom CONFIG.conf, sinon utiliser par défaut
# .CONFIG sauf si le fichier CONFIG.conf existe
local config="$(basename -- "$TEMPLATECTL_CONFIG")"
if [ -f "$1/$config.conf" -o "$2" == nohideconfig ]; then
echo "$1/$config.conf"
else
echo "$1/.$config"
fi
} }
function templatectl_loadvars() { function templatectl_loadvars() {
@ -467,14 +475,16 @@ function templatectl_writevars() {
# Ecrire les variables dans le fichier $1 # Ecrire les variables dans le fichier $1
local __t_var local __t_var
echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$1" echo "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8" >"$1"
echo "__template_vars=(" >>"$1" if [ ${#TEMPLATE_DYNAMIC_VARS[*]} -gt 0 ]; then
for __t_var in "${TEMPLATE_STATIC_VARS[@]}"; do echo "__dynamic_vars=(" >>"$1"
for __t_var in "${TEMPLATE_DYNAMIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1" echo_setv "$__t_var=${!__t_var}" >>"$1"
done done
echo ")" >>"$1" echo ")" >>"$1"
echo "__dynamic_vars=(" >>"$1" fi
for __t_var in "${TEMPLATE_DYNAMIC_VARS[@]}"; do echo "__template_vars=(# ne pas modifier" >>"$1"
for __t_var in "${TEMPLATE_STATIC_VARS[@]}"; do
array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue array_contains TEMPLATE_NOWRITE_VARS "$__t_var" && continue
echo_setv "$__t_var=${!__t_var}" >>"$1" echo_setv "$__t_var=${!__t_var}" >>"$1"
done done
@ -539,6 +549,9 @@ function templatectl() {
# - TEMPLATECTL_CONFIG est le nom de base du fichier à partir duquel sont # - TEMPLATECTL_CONFIG est le nom de base du fichier à partir duquel sont
# chargées les variables et dans lequel sont écrites les variables avec # chargées les variables et dans lequel sont écrites les variables avec
# l'option --write-vars # l'option --write-vars
# Si le nom de base est CONFIG, le fichier s'appelera .CONFIG si l'option
# --hide-config est utilisée (par défaut) ou CONFIG.conf si l'option
# --no-hide-config est utilisée
# Les variables de template_loadvars() sont aussi prises en compte # Les variables de template_loadvars() sont aussi prises en compte
local -a __tc_srcdirs; local __tc_srcdir local -a __tc_srcdirs; local __tc_srcdir
if [ ${#TEMPLATECTL_SRCDIRS[*]} -gt 0 ]; then if [ ${#TEMPLATECTL_SRCDIRS[*]} -gt 0 ]; then
@ -556,11 +569,15 @@ function templatectl() {
local -a __tc_args local -a __tc_args
local __tc_auto=1 __tc_load_vars=1 local __tc_auto=1 __tc_load_vars=1
local __tc_destdir __tc_list __tc_merge __tc_unmerge __tc_clean __tc_diff __tc_list_vars __tc_write_vars local __tc_destdir __tc_config __tc_nohideconfig
local __tc_list __tc_merge __tc_unmerge __tc_clean __tc_diff __tc_list_vars __tc_write_vars
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __display_templatectl_help' \ --help '$exit_with __display_templatectl_help' \
-d:,--destdir: __tc_destdir= \ -d:,--destdir: __tc_destdir= \
-s:,--srcdir: __tc_srcdirs \ -s:,--srcdir: __tc_srcdirs \
--config: __tc_config= \
--no-hide-config __tc_nohideconfig=1 \
--hide-config __tc_nohideconfig= \
--load-vars __tc_load_vars=1 \ --load-vars __tc_load_vars=1 \
--no-load-vars __tc_load_vars= \ --no-load-vars __tc_load_vars= \
--noop __tc_auto= \ --noop __tc_auto= \
@ -582,7 +599,7 @@ function templatectl() {
__template_check_srcdir "$__tc_srcdir" || return 1 __template_check_srcdir "$__tc_srcdir" || return 1
done done
local __tc_config="$__tc_destdir/$(basename -- "$TEMPLATECTL_CONFIG")" [ -n "$__tc_config" ] || __tc_config="$(templatectl_config "$destdir" ${__tc_nohideconfig:+nohideconfig})"
if [ -n "$__tc_load_vars" ]; then if [ -n "$__tc_load_vars" ]; then
templatectl_loadvars "$__tc_config" templatectl_loadvars "$__tc_config"
fi fi

View File

@ -3,7 +3,6 @@
# have to change the VirtualHost statement in # have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf # /etc/apache2/sites-enabled/000-default.conf
#@@ips_default_namevirtualhost@@
Listen 80 Listen 80
<IfModule ssl_module> <IfModule ssl_module>

View File

@ -77,7 +77,7 @@ function __template_updatef_host() {
TEMPLATECTL_NAME=runs TEMPLATECTL_NAME=runs
TEMPLATECTL_SRCDIRS=(runsconfig) TEMPLATECTL_SRCDIRS=(runsconfig)
TEMPLATECTL_CONFIG=".runsconfig" TEMPLATECTL_CONFIG=runsconfig
TEMPLATECTL_DEFAULTS=() TEMPLATECTL_DEFAULTS=()
TEMPLATECTL_VARS=() TEMPLATECTL_VARS=()