support deploydb et pffprofile

This commit is contained in:
Jephté Clain 2018-04-26 23:21:38 +04:00
parent 7356c1da73
commit 4535b67045
8 changed files with 483 additions and 182 deletions

View File

@ -36,7 +36,7 @@ if [ -z "$webinst" ]; then
etitle "Calcul des instances à relancer" \ etitle "Calcul des instances à relancer" \
compute_apps apps_to_restart appinfos "${apps_to_restart[@]}" compute_apps apps_to_restart appinfos "${apps_to_restart[@]}"
if [ -z "$bounce" ]; then if [ "$restart" == yes ]; then
# Arrêter les instances # Arrêter les instances
disable_autorecover=1 disable_autorecover=1
stop_apps -a apps_to_start "" "" "${apps_to_restart[@]}" stop_apps -a apps_to_start "" "" "${apps_to_restart[@]}"
@ -216,11 +216,11 @@ fi
################################################################################ ################################################################################
if [ -z "$webinst" ]; then if [ -z "$webinst" ]; then
if [ -z "$bounce" ]; then if [ "$restart" == yes ]; then
# Démarrer les instances # Démarrer les instances
enable_autorecover=1 enable_autorecover=1
start_apps "" "" "${apps_to_start[@]}" start_apps "" "" "${apps_to_start[@]}"
else elif [ "$restart" == bounce ]; then
# Relancer les applications en mode bounce # Relancer les applications en mode bounce
bounce_apps "" "" "${apps_to_restart[@]}" bounce_apps "" "" "${apps_to_restart[@]}"
fi fi

View File

