ruinst: support de deploy pour calculer l'hôte pour le déploiement

This commit is contained in:
Jephté Clain 2017-03-09 06:40:02 +04:00
parent d5846bab1d
commit 38f21aa312
1 changed files with 40 additions and 9 deletions

49
ruinst
View File

@ -14,7 +14,9 @@ pas contenir d'espaces ni de caractères spéciaux. L'échappement de ces
caractères n'est pas garanti.
OPTIONS
-C Ne pas faire le déploiement. Configurer uniquement la connexion par clé
-C, --configure-user
--configure USER [--uses-su]
Ne pas faire le déploiement. Configurer uniquement la connexion par clé
sur les hôtes distants spécifiés pour le user spécifié. Il faut pouvoir
se connecter par mot de passe pour configurer la connexion par clé.
Si l'on veut configurer la connexion par clé pour le user root, mais que
@ -26,14 +28,14 @@ OPTIONS
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:
$scriptname -h user@host --configure root --uses-su
-T tmproot
-T, --tmproot TMPROOT
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
un /tmp minuscule de 16 Mo.
-S, --ssh ssh
-S, --ssh SSH
Spécifier le programme à utiliser pour la connection par ssh.
-h hosts
-h @hostsfile
-h, --host hosts
-h, --host @hostsfile
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
l'option -h, ou spécifier en une seule fois plusieurs hôtes en les
@ -45,7 +47,18 @@ OPTIONS
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
user@host, e.g -h user@host
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
--no-deploy
Autoriser (respectivement interdire) l'utilisation de la configuration
locale de déploiement pour identifier la destination si aucun hôte n'est
spécifié.
Par défaut, si aucun hôte n'est spécifié, la configuration locale de
déploiement est interrogée pour avoir cette information.
-c, --deploy-config CONFNAME
Cette option permet de
spécifier le nom de la configuration à utiliser pour effectuer la
requête."
}
set_defaults pubkeys
@ -54,18 +67,23 @@ action=deploy
confuser=
uses_su=
tmproot=
hosts=()
SSH=
force_make_archive=
hosts=()
deploy_enable=1
deploy_confname=
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-C action=configure \
-C,--configure-user action=configure \
--configure: '$set@ confuser;action=configure' \
--uses-su uses_su=1 \
-T:,--tmproot: tmproot= \
-S:,--ssh: SSH= \
--force-make-archive force_make_archive=1 \
-h:,-H:,--host: hosts \
--deploy deploy_enable=1 \
--no-deploy deploy_enable= \
-c:,--deploy-config deploy_confname= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
: "${SSH:=ssh}"
@ -181,7 +199,7 @@ if [ "$action" == "configure" ]; then
}$(<"$sshdir/$pubkey")"
done
fi
[ -n "$PUBKEYS" ] || die "La connexion sur les hôtes distants ne peut se faire que par mot de passe parce que vous n'avez pas de clé publique configurée. Modifiez le fichier ~/etc/default.pubkeys si ce message est erroné."
[ -n "$PUBKEYS" ] || die "La connexion sur les hôtes distants ne peut se faire que par mot de passe parce que vous n'avez pas de clé publique configurée. Modifiez le fichier ~/etc/default/pubkeys si ce message est erroné."
[ -n "${hosts[*]}" ] || hosts=("$@")
[ -n "${hosts[*]}" ] || die "Vous devez spécifier la liste des hôtes à configurer"
@ -214,6 +232,19 @@ else
fi
## Hôtes sur lesquels faire le déploiement
if array_isempty hosts && [ -n "$deploy_enable" ]; then
urequire deploy
deploy_setconf "$deploy_confname"
if deploy_loadconf; then
setxx module=abspath "$src" // basename --
if eval "$(deploy_query -v host DEST module ruinst_deploy "" shell "$module")"; then
check_interaction -c && einfo "Ce module sera déployé vers les hôtes suivants:
$(array_to_lines host "" " ")"
ask_any "Voulez-vous continuer?" Oq || die
array_copy hosts host
fi
fi
fi
array_isempty hosts && read_value "Entrez une liste d'hôtes séparés par ':'" hosts "localhost"
fix_hosts