support des répertoires source maven et de l'interrogation de deploy pour: profil, déploiement des resources web, variables bounce, notag, exec, dbconfig, dbconfigmap

This commit is contained in:
Jephté Clain 2017-04-28 17:36:29 +04:00
parent f20cc48176
commit 4aaded5ab9
4 changed files with 194 additions and 35 deletions

View File

@ -416,29 +416,46 @@ OPTIONS
une liste de préfixes valides une liste de préfixes valides
--no-prefix --no-prefix
Ne jamais corriger un chemin. Ne jamais corriger un chemin.
-b Redémarrer les instances en mode bounce. -W, --webres
Par défaut, les instances sont arrêtées avant le déploiement, et Ne déployer que les resources web. Implique -n
redémarrées après -n, --no-tag
-W Ne déployer que les resources web. Implique -n Ne pas tagger les bundles déployés avec un numéro de version. En temps
-n Ne pas tagger les bundles déployés avec un numéro de version. Par normal, l'utilisateur est invité à compléter des informations telles que
défaut, l'utilisateur est invité à compléter des informations telles n° de version et date de release si ces informations ne sont pas
que n° de version et date de release si ces informations ne sont pas
disponible. disponible.
-x CMD -d, --active-dbconfig DBCONFIG
Spécifier le profil de connexion à utiliser par défaut pour tous les
eomodels du bundle. S'il faut un profil différent en fonction de l'eomodel, utiliser l'option -m
-m, --active-dbconfig-map EOMODEL:DBCONFIG
Spécifier un mapping entre un nom d'eomodel et le profil de connexion à
utiliser. Pour les eomodels qui ne sont pas spécifiés, la valeur par
défaut est utilisée si elle existe. Il est possible de spécifier
plusieurs mappings en les séparant par des virgules.
--stop-start
Redémarrer les instances de la manière classique: les instances sont
arrêtées avant le déploiement, et redémarrées après. C'est la valeur par
défaut.
-b, --bounce
Redémarrer les instances en mode bounce.
-x, --exec CMD
Exécuter la commande CMD après avoir effectué le déploiement" Exécuter la commande CMD après avoir effectué le déploiement"
} }
local autoprefix=1 bounce webinst notag scripts istmpdir tmpdir local istmpdir tmpdir autoprefix=1 bounce webinst notag default_dbconfig
scripts=() local -a dbconfigs scripts
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __woinst_display_help' \ --help '$exit_with __woinst_display_help' \
--is-tmpdir '$istmpdir=1; tmpdir=.' \
--prefix autoprefix=1 \ --prefix autoprefix=1 \
--no-prefix autoprefix= \ --no-prefix autoprefix= \
-b,--bounce bounce=1 \
-W,--webres webinst=1 \ -W,--webres webinst=1 \
-n,--notag notag=1 \ --tag notag= \
-n,--no-tag notag=1 \
-d:,--active-dbconfig: default_dbconfig= \
-m:,--active-dbconfig-map: dbconfigs \
--stop-start bounce= \
-b,--bounce bounce=1 \
-x:,--exec: scripts \ -x:,--exec: scripts \
--is-tmpdir '$istmpdir=1; tmpdir=.' \
@ args -- "$@" && @ args -- "$@" &&
set -- "${args[@]}" || { set -- "${args[@]}" || {
eerror "$args" eerror "$args"
@ -478,6 +495,19 @@ OPTIONS
copied=1 copied=1
fi fi
if [ -d "$src" ]; then if [ -d "$src" ]; then
setx name=basename -- "$src"
case "$src" in
*.woa|*.framework) ;;
*) # support projet maven
if [ ! -f "$src/pom.xml" ]; then
: # non, pas un projet maven
elif [ -d "$src/target/$name.woa" ]; then
src="$src/target/$name.woa"
elif [ -d "$src/target/$name.framework" ]; then
src="$src/target/$name.framework"
fi
;;
esac
if endswith "$src" .framework; then if endswith "$src" .framework; then
is_wofwkdir "$src" || { is_wofwkdir "$src" || {
eerror "Framework invalide: $(ppath "$src")" eerror "Framework invalide: $(ppath "$src")"
@ -513,6 +543,68 @@ OPTIONS
done done
eend eend
# Corriger les eomodelds
array_fix_paths dbconfigs ,
if [ -n "$default_dbconfig" -o ${#dbconfigs[*]} -gt 0 ]; then
etitle "Configuration des eomodels"
local -a eonames eomodels tmpeomodels
local eom dbc eoname eomodel dbconfig found
estep "Calcul de la liste des eomodels"
if [ ${#dbconfigs[*]} -eq 0 ]; then
for src in "${frameworks[@]}"; do
array_from_lines tmpeomodels "$(find "$src" -type d -name "*.eomodeld")"
for eom in "${tmpeomodels[@]}"; do
array_addu eonames "$(basename -- "$eom")"
done
done
for src in "${applications[@]}"; do
array_from_lines tmpeomodels "$(find "$src" -type d -name "*.eomodeld")"
for eom in "${tmpeomodels[@]}"; do
array_addu eonames "$(basename -- "$eom")"
done
done
else
for dbc in "${dbconfigs[@]}"; do
splitpair "$dbc" eom dbc
[ "${eom%.eomodeld}" != "$eom" ] || eom="$eom.eomodeld"
array_addu eonames "$(basename -- "$eom")"
done
fi
for eom in "${eonames[@]}"; do
for src in "${frameworks[@]}"; do
array_from_lines tmpeomodels "$(find "$src" -type d -name "$eom")"
array_extendu eomodels tmpeomodels
done
for src in "${applications[@]}"; do
array_from_lines tmpeomodels "$(find "$src" -type d -name "$eom")"
array_extendu eomodels tmpeomodels
done
done
for eomodel in "${eomodels[@]}"; do
setx eoname=basename -- "$eomodel"
if [ ! -f "$eomodel/index.eomodeld" ]; then
ewarn "$eomodel: eomode invalide"
continue
fi
found=
for dbc in "${dbconfigs[@]}"; do
splitpair "$dbc" eom dbconfig
[ "${eom%.eomodeld}" != "$eom" ] || eom="$eom.eomodeld"
if [ "$(basename -- "$eom")" == "$eoname" ]; then
found="$dbconfig"
break
fi
done
[ -z "$found" -a -n "$default_dbconfig" ] && found="$default_dbconfig"
if [ -n "$found" ]; then
estep "$eomodel [$found]"
sed -i "/^ *activeDatabaseConfigName *=/s/=.*;/=\"$found\";/" "$eomodel/index.eomodeld"
fi
done
fi
# Tagger les bundles # Tagger les bundles
if [ -z "$webinst" -a -z "$notag" ]; then if [ -z "$webinst" -a -z "$notag" ]; then
etitle "Tagger les bundles" etitle "Tagger les bundles"

View File

@ -235,22 +235,24 @@ eend
## Déploiement ## Déploiement
# sur l'hôte distant, ne rendre interactif qu'à partir de -yy # sur l'hôte distant, ne rendre non interactif qu'à partir de -yy
rinteraction=$__interaction rinteraction=$__interaction
[ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1)) [ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1))
for host in "${hosts[@]}"; do for host in "${hosts[@]}"; do
if [ "$host" == "localhost" ]; then if [ "$host" == "localhost" ]; then
etitle -s "Déploiement sur l'hôte local" etitle "Déploiement sur l'hôte local"
"$archive" ${tmproot:+--tmproot "$tmproot"} -- "${webapps[@]}" "$@" "${toinst_options[@]}" "$archive" ${tmproot:+--tmproot "$tmproot"} -- "${webapps[@]}" "$@" "${toinst_options[@]}"
eend eend
else else
splituserhost "$host" user host splituserhost "$host" user host
[ -n "$user" ] || user=root [ -n "$user" ] || user=root
etitle -s "Déploiement sur $user@$host" etitle "Déploiement sur $user@$host"
estep "Copie de l'archive" estep "Copie de l'archive"
scp -S "$SSH" "$archive" "$user@$host:" || die scp -S "$SSH" "$archive" "$user@$host:" || die
estep "Lancement du script de déploiement" estep "Lancement du script de déploiement"
"$SSH" -qt "$user@$host" "\ "$SSH" -qt "$user@$host" "\
__interaction=$rinteraction __interaction=$rinteraction
@ -259,6 +261,7 @@ __tlevel=$(qval "$__tlevel")
export __interaction __estack __tlevel export __interaction __estack __tlevel
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG ${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- "${webapps[@]}" "$@" "${toinst_options[@]}")" }$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- "${webapps[@]}" "$@" "${toinst_options[@]}")"
eend eend
fi fi
done done

12
ruinst
View File

@ -222,7 +222,7 @@ fi
## Répertoires à déployer et hôtes sur lesquels faire le déploiement ## Répertoires à déployer et hôtes sur lesquels faire le déploiement
confirm_src= confirm_src=
if [ $# -eq 0 ] || [[ "$1" == -* ]] || [[ "$1" == *=* ]]; then if [ $# -eq 0 ] || [[ "$1" == -* ]] || [[ "$1" == *=* ]]; then
# pas d'argument, ou c'est une option (qui fait donc partie des arguments de toinst) # pas d'argument, ou c'est une option (qui fait donc partie des arguments de uinst)
src=. src=.
confirm_src=1 confirm_src=1
else else
@ -247,7 +247,7 @@ $(array_to_lines host "" " ")"
fi fi
if [ -n "$confirm_src" ]; then if [ -n "$confirm_src" ]; then
# pas d'argument, ou c'est une option (qui fait donc partie des arguments de toinst) # pas d'argument, ou c'est une option (qui fait donc partie des arguments de uinst)
read_value "Entrez le répertoire à déployer" src "$src" O read_value "Entrez le répertoire à déployer" src "$src" O
fi fi
@ -273,13 +273,14 @@ if [ -n "$make_archive" ]; then
ac_set_tmpfile archive ac_set_tmpfile archive
archivename="$(basename "$archive")" archivename="$(basename "$archive")"
etitle "Création de l'archive pour le déploiement" \ etitle "Création de l'archive pour le déploiement"
"$scriptdir/mkusfx" --tmp-archive --self-contained -o "$archive" "$src" || die "$scriptdir/mkusfx" --tmp-archive --self-contained -o "$archive" "$src" || die
eend
fi fi
## Déploiement ## Déploiement
# sur l'hôte distant, ne rendre interactif qu'à partir de -yy # sur l'hôte distant, ne rendre non interactif qu'à partir de -yy
rinteraction=$__interaction rinteraction=$__interaction
[ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1)) [ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1))
@ -297,8 +298,10 @@ for host in "${hosts[@]}"; do
[ -n "$user" ] || user=root [ -n "$user" ] || user=root
etitle -s "Déploiement sur $user@$host" etitle -s "Déploiement sur $user@$host"
estep "Copie de l'archive" estep "Copie de l'archive"
scp -S "$SSH" "$archive" "$user@$host:" || die scp -S "$SSH" "$archive" "$user@$host:" || die
estep "Lancement du script de déploiement" estep "Lancement du script de déploiement"
"$SSH" -qt "$user@$host" "\ "$SSH" -qt "$user@$host" "\
__interaction=$rinteraction __interaction=$rinteraction
@ -307,6 +310,7 @@ __tlevel=$(qval "$__tlevel")
export __interaction __estack __tlevel export __interaction __estack __tlevel
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG ${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")" }$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")"
eend eend
fi fi
done done

88
rwoinst
View File

@ -9,6 +9,10 @@ function display_help() {
USAGE USAGE
$scriptname [-H host] [-T tmproot] <file|archive|dir>... [-- options de woinst] $scriptname [-H host] [-T tmproot] <file|archive|dir>... [-- options de woinst]
note: à cause d'une limitation de makeself, les options de toinst ne devraient
pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces
caractères n'est pas garanti.
OPTIONS OPTIONS
-T, --tmproot TMPROOT -T, --tmproot TMPROOT
Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple Spécifier le répertoire temporaire sur l'hôte distant, comme par exemple
@ -16,8 +20,8 @@ OPTIONS
un /tmp minuscule de 16 Mo. un /tmp minuscule de 16 Mo.
-S, --ssh SSH -S, --ssh SSH
Spécifier le programme à utiliser pour la connection par ssh. Spécifier le programme à utiliser pour la connection par ssh.
-h, -H, --host hosts -h, --host hosts
-h, -H, --host @hostsfile -h, --host @hostsfile
Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour Spécifier un ou plusieurs hôtes sur lequels faire le déploiement. Pour
spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois spécifier plusieurs hôtes, il est possible d'utiliser plusieurs fois
l'option -h, ou spécifier en une seule fois plusieurs hôtes en les l'option -h, ou spécifier en une seule fois plusieurs hôtes en les
@ -50,7 +54,10 @@ OPTIONS
déploiement est interrogée pour avoir cette information. déploiement est interrogée pour avoir cette information.
-c, --deploy-config CONFNAME -c, --deploy-config CONFNAME
Cette option permet de spécifier le nom de la configuration à utiliser Cette option permet de spécifier le nom de la configuration à utiliser
pour effectuer la requête. Par défaut, utiliser le nom 'rwoinst'" pour effectuer la requête. Par défaut, utiliser le nom 'rwoinst'
-p, --deploy-profile PROFILE
Spécifier le profil à utiliser pour l'interrogation de la configuration
locale de déploiement. Par défaut, aucun profil n'est sélectionné."
} }
__PARSED_HOSTS=() __PARSED_HOSTS=()
@ -137,8 +144,10 @@ function deploy_to() {
[ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1)) [ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1))
etitle "Vers $user@$host" etitle "Vers $user@$host"
estep "Copie de l'archive" estep "Copie de l'archive"
scp -S "$SSH" "$archive" "$user@$host:" || r=1 scp -S "$SSH" "$archive" "$user@$host:" || r=1
if [ -z "$r" ]; then if [ -z "$r" ]; then
estep "Lancement du script de déploiement" estep "Lancement du script de déploiement"
"$SSH" -qt "$user@$host" "\ "$SSH" -qt "$user@$host" "\
@ -149,6 +158,7 @@ export __interaction __estack __tlevel
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG ${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")" || r=1 }$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")" || r=1
fi fi
eend eend
fi fi
return ${r:-0} return ${r:-0}
@ -161,6 +171,7 @@ hosts=()
whosts=() whosts=()
deploy_enable=1 deploy_enable=1
deploy_confname=rwoinst deploy_confname=rwoinst
deploy_profile=
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-T:,--tmproot: tmproot= \ -T:,--tmproot: tmproot= \
@ -170,6 +181,7 @@ parse_opts "${PRETTYOPTS[@]}" \
--deploy deploy_enable=1 \ --deploy deploy_enable=1 \
--no-deploy deploy_enable= \ --no-deploy deploy_enable= \
-c:,--deploy-config deploy_confname= \ -c:,--deploy-config deploy_confname= \
-p:,--deploy-profile: deploy_profile= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
: "${SSH:=ssh}" : "${SSH:=ssh}"
@ -177,7 +189,7 @@ parse_opts "${PRETTYOPTS[@]}" \
## Bundle à déployer et hôtes sur lesquels faire le déploiement ## Bundle à déployer et hôtes sur lesquels faire le déploiement
confirm_bundle= confirm_bundle=
if [ $# -eq 0 ] || [[ "$1" == -* ]] || [[ "$1" == *=* ]]; then if [ $# -eq 0 ] || [[ "$1" == -* ]] || [[ "$1" == *=* ]]; then
# pas d'argument, ou c'est une option (qui fait donc partie des arguments de toinst) # pas d'argument, ou c'est une option (qui fait donc partie des arguments de woinst)
case "$(basename -- "$(pwd)")" in case "$(basename -- "$(pwd)")" in
*.woa|*.framework) bundle=.;; *.woa|*.framework) bundle=.;;
*) bundle=;; *) bundle=;;
@ -187,16 +199,51 @@ else
bundle="$1" bundle="$1"
fi fi
woinst_options=()
if array_isempty hosts && [ -n "$deploy_enable" -a -n "$bundle" ]; then if array_isempty hosts && [ -n "$deploy_enable" -a -n "$bundle" ]; then
urequire deploy urequire deploy
deploy_setconf "$deploy_confname" deploy_setconf "$deploy_confname"
if deploy_loadconf; then if deploy_loadconf; then
setxx bundlename=abspath "$bundle" // basename -- setxx bundlename=abspath "$bundle" // basename --
if eval "$(deploy_query -v host DEST wobundle rwoinst_bundle "" shell "$bundlename")"; then host=(); bounce=; notag=; exec=; dbconfig=; dbconfigmap=
check_interaction -c && einfo "$bundlename: ce bundle sera déployé vers les hôtes suivants: if eval "$(deploy_query -v host,bounce,notag,exec,dbconfig,dbconfigmap DEST wobundle rwoinst_bundle "$deploy_profile" shell "$bundlename")"; then
$(array_to_lines host "" " ")" array_copy deploy_hosts host
deploy_options=()
[ -n "$bounce" ] && array_add deploy_options -b
[ -n "$notag" ] && array_add deploy_options -n
if [ -n "$exec" ]; then
for x in "${exec[@]}"; do
array_add deploy_options -x "$x"
done
fi
[ -n "$dbconfig" ] && array_add deploy_options -d "$dbconfig"
if [ -n "$dbconfigmap" ]; then
for m in "${dbconfigmap[@]}"; do
array_add deploy_options -m "$m"
done
fi
deploy_whosts=()
host=(); destdir=
if eval "$(deploy_query -v host,destdir DEST wobundle rwoinst_webres "$deploy_profile" shell "$bundlename")"; then
for wh in "${host[@]}"; do
array_add deploy_whosts "$wh:$destdir"
done
fi
msg="$bundlename: ce bundle sera déployé vers les hôtes suivants:
$(array_to_lines deploy_hosts "" " ")"
if [ ${#deploy_whosts[*]} -gt 0 -o ${#deploy_options[*]} -gt 0 ]; then
msg="$msg
avec le(s) paramètre(s) suivant(s):"
[ ${#deploy_whosts[*]} -gt 0 ] && msg="$msg
$(array_to_lines deploy_whosts "" " --whost ")"
[ ${#deploy_options[*]} -gt 0 ] && msg="$msg
$(qvals "${deploy_options[@]}")"
fi
check_interaction -c && einfo "$msg"
ask_any "Voulez-vous continuer?" Oq || die ask_any "Voulez-vous continuer?" Oq || die
array_copy hosts host array_extend hosts deploy_hosts
array_extend woinst_options deploy_options
array_extend whosts deploy_whosts
if [ -n "$confirm_bundle" ]; then if [ -n "$confirm_bundle" ]; then
confirm_bundle= confirm_bundle=
set -- "$bundle" "$@" set -- "$bundle" "$@"
@ -206,7 +253,7 @@ $(array_to_lines host "" " ")"
fi fi
if [ -n "$confirm_bundle" ]; then if [ -n "$confirm_bundle" ]; then
# pas d'argument, ou c'est une option (qui fait donc partie des arguments de toinst) # pas d'argument, ou c'est une option (qui fait donc partie des arguments de woinst)
read_value "Veuillez entrer la bundle à déployer" bundle "$bundle" O read_value "Veuillez entrer la bundle à déployer" bundle "$bundle" O
set -- "$bundle" "$@" set -- "$bundle" "$@"
fi fi
@ -236,6 +283,19 @@ while [ -n "$1" ]; do
cp_R "$src" "$workdir" || die cp_R "$src" "$workdir" || die
elif [ -d "$src" ]; then elif [ -d "$src" ]; then
src="$(abspath "$src")" src="$(abspath "$src")"
setx srcname=basename -- "$src"
case "$src" in
*.woa|*.framework) ;;
*) # support projet maven
if [ ! -f "$src/pom.xml" ]; then
: # non, pas un projet maven
elif [ -d "$src/target/$srcname.woa" ]; then
src="$src/target/$srcname.woa"
elif [ -d "$src/target/$srcname.framework" ]; then
src="$src/target/$srcname.framework"
fi
;;
esac
if endswith "$src" .framework; then if endswith "$src" .framework; then
is_wofwkdir "$src" || die "Framework invalide: $(ppath "$src")" is_wofwkdir "$src" || die "Framework invalide: $(ppath "$src")"
elif endswith "$src" .woa; then elif endswith "$src" .woa; then
@ -254,7 +314,7 @@ while [ -n "$1" ]; do
done done
estep "Copie de l'environnement de déploiement" estep "Copie de l'environnement de déploiement"
mkdir -p "$workdir/lib" mkdir "$workdir/lib"
ulibsync "$workdir/lib" ulibsync "$workdir/lib"
cp "$scriptdir/woinst.sh" "$workdir" cp "$scriptdir/woinst.sh" "$workdir"
chmod +x "$workdir/woinst.sh" chmod +x "$workdir/woinst.sh"
@ -272,16 +332,16 @@ eend
etitle "Déploiement des bundles" etitle "Déploiement des bundles"
for host in "${hosts[@]}"; do for host in "${hosts[@]}"; do
deploy_to "$archive" "$host" "$tmproot" "$@" || die deploy_to "$archive" "$host" "$tmproot" "$@" "${woinst_options[@]}" || die
done done
eend eend
if [ ${#whosts[*]} -gt 0 ]; then if [ ${#whosts[*]} -gt 0 ]; then
etitle "Déploiement des resources web" etitle "Déploiement des resources web"
for hostdest in "${whosts[@]}"; do for hostdestdir in "${whosts[@]}"; do
splitpair "$hostdest" host destdir splitpair "$hostdestdir" host destdir
deploy_to "$archive" "$host" "$tmproot" \ deploy_to "$archive" "$host" "$tmproot" \
-y -W ${destdir:+HTDOCSDIR="$destdir"} "$@" || die -y -W ${destdir:+HTDOCSDIR="$destdir"} "$@" "${woinst_options[@]}" || die
done done
eend eend
fi fi