finaliser le support de .toinst.conf et traiter les options --exclude, --protect et --rsync-option

This commit is contained in:
Jephté Clain 2017-04-19 10:49:05 +04:00
parent 9d8b32bcd1
commit fc467cb250
1 changed files with 97 additions and 37 deletions

134
toinst
View File

@ -66,12 +66,22 @@ OPTIONS
être spécifiés en les séparant par des virgules. Si src est mentionné être spécifiés en les séparant par des virgules. Si src est mentionné
plusieurs fois, e.g src:dest1,src:dest2 alors la webapp src est déployée plusieurs fois, e.g src:dest1,src:dest2 alors la webapp src est déployée
plusieurs fois avec des noms distincts. plusieurs fois avec des noms distincts.
--protect PROTECTS
--exclude EXCLUDES --exclude EXCLUDES
--replace-excludes EXCLUDES --replace-excludes EXCLUDES
Spécifier un ensemble de fichier à exclure de la source lors du
déploiement. La variante --replace-excludes permet de construire la
liste des fichiers à exclure depuis zéro. La liste par défaut est:
${DEFAULT_EXCLUDES[*]}
--protect PROTECTS
Spécifier un ensemble de fichier à protéger dans la destination: ils ne
sont jamais écrasés par les fichiers sources. Cela permet de gérer des
applications qui écrivent des fichiers dans leur répertoire.
--rsync-option RSYNC_OPTIONS --rsync-option RSYNC_OPTIONS
--replace-rsync-options RSYNC_OPTIONS --replace-rsync-options RSYNC_OPTIONS
XXX Options non documentées à implémenter Spécifier les options de rsync à utiliser pour le déploiement. La
variante --replace-rsync-options permet de construire la liste des
options depuis zéro. La liste par défaut est:
${DEFAULT_RSYNC_OPTIONS[*]}
-b, --backup -b, --backup
--no-backup --no-backup
Avant le déploiement du service numérique, faire (resp. ne pas faire) Avant le déploiement du service numérique, faire (resp. ne pas faire)
@ -90,6 +100,9 @@ OPTIONS
répertoire courant." répertoire courant."
} }
DEFAULT_EXCLUDES=(/.git/ /.toinst.conf)
DEFAULT_RSYNC_OPTIONS=(-rptL --delete)
VARS=( VARS=(
TOMCAT_PROFILE TOMCAT_PROFILE
CATALINA_BASE TOMCAT_USER TOMCAT_GROUP TOMCAT_VERSION CATALINA_BASE TOMCAT_USER TOMCAT_GROUP TOMCAT_VERSION
@ -97,7 +110,10 @@ VARS=(
BACKUP RESTART BACKUP RESTART
) )
ARRAYS=( ARRAYS=(
WAMAPS PROTECTS EXCLUDES RSYNC_OPTIONS REPLACE_RSYNC_OPTIONS WAMAPS
EXCLUDES REPLACE_EXCLUDES
PROTECTS
RSYNC_OPTIONS REPLACE_RSYNC_OPTIONS
) )
function __reset_vars() { function __reset_vars() {
local var local var
@ -111,10 +127,10 @@ function __reset_vars() {
function __dump_vars() { function __dump_vars() {
local var local var
for var in "${VARS[@]}"; do for var in "${VARS[@]}"; do
echo_setv2 "$var" eecho "$(echo_setv2 "$var")"
done done
for var in "${ARRAYS[@]}"; do for var in "${ARRAYS[@]}"; do
echo_seta2 "$var" eecho "$(echo_seta2 "$var")"
done done
} }
@ -167,30 +183,48 @@ function parse_tomcat_users() {
fi fi
} }
action=deploy function build_rsync_options() {
parse_tomcat_users= local -a excludes protects; local exclude protect
parse_server= if [ ${#REPLACE_EXCLUDES[*]} -gt 0 ]; then
istmpdir= array_copy excludes REPLACE_EXCLUDES
tmpdir= else
config= array_copy excludes DEFAULT_EXCLUDES
tomcat_profile= fi
catalina_base= array_extend excludes EXCLUDES
tomcat_user= array_copy protects PROTECTS
tomcat_group= if [ ${#REPLACE_RSYNC_OPTIONS[*]} -gt 0 ]; then
tomcat_version= array_copy rsync_options REPLACE_RSYNC_OPTIONS
manager_url= else
manager_user= array_copy rsync_options DEFAULT_RSYNC_OPTIONS
manager_password= fi
wamaps=() array_extend rsync_options RSYNC_OPTIONS
protects=()
excludes=() local toinstconf="$1/.toinst.conf"
rsync_options=(-rptL --delete --exclude /.git/) if [ -f "$toinstconf" ]; then
replace_rsync_options=() eval "$(
backup= EXCLUDES=()
restart= PROTECTS=()
fake= RSYNC_OPTIONS=()
args=( source "$toinstconf"
array_extend excludes EXCLUDES
array_extend protects PROTECTS
array_extend rsync_options RSYNC_OPTIONS
echo_seta2 excludes
echo_seta2 protects
echo_seta2 rsync_options
)"
fi
for exclude in "${excludes[@]}"; do
array_add rsync_options --exclude "$exclude"
done
for protect in "${PROTECTS[@]}"; do
array_add rsync_options -f "P $protect"
done
}
args=(%
--help '$exit_with display_help' --help '$exit_with display_help'
--config-template action=config-template
--private-parse-server '$action=parse; parse_server=1' --private-parse-server '$action=parse; parse_server=1'
--private-parse-tomcat-users '$action=parse; parse_tomcat_users=1' --private-parse-tomcat-users '$action=parse; parse_tomcat_users=1'
--is-tmpdir '$istmpdir=1; tmpdir=.' --is-tmpdir '$istmpdir=1; tmpdir=.'
@ -204,6 +238,11 @@ args=(
-u:,--user: manager_user= -u:,--user: manager_user=
-p:,--password: manager_password= -p:,--password: manager_password=
-m:,--wamap: wamaps -m:,--wamap: wamaps
--exclude: excludes
--replace-excludes: replace_excludes
--protect: protects
--rsync-option: rsync_options
--replace-rsync-options: replace_rsync_options
-b,--backup backup=1 -b,--backup backup=1
--no-backup backup=0 --no-backup backup=0
-B,--backup-only action=backup -B,--backup-only action=backup
@ -211,10 +250,11 @@ args=(
-n,--no-restart restart=0 -n,--no-restart restart=0
-r,--restart-only action=restart -r,--restart-only action=restart
--fake fake=1 --fake fake=1
--config-template action=config-template
) )
parse_args "$@"; set -- "${args[@]}" parse_args "$@"; set -- "${args[@]}"
[ -n "$action" ] || action=deploy
if [ "$action" == parse ]; then if [ "$action" == parse ]; then
CATALINA_BASE="$1" CATALINA_BASE="$1"
TOMCAT_VERSION="$2" TOMCAT_VERSION="$2"
@ -372,12 +412,14 @@ fi
# A partir de la liste des webapps et de WAMAPS, construire une liste de couples # A partir de la liste des webapps et de WAMAPS, construire une liste de couples
# waname:src pour la sauvegarde et/ou le déploiement # waname:src pour la sauvegarde et/ou le déploiement
[ -n "$fake" -o "$action" == config-template ] && require_webapps= || require_webapps=1 [ -n "$fake" -o "$action" == config-template ] && will_deploy= || will_deploy=1
if [ $# -eq 0 -a -n "$require_webapps" ]; then if [ $# -eq 0 -a -n "$will_deploy" ]; then
[ -d WEB-INF ] && src=. || src= [ -d WEB-INF ] && src=. || src=
read_value "Veuillez entrer la webapp à déployer" src "$src" O read_value "Veuillez entrer la webapp à déployer" src "$src" O
set -- "$src" set -- "$src"
elif [ $# -eq 0 -a "$action" == config-template ]; then
[ -d WEB-INF ] && set .
fi fi
srcs=() srcs=()
@ -400,7 +442,7 @@ for src in "$@"; do
eerror "$src: fichier ou répertoire introuvable" eerror "$src: fichier ou répertoire introuvable"
fi fi
done done
[ ${#srcs[*]} -gt 0 -o -z "$require_webapps" ] || die [ ${#srcs[*]} -gt 0 -o -z "$will_deploy" ] || die
deploymaps=() deploymaps=()
for src in "${srcs[@]}"; do for src in "${srcs[@]}"; do
@ -438,10 +480,13 @@ if [ "$action" == config-template ]; then
echo >"$toinstconf" "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 echo >"$toinstconf" "# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Fichiers à exclure de la source lors du déploiement # Fichiers à exclure de la source lors du déploiement
#$(echo_seta2 EXCLUDES) #EXCLUDES=()
# Fichiers à protéger dans la destination lors du déploiement # Fichiers à protéger dans la destination lors du déploiement
#$(echo_seta2 PROTECTS)" #PROTECTS=()
# Options supplémentaires de rsync à utiliser pour le déploiement
#RSYNC_OPTIONS=()"
fi fi
done done
exit 0 exit 0
@ -458,7 +503,7 @@ fi
## Déploiement ## Déploiement
if [ "$action" == deploy ]; then if [ "$action" == deploy ]; then
[ -n "$CATALINA_BASE" -o -n "$fake" ] || die "Vous devez spécifier l'option --catalina-base" [ -n "$CATALINA_BASE" -o -z "$will_deploy" ] || die "Vous devez spécifier l'option --catalina-base"
if [ -n "$fake" ]; then if [ -n "$fake" ]; then
# Afficher ce qu'il faut faire # Afficher ce qu'il faut faire
@ -469,7 +514,21 @@ if [ "$action" == deploy ]; then
setx srcname=basename -- "$src" setx srcname=basename -- "$src"
dest="${CATALINA_BASE:-CATALINA_BASE}/webapps/$waname" dest="${CATALINA_BASE:-CATALINA_BASE}/webapps/$waname"
etitle "$waname" etitle "$waname"
evalx qvals rsync "${RSYNC_OPTIONS[@]}" "$src/" "$dest" // eecho if [ -f "$src/.toinst.conf" ]; then
etitle "Variables locales"
(
EXCLUDES=()
PROTECTS=()
RSYNC_OPTIONS=()
source "$src/.toinst.conf"
for var in EXCLUDES PROTECTS RSYNC_OPTIONS; do
eecho "$(echo_seta2 "$var")"
done
)
eend
fi
build_rsync_options "$src"
evalx qvals rsync "${rsync_options[@]}" "$src/" "$dest" // eecho
evalx qvals chmod -R u=rwX,g=rX,o=rX "$dest" // eecho evalx qvals chmod -R u=rwX,g=rX,o=rX "$dest" // eecho
if [ -n "$TOMCAT_USER" ]; then if [ -n "$TOMCAT_USER" ]; then
evalx qvals chown -R "$TOMCAT_USER:$TOMCAT_GROUP" "$dest" // eecho evalx qvals chown -R "$TOMCAT_USER:$TOMCAT_GROUP" "$dest" // eecho
@ -505,7 +564,8 @@ if [ "$action" == deploy ]; then
etitle "$srcname" etitle "$srcname"
estepi "Déploiement vers $dest" estepi "Déploiement vers $dest"
estep "Copie des fichiers" estep "Copie des fichiers"
if ! rsync "${RSYNC_OPTIONS[@]}" "$src/" "$dest"; then build_rsync_options "$src"
if ! rsync "${rsync_options[@]}" "$src/" "$dest"; then
eerror "Une erreur s'est produite pendant la copie des fichiers" eerror "Une erreur s'est produite pendant la copie des fichiers"
else else
error= error=