rwoinst: ajouter l'option -w qui peut être spécifiée en parallèle de -h pour déployer les resources web vers un serveur différent

This commit is contained in:
Jephté Clain 2017-04-28 14:43:12 +04:00
parent 9e4ccaef00
commit f20cc48176
1 changed files with 76 additions and 45 deletions

121
rwoinst
View File

@ -16,9 +16,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, --host hosts -h, -H, --host hosts
-h, --host @hostsfile -h, -H, --host @hostsfile
-H host
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
@ -31,6 +30,17 @@ 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.
-w, -W, --whost host[:htdocs]
Comme --host, mais pour le déploiement des resources web. Contrairement
à --host, un seul hôte peut être spécifié par occurence de l'option,
pour permettre de spécifier éventuellement le répertoire vers lequel
copier les resources web. Ainsi, les deux commandes suivantes sont
équivalentes:
rwoinst -h host.tld -- -W HTDOCSDIR=HTDOCSBASE/wo
rwoinst -w host.tld:HTDOCSBASE/wo
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
autre.
--deploy --deploy
--no-deploy --no-deploy
Autoriser (respectivement interdire) l'utilisation de la configuration Autoriser (respectivement interdire) l'utilisation de la configuration
@ -106,10 +116,49 @@ function fix_hosts() {
array_map hosts __dot_is_localhost array_map hosts __dot_is_localhost
} }
function deploy_to() {
local archive="$1" host="$2" tmproot="$3"
shift; shift; shift
local r=
if [ "$host" == "localhost" ]; then
etitle "Sur l'hôte local"
"$archive" ${tmproot:+--tmproot "$tmproot"} -- "$@" || r=1
eend
else
local user
local archivename="$(basename "$archive")"
splituserhost "$host" user host
[ -n "$user" ] || user=root
# sur l'hôte distant, ne rendre non interactif qu'à partir de -yy
rinteraction=$__interaction
[ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1))
etitle "Vers $user@$host"
estep "Copie de l'archive"
scp -S "$SSH" "$archive" "$user@$host:" || r=1
if [ -z "$r" ]; then
estep "Lancement du script de déploiement"
"$SSH" -qt "$user@$host" "\
__interaction=$rinteraction
__estack=$(qval "$__estack")
__tlevel=$(qval "$__tlevel")
export __interaction __estack __tlevel
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")" || r=1
fi
eend
fi
return ${r:-0}
}
action=deploy action=deploy
tmproot= tmproot=
SSH= SSH=
hosts=() hosts=()
whosts=()
deploy_enable=1 deploy_enable=1
deploy_confname=rwoinst deploy_confname=rwoinst
parse_opts "${PRETTYOPTS[@]}" \ parse_opts "${PRETTYOPTS[@]}" \
@ -117,6 +166,7 @@ parse_opts "${PRETTYOPTS[@]}" \
-T:,--tmproot: tmproot= \ -T:,--tmproot: tmproot= \
-S:,--ssh: SSH= \ -S:,--ssh: SSH= \
-h:,-H:,--host: hosts \ -h:,-H:,--host: hosts \
-w:,-W:,--whost: whosts \
--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= \
@ -165,8 +215,10 @@ array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'"
fix_hosts fix_hosts
## Création de l'archive ## Création de l'archive
etitle "Création du répertoire de travail" etitle "Création du répertoire de travail"
ac_set_tmpdir workdir ac_set_tmpdir workdir
bundles=() bundles=()
while [ -n "$1" ]; do while [ -n "$1" ]; do
if [ "$1" == "--" ]; then if [ "$1" == "--" ]; then
@ -202,55 +254,34 @@ while [ -n "$1" ]; do
done done
estep "Copie de l'environnement de déploiement" estep "Copie de l'environnement de déploiement"
ulibsync "$workdir" mkdir -p "$workdir/lib"
echo '#!/bin/sh ulibsync "$workdir/lib"
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 cp "$scriptdir/woinst.sh" "$workdir"
if . `dirname "$0"`/ulib/ulibsh; then chmod +x "$workdir/woinst.sh"
urequire DEFAULTS woinst
else
exit 1
fi
OENC="$UTF8"
woinst "$@"' >"$workdir/woinst"
chmod +x "$workdir/woinst"
eend eend
etitle "Création de l'archive pour le déploiement"
ac_set_tmpfile archive ac_set_tmpfile archive
archivename="$(basename "$archive")"
etitle "Création de l'archive pour le déploiement" \ "$scriptdir/mkusfx" --bare --tmp-archive -o "$archive" "$workdir" -- ./woinst.sh --is-tmpdir "${bundles[@]}" || die
"$scriptdir/mkusfx" --bare --tmp-archive -o "$archive" "$workdir" -- ./woinst --is-tmpdir "${bundles[@]}" || die
eend
## Déploiement ## Déploiement
# sur l'hôte distant, ne rendre interactif qu'à partir de -yy etitle "Déploiement des bundles"
rinteraction=$__interaction
[ $rinteraction -lt 2 ] && rinteraction=$(($rinteraction + 1))
for host in "${hosts[@]}"; do for host in "${hosts[@]}"; do
if [ "$host" == "localhost" ]; then deploy_to "$archive" "$host" "$tmproot" "$@" || die
etitle "Déploiement sur l'hôte local" \
"$archive" ${tmproot:+--tmproot "$tmproot"} -- "$@"
else
if [[ "$host" == *@* ]]; then
user="${host%%@*}"
host="${host#*@}"
else
user=root
fi
etitle "Déploiement sur $user@$host"
estep "Copie de l'archive"
scp -S "$SSH" "$archive" "$user@$host:" || die
estep "Lancement du script de déploiement"
"$SSH" -qt "$user@$host" "\
__interaction=$rinteraction
__estack=$(qval "$__estack")
__tlevel=$(qval "$__tlevel")
export __interaction __estack __tlevel
${UTOOLS_LANG:+UTOOLS_LANG='$UTOOLS_LANG'; export UTOOLS_LANG
}$(qvals "./$archivename" ${tmproot:+--tmproot "$tmproot"} -- MYHOST="$host" "$@")"
eend
fi
done done
eend
if [ ${#whosts[*]} -gt 0 ]; then
etitle "Déploiement des resources web"
for hostdest in "${whosts[@]}"; do
splitpair "$hostdest" host destdir
deploy_to "$archive" "$host" "$tmproot" \
-y -W ${destdir:+HTDOCSDIR="$destdir"} "$@" || die
done
eend
fi