@ -55,6 +55,7 @@ function uinst() {
local -a modes local -a modes
local -a root_scripts local -a root_scripts
local uinst2s local uinst2s
local ddb_enable ddb_profile ddb_conf
uinst_nolocal "$@" uinst_nolocal "$@"
} }
@ -94,6 +95,28 @@ OPTIONS
la valeur de destdir, forcer le déploiement distant avec ssh+rsync, même la valeur de destdir, forcer le déploiement distant avec ssh+rsync, même
si l'hôte et l'utilisateur correspondent aux valeurs courantes. Cette si l'hôte et l'utilisateur correspondent aux valeurs courantes. Cette
option initialise la valeur destdir_force_remote option initialise la valeur destdir_force_remote
--deploydb
--nd, --no-deploydb
Autoriser (respectivement interdire) l'utilisation de la configuration
locale de déploiement pour identifier la source et/ou la destination
s'ils ne sont pas spécifiés. Par défaut, la configuration locale de
déploiement est utilisée.
Cette option et toutes celles associées n'est utilisée que pour la
méthode de déploiement uinst:rsync
-p, --dp, --deploydb-profile PROFILENAME
Spécifier un ou plusieurs profils séparés par des virgules pour le
déploiement avec la configuration locale de déploiement. NONE est la
valeur par défaut et signifie de ne sélectionner que les définitions
sans profil. ALL signifie de ne pas tenir compte des profils dans les
définitions.
-A, --all-profiles
-P, --prod
-T, --test
Raccourcis respectivement pour -pALL, -pprod et -ptest
-c, --dc, --deploydb-config CONFNAME
Cette option permet de spécifier un fichier de configuration ou le nom
de la configuration locale de déploiement à utiliser pour effectuer la
requête. Par défaut, utiliser le nom 'uinst.conf'
-a, --auto -a, --auto
Si la source n'est pas spécifiée, déterminer le répertoire à déployer Si la source n'est pas spécifiée, déterminer le répertoire à déployer
automatiquement (c'est la valeur par défaut) automatiquement (c'est la valeur par défaut)
@ -143,6 +166,9 @@ OPTIONS
__uinst_init __uinst_init
UINST_ACTION= UINST_ACTION=
UINST_AUTOSRCDIR=1 UINST_AUTOSRCDIR=1
ddb_enable='1'
ddb_profile='NONE'
ddb_conf='uinst.conf'
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with __uinst_display_help' \ --help '$exit_with __uinst_display_help' \
--is-tmpdir UINST_ISTMPDIR \ --is-tmpdir UINST_ISTMPDIR \
@ -152,6 +178,13 @@ OPTIONS
-h:,-H:,--host: '$__uinst_addvar destdir_override_userhost "$value_"' \ -h:,-H:,--host: '$__uinst_addvar destdir_override_userhost "$value_"' \
-S:,--ssh: '$__uinst_addvar destdir_ssh "$value_"' \ -S:,--ssh: '$__uinst_addvar destdir_ssh "$value_"' \
--force-remote '$__uinst_addvar destdir_force_remote 1' \ --force-remote '$__uinst_addvar destdir_force_remote 1' \
--deploydb ddb_enable=1 \
--nd,--no-deploydb ddb_enable= \
-p:,--dp:,--deploydb-profile ddb_profile= \
-A,--all-profiles ddb_profile=ALL \
-P,--prod ddb_profile=prod \
-T,--test ddb_profile=test \
-c:,--dc:,--deploydb-config ddb_conf= \
-a,--auto UINST_AUTOSRCDIR=1 \ -a,--auto UINST_AUTOSRCDIR=1 \
--no-auto UINST_AUTOSRCDIR= \ --no-auto UINST_AUTOSRCDIR= \
--prefix UINST_AUTOPREFIX=1 \ --prefix UINST_AUTOPREFIX=1 \
@ -229,7 +262,7 @@ function __uinst_init() {
UINST_CONFIG_VARS=() UINST_CONFIG_VARS=()
UINST_CONFIG_VARCMDS=() UINST_CONFIG_VARCMDS=()
UINST_PROTECTED_VARS=(UINST_PROTECTED_VARS UINST_CONFIG_VARS UINST_CONFIG_VARCMDS) UINST_PROTECTED_VARS=(UINST_PROTECTED_VARS UINST_CONFIG_VARS UINST_CONFIG_VARCMDS UINST_STANDALONE)
__uinst_protectvars configure_variables \ __uinst_protectvars configure_variables \
UINST_ORIGSRC UINST_SRCDIR \ UINST_ORIGSRC UINST_SRCDIR \
@ -921,6 +954,52 @@ function __uinst_check_rsync() {
function __uinst_rsync() { function __uinst_rsync() {
# Déployer les fichiers de $srcdir avec rsync # Déployer les fichiers de $srcdir avec rsync
# configuration locale de déploiement
if [ -n "$ddb_enable" -a -n "$UINST_STANDALONE" ]; then
local -a deploydb cmds tmpcmds
deploydb=(
"$scriptdir/lib/nulib/deploydb"
--missing-ok
${ddb_conf:+-c "$ddb_conf"}
-m uinst
--run -r uinst.query_xuinst "$script"
)
cmds=()
array_from_lines tmpcmds "$("${deploydb[@]}" "$srcdir" "" "$ddb_profile" "$@")"
array_extend cmds tmpcmds
if [ ${#cmds[*]} -gt 0 ]; then
if check_interaction -c; then
if [ ${#cmds[*]} -eq 1 ]; then
einfo "La commande suivante va être lancée:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[0]}"; do
eecho " ${cmd#$script --no-deploydb }"
done
else
einfo "Les commandes suivantes seront lancées:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[@]}"; do
eecho " ... ${cmd#$script --no-deploydb }"
done
fi
read -p "Confirmez ou attendez 4 secondes [On] " -t 4 r
if [ $? -gt 128 ]; then
echo # cosmetic
elif [ $? -le 128 -a -n "$r" ]; then
is_yes "$r" || die
fi
fi
r=0
for cmd in "${cmds[@]}"; do
einfo "$cmd"
eval "$cmd" || r=1
done
exit $r
elif [ "$ddb_profile" != "ALL" ]; then
ewarn "Aucune configuration locale de déploiement n'a été trouvée pour le profil $ddb_profile"
fi
fi
# initialiser les valeurs par défaut, mais penser à restaurer srcdir # initialiser les valeurs par défaut, mais penser à restaurer srcdir
force_rsync_options=(-av --exclude CVS --exclude .svn --exclude /.git/) force_rsync_options=(-av --exclude CVS --exclude .svn --exclude /.git/)
rsync_options=() rsync_options=()

View File

@ -416,13 +416,17 @@ 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.
--bundle
Déployer le bundle entier. C'est l'option par défaut.
-W, --webres -W, --webres
Ne déployer que les resources web. Implique -n Ne déployer que les resources web. Implique --no-tag
--tag
Tagger les bundles déployés avec un numéro de version. L'utilisateur est
invité à compléter des informations telles que n° de version et date de
release si ces informations ne sont pas disponible. C'est l'option par
défaut.
-n, --no-tag -n, --no-tag
Ne pas tagger les bundles déployés avec un numéro de version. En temps Ne pas tagger les bundles déployés avec un numéro de version.
normal, l'utilisateur est invité à compléter des informations telles que
n° de version et date de release si ces informations ne sont pas
disponible.
-d, --active-dbconfig DBCONFIG -d, --active-dbconfig DBCONFIG
Spécifier le profil de connexion à utiliser par défaut pour tous les 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 eomodels du bundle. S'il faut un profil différent en fonction de l'eomodel, utiliser l'option -m
@ -437,24 +441,28 @@ OPTIONS
défaut. défaut.
-b, --bounce -b, --bounce
Redémarrer les instances en mode bounce. Redémarrer les instances en mode bounce.
--no-restart
Ne pas redémarrer les instances
-x, --exec CMD -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 istmpdir tmpdir autoprefix=1 bounce webinst notag default_dbconfig local istmpdir tmpdir autoprefix=1 restart=yes webinst notag default_dbconfig
local -a dbconfigs 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=.' \ --is-tmpdir '$istmpdir=1; tmpdir=.' \
--prefix autoprefix=1 \ --prefix autoprefix=1 \
--no-prefix autoprefix= \ --no-prefix autoprefix= \
--bundle webinst= \
-W,--webres webinst=1 \ -W,--webres webinst=1 \
--tag notag= \ --tag notag= \
-n,--no-tag notag=1 \ -n,--no-tag notag=1 \
-d:,--active-dbconfig: default_dbconfig= \ -d:,--active-dbconfig: default_dbconfig= \
-m:,--active-dbconfig-map: dbconfigs \ -m:,--active-dbconfig-map: dbconfigs \
--stop-start bounce= \ --stop-start restart=yes \
-b,--bounce bounce=1 \ -b,--bounce restart=bounce \
-no-restart restart=no \
-x:,--exec: scripts \ -x:,--exec: scripts \
@ args -- "$@" && @ args -- "$@" &&
set -- "${args[@]}" || { set -- "${args[@]}" || {
@ -643,7 +651,7 @@ dans NEXT_ROOT = ${NEXT_ROOT:-/}
# Faire le déploiement # Faire le déploiement
local configfile variable local configfile variable
ac_set_tmpfile configfile ac_set_tmpfile configfile
for variable in "${variables[@]}" bounce webinst ULIBDIR __estack __tlevel; do for variable in "${variables[@]}" restart webinst ULIBDIR __estack __tlevel; do
echo_setv "$variable" "${!variable}" >>"$configfile" echo_setv "$variable" "${!variable}" >>"$configfile"
done done
for array in variables scripts applications frameworks; do for array in variables scripts applications frameworks; do

185
rtoinst
View File

@ -7,14 +7,14 @@ function display_help() {
uecho "$scriptname: Déploiement distant avec toinst uecho "$scriptname: Déploiement distant avec toinst
USAGE USAGE
$scriptname [-h host] [-T tmproot] <archive|dir> [-- options de toinst] $scriptname [-h host] [-G tmproot] <archive|dir> [-- options de toinst]
note: à cause d'une limitation de makeself, les options de toinst ne devraient 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 pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces
caractères n'est pas garanti. caractères n'est pas garanti.
OPTIONS OPTIONS
-T, --tmproot TMPROOT -G, --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
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut /var/tmp. Cette option est utile pour les vservers, qui ont par défaut
un /tmp minuscule de 16 Mo. un /tmp minuscule de 16 Mo.
@ -34,20 +34,45 @@ OPTIONS
user@host, e.g -h user@host user@host, e.g -h user@host
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
hostsfile, à raison d'un hôte par ligne. hostsfile, à raison d'un hôte par ligne.
--deploy --deploydb
--no-deploy --nd, --no-deploydb
Autoriser (respectivement interdire) l'utilisation de la configuration Autoriser (respectivement interdire) l'utilisation de la configuration
locale de déploiement pour identifier la destination si aucun hôte n'est locale de déploiement pour identifier la source et/ou la destination
spécifié. s'ils ne sont pas spécifiés. Par défaut, la configuration locale de
Par défaut, si aucun hôte n'est spécifié, la configuration locale de déploiement est utilisée.
déploiement est interrogée pour avoir cette information. -p, --dp, --deploydb-profile PROFILENAME
-c, --deploy-config CONFNAME Spécifier un ou plusieurs profils séparés par des virgules pour le
Spécifier le nom de la configuration à utiliser pour l'interrogation de déploiement avec la configuration locale de déploiement. NONE est la
la configuration locale de déploiement. Par défaut, utiliser le nom valeur par défaut et signifie de ne sélectionner que les définitions
'rtoinst' sans profil. ALL signifie de ne pas tenir compte des profils dans les
-p, --deploy-profile PROFILE définitions.
Spécifier le profil à utiliser pour l'interrogation de la configuration -A, --all-profiles
locale de déploiement. Par défaut, aucun profil n'est sélectionné." -P, --prod
-T, --test
Raccourcis respectivement pour -pALL, -pprod et -ptest
-l, --select-pffprofile PFFPROFILE
Spécifier un ou plusieurs profils pff séparés par des virgules pour le
déploiement avec la configuration locale de déploiement. NONE signifie
de ne sélectionner que les définitions sans profil pff. ALL est la
valeur par défaut et signifie de ne pas tenir compte des profils pff
dans les définitions.
Cette option est indépendante des options --pffprofile / --no-pffprofile
--pffprofile-support
--no-pffprofile-support
Activer le support du profil pff (resp. le désactiver). Par défaut, le
support est activé.
-j, --ensure-pffprofile
Si le support du profil pff est activé, s'assurer que la webapp est dans
le profil pff spécifié dans la configuration locale de déploiement avant
le déploiement. C'est la valeur par défaut.
-e, --set-pffprofile
Si le support du profil pff est activé, forcer le basculement vers le
profil spécifié dans la configuration locale de déploiement avant le
déploiement.
-c, --dc, --deploydb-config CONFNAME
Cette option permet de spécifier un fichier de configuration ou le nom
de la configuration locale de déploiement à utiliser pour effectuer la
requête. Par défaut, utiliser le nom 'toinst.conf'"
} }
__PARSED_HOSTS=() __PARSED_HOSTS=()
@ -117,67 +142,120 @@ action=deploy
tmproot= tmproot=
SSH= SSH=
hosts=() hosts=()
deploy_enable=1 ddb_enable=1
deploy_confname=rtoinst ddb_profile=NONE
deploy_profile= ddb_conf=toinst.conf
ddb_pffprofile=ALL
pff_enable=1
pff_support=ensure
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-T:,--tmproot: tmproot= \ -G:,--tmproot: tmproot= \
-S:,--ssh: SSH= \ -S:,--ssh: SSH= \
-h:,-H:,--host: hosts \ -h:,-H:,--host: hosts \
--deploy deploy_enable=1 \ --deploydb ddb_enable=1 \
--no-deploy deploy_enable= \ --nd,--no-deploydb ddb_enable= \
-c:,--deploy-config: deploy_confname= \ -p:,--dp:,--deploydb-profile ddb_profile= \
-p:,--deploy-profile: deploy_profile= \ -A,--all-profiles ddb_profile=ALL \
-P,--prod ddb_profile=prod \
-T,--test ddb_profile=test \
-l:,--select-pffprofile: ddb_pffprofile= \
--pffprofile-support pff_enable=1 \
--no-pffprofile-support pff_enable= \
-j,--ensure-pffprofile pff_support=ensure \
-e,--set-pffprofile pff_support=set \
-c:,--dc:,--deploydb-config ddb_conf= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
: "${SSH:=ssh}" : "${SSH:=ssh}"
## webapp à déployer et hôtes sur lesquels faire le déploiement ## webapp à déployer et hôtes sur lesquels faire le déploiement
confirm_webapp=
# quels informations avons-nous?
array_isempty hosts && has_hosts= || has_hosts=1
if [ $# -eq 0 ] || [[ "$1" == -* ]]; then if [ $# -eq 0 ] || [[ "$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 toinst)
[ -d WEB-INF ] && webapp=. || webapp= has_webapp=
confirm_webapp=1
else else
webapp="$1" webapp="$1"
has_webapp=1
shift
fi fi
toinst_options=() # configuration locale de déploiement
if array_isempty hosts && [ -n "$deploy_enable" -a -n "$webapp" ]; then if [ -n "$ddb_enable" ]; then
urequire deploy args=()
deploy_setconf "$deploy_confname" if [ -n "$pff_enable" ]; then
if deploy_loadconf; then array_add args "pffprofile_support%=$pff_support"
setxx waname=abspath "$webapp" // basename -- else
if eval "$(deploy_query -v host,wamap,protect DEST webapp rtoinst_deploy "$deploy_profile" shell "$waname")"; then array_add args "pffprofile_support%=false"
msg="$waname: cette webapp sera déployée vers les hôtes suivants: fi
$(array_to_lines host "" " ")"
if [ -n "$wamap" -o -n "$protect" ]; then deploydb=(
msg="$msg "$scriptdir/lib/nulib/deploydb"
avec le(s) paramètre(s) suivant(s):" --missing-ok
[ -n "$wamap" ] && msg="$msg ${ddb_conf:+-c "$ddb_conf"}
--wamap $(qval "$wamap")" -m toinst
[ -n "$protect" ] && msg="$msg --run -r toinst.query_rtoinst "$script"
--protect $(qval "$protect")" )
cmds=()
if [ -n "$has_hosts" ]; then
fix_hosts
for host in "${hosts[@]}"; do
array_from_lines tmpcmds "$("${deploydb[@]}" "$webapp" "$host" "$ddb_profile" "$ddb_pffprofile" "${args[@]}")"
array_extend cmds tmpcmds
done
elif [ -n "$has_webapp" ]; then
array_from_lines tmpcmds "$("${deploydb[@]}" "$webapp" "" "$ddb_profile" "$ddb_pffprofile" "${args[@]}")"
array_extend cmds tmpcmds
elif [ -d WEB-INF ]; then
read_value "Veuillez entrer le chemin de la webapp à déployer" webapp . O
has_webapp=1
array_from_lines tmpcmds "$("${deploydb[@]}" "$webapp" "" "$ddb_profile" "$ddb_pffprofile" "${args[@]}")"
array_extend cmds tmpcmds
fi
if [ ${#cmds[*]} -gt 0 ]; then
[ $# -gt 0 ] && ewarn "Les arguments supplémentaires '$*' seront ignorés"
if check_interaction -c; then
if [ ${#cmds[*]} -eq 1 ]; then
einfo "La commande suivante va être lancée:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[0]}"; do
eecho " ${cmd#$script --no-deploydb }"
done
else
einfo "Les commandes suivantes seront lancées:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[@]}"; do
eecho " ... ${cmd#$script --no-deploydb }"
done
fi fi
check_interaction -c && einfo "$msg" read -p "Confirmez ou attendez 4 secondes [On] " -t 4 r
ask_any "Voulez-vous continuer?" Oq || die if [ $? -gt 128 ]; then
array_copy hosts host echo # cosmetic
[ -n "$wamap" ] && array_add toinst_options --wamap "$wamap" elif [ $? -le 128 -a -n "$r" ]; then
[ -n "$protect" ] && array_add toinst_options --protect "$protect" is_yes "$r" || die
if [ -n "$confirm_webapp" ]; then
confirm_webapp=
set -- "$webapp" "$@"
fi fi
fi fi
r=0
for cmd in "${cmds[@]}"; do
einfo "$cmd"
eval "$cmd" || r=1
done
exit $r
elif [ "$ddb_profile" != "ALL" ]; then
ewarn "Aucune configuration locale de déploiement n'a été trouvée pour le profil $ddb_profile"
fi fi
fi fi
if [ -n "$confirm_webapp" ]; then if [ -z "$has_webapp" ]; 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 toinst)
read_value "Veuillez entrer la webapp à déployer" webapp "$webapp" O [ -d WEB-INF ] && webapp=.
set -- "$webapp" "$@" read_value "Veuillez entrer le chemin de la webapp à déployer" webapp "$webapp" O
has_webapp=1
fi fi
[ -n "$has_webapp" ] && set -- "$webapp" "$@"
array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost" array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost"
fix_hosts fix_hosts
@ -222,6 +300,7 @@ estep "Copie de l'environnement de déploiement"
mkdir "$workdir/lib" mkdir "$workdir/lib"
ulibsync "$workdir/lib" ulibsync "$workdir/lib"
cp "$scriptdir/toinst" "$workdir" cp "$scriptdir/toinst" "$workdir"
cp "$scriptdir/pff" "$workdir"
chmod +x "$workdir/toinst" chmod +x "$workdir/toinst"
eend eend

150
ruinst
View File

@ -7,7 +7,7 @@ function display_help() {
uecho "$scriptname: Déploiement distant avec uinst uecho "$scriptname: Déploiement distant avec uinst
USAGE USAGE
$scriptname [-h host] [-T tmproot] <file|archive|dir> [-- options de uinst] $scriptname [-h host] [-G tmproot] <file|archive|dir> [-- options de uinst]
note: à cause d'une limitation de makeself, les options de uinst ne devraient note: à cause d'une limitation de makeself, les options de uinst ne devraient
pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces
@ -28,7 +28,7 @@ OPTIONS
Si l'hôte distant n'a pas sudo ou si sudo n'est pas configuré, il faut Si l'hôte distant n'a pas sudo ou si sudo n'est pas configuré, il faut
rajouter l'option --uses-su, e.g: rajouter l'option --uses-su, e.g:
$scriptname -h user@host --configure root --uses-su $scriptname -h user@host --configure root --uses-su
-T, --tmproot TMPROOT -G, --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
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut /var/tmp. Cette option est utile pour les vservers, qui ont par défaut
un /tmp minuscule de 16 Mo. un /tmp minuscule de 16 Mo.
@ -48,17 +48,26 @@ OPTIONS
user@host, e.g -h user@host user@host, e.g -h user@host
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
hostsfile, à raison d'un hôte par ligne. hostsfile, à raison d'un hôte par ligne.
--deploy --deploydb
--no-deploy --nd, --no-deploydb
Autoriser (respectivement interdire) l'utilisation de la configuration Autoriser (respectivement interdire) l'utilisation de la configuration
locale de déploiement pour identifier la destination si aucun hôte n'est locale de déploiement pour identifier la source et/ou la destination
spécifié. s'ils ne sont pas spécifiés. Par défaut, la configuration locale de
Par défaut, si aucun hôte n'est spécifié, la configuration locale de déploiement est utilisée.
déploiement est interrogée pour avoir cette information. -p, --dp, --deploydb-profile PROFILENAME
-c, --deploy-config CONFNAME Spécifier un ou plusieurs profils séparés par des virgules pour le
Cette option permet de spécifier le nom de la configuration locale de déploiement avec la configuration locale de déploiement. NONE est la
déploiement à utiliser pour effectuer la requête. Par défaut, utiliser valeur par défaut et signifie de ne sélectionner que les définitions
le nom 'ruinst'" sans profil. ALL signifie de ne pas tenir compte des profils dans les
définitions.
-A, --all-profiles
-P, --prod
-T, --test
Raccourcis respectivement pour -pALL, -pprod et -ptest
-c, --dc, --deploydb-config CONFNAME
Cette option permet de spécifier un fichier de configuration ou le nom
de la configuration locale de déploiement à utiliser pour effectuer la
requête. Par défaut, utiliser le nom 'uinst.conf'"
} }
__PARSED_HOSTS=() __PARSED_HOSTS=()
@ -133,20 +142,25 @@ tmproot=
SSH= SSH=
force_make_archive= force_make_archive=
hosts=() hosts=()
deploy_enable=1 ddb_enable=1
deploy_confname=ruinst ddb_profile=NONE
ddb_conf=uinst.conf
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-C,--configure-user action=configure \ -C,--configure-user action=configure \
--configure: '$set@ confuser;action=configure' \ --configure: '$set@ confuser;action=configure' \
--uses-su uses_su=1 \ --uses-su uses_su=1 \
-T:,--tmproot: tmproot= \ -G:,--tmproot: tmproot= \
-S:,--ssh: SSH= \ -S:,--ssh: SSH= \
--force-make-archive force_make_archive=1 \ --force-make-archive force_make_archive=1 \
-h:,-H:,--host: hosts \ -h:,-H:,--host: hosts \
--deploy deploy_enable=1 \ --deploydb ddb_enable=1 \
--no-deploy deploy_enable= \ --nd,--no-deploydb ddb_enable= \
-c:,--deploy-config deploy_confname= \ -p:,--dp:,--deploydb-profile ddb_profile= \
-A,--all-profiles ddb_profile=ALL \
-P,--prod ddb_profile=prod \
-T,--test ddb_profile=test \
-c:,--dc:,--deploydb-config ddb_conf= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
: "${SSH:=ssh}" : "${SSH:=ssh}"
@ -208,7 +222,7 @@ if [ "$action" == "configure" ]; then
IPKS= IPKS=
[ -n "$confuser" ] && prepare_pubkey_access [ -n "$confuser" ] && prepare_pubkey_access
etitle -s "Configuration de l'accès par clé ssh" etitle "Configuration de l'accès par clé ssh"
for host in "${hosts[@]}"; do for host in "${hosts[@]}"; do
etitle "$host" check_pubkey_access "$host" "$confuser" "$IPKS" "$uses_su" etitle "$host" check_pubkey_access "$host" "$confuser" "$IPKS" "$uses_su"
done done
@ -219,36 +233,96 @@ fi
################################################################################ ################################################################################
# Déploiement # Déploiement
## Répertoires à déployer et hôtes sur lesquels faire le déploiement # quels informations avons-nous?
confirm_src= array_isempty hosts && has_hosts= || has_hosts=1
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 uinst) # pas d'argument, ou c'est une option (qui fait donc partie des arguments de uinst)
src=. has_src=
confirm_src=1
else else
# Enlever le répertoire à déployer. Le reste est pour uinst # Enlever le répertoire à déployer. Le reste est pour uinst
src="$1" src="$1"
has_src=1
shift shift
fi fi
if array_isempty hosts && [ -n "$deploy_enable" -a -n "$src" ]; then # configuration locale de déploiement
urequire deploy if [ -n "$ddb_enable" ]; then
deploy_setconf "$deploy_confname" # filtrer les options... elles seront ignorées si on passe finalement par
if deploy_loadconf; then # deploydb
setxx srcname=abspath "$src" // basename -- vars=()
if eval "$(deploy_query -v host DEST module ruinst_deploy "" shell "$srcname")"; then options=()
check_interaction -c && einfo "$srcname: ce module sera déployé vers les hôtes suivants: for arg in "$@"; do
$(array_to_lines host "" " ")" if [[ "$arg" == *=* ]]; then
ask_any "Voulez-vous continuer?" Oq || die array_add vars "$arg"
array_copy hosts host else
confirm_src= array_add options "$arg"
fi fi
done
deploydb=(
"$scriptdir/lib/nulib/deploydb"
--missing-ok
${ddb_conf:+-c "$ddb_conf"}
-m uinst
--run -r uinst.query_xuinst "$script"
)
cmds=()
if [ -n "$has_hosts" ]; then
fix_hosts
for host in "${hosts[@]}"; do
array_from_lines tmpcmds "$("${deploydb[@]}" "$src" "$host" "$ddb_profile" "${vars[@]}")"
array_extend cmds tmpcmds
done
elif [ -n "$has_src" ]; then
array_from_lines tmpcmds "$("${deploydb[@]}" "$src" "" "$ddb_profile" "${vars[@]}")"
array_extend cmds tmpcmds
else
read_value "Entrez le répertoire à déployer" src . O
has_src=1
array_from_lines tmpcmds "$("${deploydb[@]}" "$src" "" "$ddb_profile" "${vars[@]}")"
array_extend cmds tmpcmds
fi
if [ ${#cmds[*]} -gt 0 ]; then
[ ${#options[*]} -gt 0 ] && ewarn "Les options supplémentaires '${options[*]}' seront ignorées"
if check_interaction -c; then
if [ ${#cmds[*]} -eq 1 ]; then
einfo "La commande suivante va être lancée:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[0]}"; do
eecho " ${cmd#$script --no-deploydb }"
done
else
einfo "Les commandes suivantes seront lancées:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[@]}"; do
eecho " ... ${cmd#$script --no-deploydb }"
done
fi
read -p "Confirmez ou attendez 4 secondes [On] " -t 4 r
if [ $? -gt 128 ]; then
echo # cosmetic
elif [ $? -le 128 -a -n "$r" ]; then
is_yes "$r" || die
fi
fi
r=0
for cmd in "${cmds[@]}"; do
einfo "$cmd"
eval "$cmd" || r=1
done
exit $r
elif [ "$ddb_profile" != "ALL" ]; then
ewarn "Aucune configuration locale de déploiement n'a été trouvée pour le profil $ddb_profile"
fi fi
fi fi
if [ -n "$confirm_src" ]; then ## Répertoires à déployer et hôtes sur lesquels faire le déploiement
if [ -z "$has_src" ]; then
# pas d'argument, ou c'est une option (qui fait donc partie des arguments de uinst) # 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 . O
has_src=1
fi fi
array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost" array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost"
@ -286,7 +360,7 @@ rinteraction=$__interaction
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"
if [ -n "$force_make_archive" ]; then if [ -n "$force_make_archive" ]; then
"$archive" ${tmproot:+--tmproot "$tmproot"} -- "$@" "$archive" ${tmproot:+--tmproot "$tmproot"} -- "$@"
else else
@ -297,7 +371,7 @@ for host in "${hosts[@]}"; do
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

187
rwoinst
View File

@ -1,20 +1,20 @@
#!/bin/bash #!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 # -*- 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 source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS woinst urequire DEFAULTS woinst
function display_help() { function display_help() {
uecho "$scriptname: Déploiement distant avec woinst uecho "$scriptname: Déploiement distant avec woinst
USAGE USAGE
$scriptname [-H host] [-T tmproot] <file|archive|dir>... [-- options de woinst] $scriptname [-H host] [-G tmproot] <archive|dir>... [-- options de woinst]
note: à cause d'une limitation de makeself, les options de toinst ne devraient 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 pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces
caractères n'est pas garanti. caractères n'est pas garanti.
OPTIONS OPTIONS
-T, --tmproot TMPROOT -G, --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
/var/tmp. Cette option est utile pour les vservers, qui ont par défaut /var/tmp. Cette option est utile pour les vservers, qui ont par défaut
un /tmp minuscule de 16 Mo. un /tmp minuscule de 16 Mo.
@ -45,19 +45,26 @@ OPTIONS
Il est possible de spécifier en une seule invocation --host et --whost Il est possible de spécifier en une seule invocation --host et --whost
pour déployer l'application sur un hôte et les resources web sur un pour déployer l'application sur un hôte et les resources web sur un
autre. autre.
--deploy --deploydb
--no-deploy --nd, --no-deploydb
Autoriser (respectivement interdire) l'utilisation de la configuration Autoriser (respectivement interdire) l'utilisation de la configuration
locale de déploiement pour identifier la destination si aucun hôte n'est locale de déploiement pour identifier la source et/ou la destination
spécifié. s'ils ne sont pas spécifiés. Par défaut, la configuration locale de
Par défaut, si aucun hôte n'est spécifié, la configuration locale de déploiement est utilisée.
déploiement est interrogée pour avoir cette information. -p, --dp, --deploydb-profile PROFILENAME
-c, --deploy-config CONFNAME Spécifier un ou plusieurs profils séparés par des virgules pour le
Cette option permet de spécifier le nom de la configuration à utiliser déploiement avec la configuration locale de déploiement. NONE est la
pour effectuer la requête. Par défaut, utiliser le nom 'rwoinst' valeur par défaut et signifie de ne sélectionner que les définitions
-p, --deploy-profile PROFILE sans profil. ALL signifie de ne pas tenir compte des profils dans les
Spécifier le profil à utiliser pour l'interrogation de la configuration définitions.
locale de déploiement. Par défaut, aucun profil n'est sélectionné." -A, --all-profiles
-P, --prod
-T, --test
Raccourcis respectivement pour -pALL, -pprod et -ptest
-c, --dc, --deploydb-config CONFNAME
Cette option permet de spécifier un fichier de configuration ou le nom
de la configuration locale de déploiement à utiliser pour effectuer la
requête. Par défaut, utiliser le nom 'woinst.conf'"
} }
__PARSED_HOSTS=() __PARSED_HOSTS=()
@ -169,94 +176,118 @@ tmproot=
SSH= SSH=
hosts=() hosts=()
whosts=() whosts=()
deploy_enable=1 ddb_enable=1
deploy_confname=rwoinst ddb_profile=NONE
deploy_profile= ddb_conf=woinst.conf
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \ --help '$exit_with display_help' \
-T:,--tmproot: tmproot= \ -G:,--tmproot: tmproot= \
-S:,--ssh: SSH= \ -S:,--ssh: SSH= \
-h:,-H:,--host: hosts \ -h:,-H:,--host: hosts \
-w:,-W:,--whost: whosts \ -w:,-W:,--whost: whosts \
--deploy deploy_enable=1 \ --deploydb ddb_enable=1 \
--no-deploy deploy_enable= \ --nd,--no-deploydb ddb_enable= \
-c:,--deploy-config deploy_confname= \ -p:,--dp:,--deploydb-profile ddb_profile= \
-p:,--deploy-profile: deploy_profile= \ -A,--all-profiles ddb_profile=ALL \
-P,--prod ddb_profile=prod \
-T,--test ddb_profile=test \
-c:,--dc:,--deploydb-config ddb_conf= \
@ args -- "$@" && set -- "${args[@]}" || die "$args" @ args -- "$@" && set -- "${args[@]}" || die "$args"
: "${SSH:=ssh}" : "${SSH:=ssh}"
## 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=
# quels informations avons-nous?
array_isempty hosts && has_hosts= || has_hosts=1
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 woinst) # pas d'argument, ou c'est une option (qui fait donc partie des arguments de woinst)
case "$(basename -- "$(pwd)")" in has_bundle=
*.woa|*.framework) bundle=.;;
*) bundle=;;
esac
confirm_bundle=1
else else
bundle="$1" bundle="$1"
has_bundle=1
shift
fi fi
woinst_options=() # configuration locale de déploiement
if array_isempty hosts && [ -n "$deploy_enable" -a -n "$bundle" ]; then if [ -n "$ddb_enable" ]; then
urequire deploy # filtrer les options... elles seront ignorées si on passe finalement par
deploy_setconf "$deploy_confname" # deploydb
if deploy_loadconf; then vars=()
setxx bundlename=abspath "$bundle" // basename -- options=()
host=(); bounce=; notag=; exec=; dbconfig=; dbconfigmap= for arg in "$@"; do
if eval "$(deploy_query -v host,bounce,notag,exec,dbconfig,dbconfigmap DEST wobundle rwoinst_bundle "$deploy_profile" shell "$bundlename")"; then if [[ "$arg" == *=* ]]; then
array_copy deploy_hosts host array_add vars "$arg"
deploy_options=() else
[ -n "$bounce" ] && array_add deploy_options -b array_add options "$arg"
[ -n "$notag" ] && array_add deploy_options -n fi
if [ -n "$exec" ]; then done
for x in "${exec[@]}"; do
array_add deploy_options -x "$x" deploydb=(
"$scriptdir/lib/nulib/deploydb"
--missing-ok
${ddb_conf:+-c "$ddb_conf"}
-m woinst
--run -r woinst.query_rwoinst "$script"
)
cmds=()
myname="$(basename "$(pwd)")"
if [ -n "$has_hosts" ]; then
fix_hosts
for host in "${hosts[@]}"; do
array_from_lines tmpcmds "$("${deploydb[@]}" "$bundle" "$host" "$ddb_profile" "${vars[@]}")"
array_extend cmds tmpcmds
done
elif [ -n "$has_bundle" ]; then
array_from_lines tmpcmds "$("${deploydb[@]}" "$bundle" "" "$ddb_profile" "${vars[@]}")"
array_extend cmds tmpcmds
elif [[ "$myname" == *.woa ]] || [[ "$myname" == *.framework ]]; then
read_value "Veuillez entrer le chemin du bundle à déployer" bundle . O
has_bundle=1
array_from_lines tmpcmds "$("${deploydb[@]}" "$bundle" "" "$ddb_profile" "${vars[@]}")"
array_extend cmds tmpcmds
fi
if [ ${#cmds[*]} -gt 0 ]; then
[ ${#options[*]} -gt 0 ] && ewarn "Les options supplémentaires '${options[*]}' seront ignorées"
if check_interaction -c; then
if [ ${#cmds[*]} -eq 1 ]; then
einfo "La commande suivante va être lancée:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[0]}"; do
eecho " ${cmd#$script --no-deploydb }"
done
else
einfo "Les commandes suivantes seront lancées:"
eecho "\$ $script --no-deploydb \\"
for cmd in "${cmds[@]}"; do
eecho " ... ${cmd#$script --no-deploydb }"
done done
fi fi
[ -n "$dbconfig" ] && array_add deploy_options -d "$dbconfig" read -p "Confirmez ou attendez 4 secondes [On] " -t 4 r
if [ -n "$dbconfigmap" ]; then if [ $? -gt 128 ]; then
for m in "${dbconfigmap[@]}"; do echo # cosmetic
array_add deploy_options -m "$m" elif [ $? -le 128 -a -n "$r" ]; then
done is_yes "$r" || die
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
array_extend hosts deploy_hosts
array_extend woinst_options deploy_options
array_extend whosts deploy_whosts
if [ -n "$confirm_bundle" ]; then
confirm_bundle=
set -- "$bundle" "$@"
fi fi
fi fi
r=0
for cmd in "${cmds[@]}"; do
einfo "$cmd"
eval "$cmd" || r=1
done
exit $r
elif [ "$ddb_profile" != "ALL" ]; then
ewarn "Aucune configuration locale de déploiement n'a été trouvée pour le profil $ddb_profile"
fi fi
fi fi
if [ -n "$confirm_bundle" ]; then if [ -z "$has_bundle" ]; then
# pas d'argument, ou c'est une option (qui fait donc partie des arguments de woinst) # 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 le chemin du bundle à déployer" bundle "$bundle" O
set -- "$bundle" "$@" has_bundle=1
fi fi
[ -n "$has_bundle" ] && set -- "$bundle" "$@"
array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost" array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost"
fix_hosts fix_hosts

29
toinst
View File

@ -60,6 +60,12 @@ OPTIONS
déployée. Ce compte doit avoir le rôle manager-script à partir de Tomcat déployée. Ce compte doit avoir le rôle manager-script à partir de Tomcat
6.0.30, et le rôle manager-gui dans les version antérieurs. Par défaut, 6.0.30, et le rôle manager-gui dans les version antérieurs. Par défaut,
le fichier tomcat-users.xml est consulté pour avoir cette information. le fichier tomcat-users.xml est consulté pour avoir cette information.
-j, --ensure-pffprofile PFFPROFILE
Vérifier que les webapps sont dans le profil pff spécifié. Arrêter le
déploiement si ce n'est pas le cas.
Si la webapp n'est pas gérée par pff, cette option est ignorée.
-e, --set-pffprofile PFFPROFILE
Forcer le basculement vers le profil pff spécifié avant le déploiement.
-m, --wamap WAMAPS -m, --wamap WAMAPS
Ajouter un ou plusieurs mappings de la forme src:dest. Avec ce mapping, Ajouter un ou plusieurs mappings de la forme src:dest. Avec ce mapping,
la webapp src est déployée avec le nom dest. Plusieurs mappings peuvent la webapp src est déployée avec le nom dest. Plusieurs mappings peuvent
@ -251,6 +257,8 @@ args=(%
-g:,--manager-url: manager_url= -g:,--manager-url: manager_url=
-u:,--user: manager_user= -u:,--user: manager_user=
-p:,--password: manager_password= -p:,--password: manager_password=
-j:,--ensure-pffprofile: ensure_pffprofile=
-e:,--set-pffprofile: set_pffprofile=
-m:,--wamap: wamaps -m:,--wamap: wamaps
--exclude: excludes --exclude: excludes
--replace-excludes: replace_excludes --replace-excludes: replace_excludes
@ -483,6 +491,27 @@ for src in "${srcs[@]}"; do
fi fi
done done
if [ -n "$will_deploy" ]; then
ko=
for src in "${srcs[@]}"; do
if [ -f "$src/.pff.conf" -a -d "$src/pff" ]; then
# géré par pff
if [ -n "$set_pffprofile" ]; then
"$scriptdir/pff" -s "$set_pffprofile" "$src" || die
fi
if [ -L "$src/pff/.Current" -a -n "$ensure_pffprofile" ]; then
actual_pffprofile="$(readlink "$src/pff/.Current")"
if [ "$actual_pffprofile" != "$ensure_pffprofile" ]; then
[ -z "$ko" ] && eimportant "Ce déploiement requière le profil pff '$ensure_pffprofile'"
eerror "$(basename "$src"): le profil pff actuel est '$actual_pffprofile'"
ko=1
fi
fi
fi
done
[ -n "$ko" ] && die
fi
################################################################################ ################################################################################
# Maintenant, nous pouvons faire les actions # Maintenant, nous pouvons faire les actions

1
uinst
View File

@ -3,4 +3,5 @@
source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1 source "$(dirname -- "$0")/lib/ulib/ulib" || exit 1
urequire DEFAULTS uinst urequire DEFAULTS uinst
UINST_STANDALONE=1
uinst_nolocal "$@" uinst_nolocal "$@"