modifier la méthode d'analyse de la liste des hôtes
This commit is contained in:
parent
8760cade72
commit
f1d1248fc4
38
rruns
38
rruns
|
@ -1,14 +1,16 @@
|
|||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS runs
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Déploiement distant avec runs
|
||||
|
||||
USAGE
|
||||
$scriptname [-h host] [-T tmproot] rscriptname name=value...
|
||||
$scriptname [-h host] [-T tmproot] @recipe name=value...
|
||||
$scriptname [-h host] [-T tmproot] -f rscript name=value...
|
||||
$scriptname [-h host] [-T tmproot] -r recipe name=value...
|
||||
$scriptname [-h hosts] [-T tmproot] rscriptname name=value...
|
||||
$scriptname [-h hosts] [-T tmproot] @recipe name=value...
|
||||
$scriptname [-h hosts] [-T tmproot] -f rscript name=value...
|
||||
$scriptname [-h hosts] [-T tmproot] -r recipe name=value...
|
||||
|
||||
Lancer ce script sans argument (hors options) est équivalent à le lancer avec
|
||||
l'argument @default
|
||||
|
@ -31,12 +33,16 @@ OPTIONS
|
|||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
-h host
|
||||
-h @hostsfile
|
||||
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||
options -h peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||
hôtes par ':', e.g. -h host1:host2
|
||||
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
|
||||
séparant par un espace ou le caractère ':', e.g. 'host1 host2' ou
|
||||
'host1:host2'. Si la spécification contient les caractères { et },
|
||||
l'expansion est effectuée, e.g
|
||||
-h 'root@{host1,host2}.univ.run'
|
||||
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
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
|
||||
hostsfile, à raison d'un hôte par ligne.
|
||||
Si cette option n'est pas spécifiée, et que le répertoire courant est
|
||||
|
@ -68,10 +74,6 @@ OPTIONS
|
|||
argument (hors options)."
|
||||
}
|
||||
|
||||
source "$(dirname "$0")/ulib/ulib" &&
|
||||
urequire DEFAULTS runs ||
|
||||
exit 1
|
||||
|
||||
set_defaults runs
|
||||
|
||||
action=deploy
|
||||
|
@ -142,6 +144,13 @@ function parse_hostsfile() {
|
|||
done
|
||||
done
|
||||
}
|
||||
function __expand_braces() {
|
||||
if [[ "$1" == *{* ]] && [[ "$1" == *}* ]]; then
|
||||
eval "echo $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
function __dot_is_localhost() { [ "$1" == "." ] && echo "localhost" || echo "$1"; }
|
||||
function fix_hosts() {
|
||||
# Si hosts contient des éléments multiple, comme a:b, séparer ces
|
||||
|
@ -149,7 +158,10 @@ function fix_hosts() {
|
|||
# Supporter la syntaxe @hostsfile qui permet de charger la liste des hôtes
|
||||
# depuis un fichier.
|
||||
# Remplacer aussi les '.' par 'localhost'
|
||||
array_fix_paths hosts
|
||||
array_map hosts __expand_braces
|
||||
array_fix_paths hosts ":"
|
||||
array_fix_paths hosts " "
|
||||
|
||||
local -a _hosts _tmphosts host
|
||||
for host in "${hosts[@]}"; do
|
||||
host="${host%/}"
|
||||
|
|
30
ruinst
30
ruinst
|
@ -1,5 +1,7 @@
|
|||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS nutools/pyulib
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: Déploiement distant avec uinst
|
||||
|
@ -27,11 +29,15 @@ OPTIONS
|
|||
un /tmp minuscule de 16 Mo.
|
||||
-S ssh
|
||||
Spécifier le programme à utiliser pour la connection par ssh.
|
||||
-h host
|
||||
-h hosts
|
||||
-h @hostsfile
|
||||
Spécifier un hôte distant sur lequel faire le déploiement. Plusieurs
|
||||
options -h peuvent être spécifiées, ou alors on peut séparer plusieurs
|
||||
hôtes par ':', e.g. -h host1:host2
|
||||
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
|
||||
séparant par un espace ou le caractère ':', e.g. 'host1 host2' ou
|
||||
'host1:host2'. Si la spécification contient les caractères { et },
|
||||
l'expansion est effectuée, e.g
|
||||
-h 'root@{host1,host2}.univ.run'
|
||||
Par défaut, la connexion sur l'hôte distant se fait avec l'utilisateur
|
||||
root. Il est possible de spécifier un autre utilisateur avec la syntaxe
|
||||
user@host, e.g -h user@host
|
||||
|
@ -39,10 +45,6 @@ OPTIONS
|
|||
hostsfile, à raison d'un hôte par ligne."
|
||||
}
|
||||
|
||||
source "$(dirname "$0")/ulib/ulib" &&
|
||||
urequire DEFAULTS nutools/pyulib ||
|
||||
exit 1
|
||||
|
||||
set_defaults pubkeys
|
||||
|
||||
action=deploy
|
||||
|
@ -92,6 +94,13 @@ function parse_hostsfile() {
|
|||
done
|
||||
done
|
||||
}
|
||||
function __expand_braces() {
|
||||
if [[ "$1" == *{* ]] && [[ "$1" == *}* ]]; then
|
||||
eval "echo $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
function __dot_is_localhost() { [ "$1" == "." ] && echo "localhost" || echo "$1"; }
|
||||
function fix_hosts() {
|
||||
# Si hosts contient des éléments multiple, comme a:b, séparer ces
|
||||
|
@ -99,7 +108,10 @@ function fix_hosts() {
|
|||
# Supporter la syntaxe @hostsfile qui permet de charger la liste des hôtes
|
||||
# depuis un fichier.
|
||||
# Remplacer aussi les '.' par 'localhost'
|
||||
array_fix_paths hosts
|
||||
array_map hosts __expand_braces
|
||||
array_fix_paths hosts ":"
|
||||
array_fix_paths hosts " "
|
||||
|
||||
local -a _hosts _tmphosts host
|
||||
for host in "${hosts[@]}"; do
|
||||
host="${host%/}"
|
||||
|
|
31
ussh
31
ussh
|
@ -10,10 +10,13 @@ USAGE
|
|||
$scriptname -R hosts...
|
||||
|
||||
OPTIONS
|
||||
host
|
||||
hosts
|
||||
@hostsfile
|
||||
Spécifier un hôte distant sur lequel faire la connexion. Plusieurs
|
||||
hôtes peuvent être spécifiées, en les séparant par ':', e.g. host1:host2
|
||||
Spécifier un ou plusieurs hôtes distants sur lequels faire la connexion.
|
||||
Pour spécifier plusieurs hôtes, il faut les séparer par un espace ou le
|
||||
caractère ':', e.g. 'host1 host2' ou 'host1:host2'. Si la spécification
|
||||
contient les caractères { et }, l'expansion est effectuée, e.g
|
||||
'root@{host1,host2}.univ.run'
|
||||
La forme @hostsfile permet de lire la liste des hôtes depuis le fichier
|
||||
hostsfile, à raison d'un hôte par ligne.
|
||||
[options]
|
||||
|
@ -28,6 +31,8 @@ argument):
|
|||
Forcer l'allocation d'un TTY
|
||||
-l, --login USER
|
||||
Spécifier le user avec lequel se connecter
|
||||
-p, --port PORT
|
||||
Spécifier le port sur lequel se connecter
|
||||
-o OPTION
|
||||
Ajouter une option de SSH
|
||||
Les options suivantes *doivent* se trouver *AVANT* le premier argument:
|
||||
|
@ -82,14 +87,24 @@ function parse_hostsfile() {
|
|||
done
|
||||
done
|
||||
}
|
||||
function __expand_braces() {
|
||||
if [[ "$1" == *{* ]] && [[ "$1" == *}* ]]; then
|
||||
eval "echo $1"
|
||||
else
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
function __dot_is_localhost() { [ "$1" == "." ] && echo "localhost" || echo "$1"; }
|
||||
function fix_hosts() {
|
||||
# Si hosts contient des éléments multiple, comme a:b, séparer ces
|
||||
# éléments. i.e (a b:c) --> (a b c)
|
||||
# éléments. i.e (a b:c "d e") --> (a b c d e)
|
||||
# Supporter la syntaxe @hostsfile qui permet de charger la liste des hôtes
|
||||
# depuis un fichier.
|
||||
# Remplacer aussi les '.' par 'localhost'
|
||||
array_fix_paths hosts
|
||||
array_map hosts __expand_braces
|
||||
array_fix_paths hosts ":"
|
||||
array_fix_paths hosts " "
|
||||
|
||||
local -a _hosts _tmphosts host
|
||||
for host in "${hosts[@]}"; do
|
||||
host="${host%/}"
|
||||
|
@ -107,7 +122,7 @@ function fix_hosts() {
|
|||
}
|
||||
|
||||
function ussh() {
|
||||
args=(${quiet:+-q} ${tty:+-t} ${login:+-l "$login"})
|
||||
args=(${quiet:+-q} ${tty:+-t} ${login:+-l "$login"} ${port:+-p "$port"})
|
||||
for option in "${options[@]}"; do
|
||||
args=("${args[@]}" -o "$option")
|
||||
done
|
||||
|
@ -166,6 +181,7 @@ action=ssh
|
|||
quiet=
|
||||
tty=
|
||||
login="$USSH_USER"
|
||||
port=
|
||||
options=()
|
||||
domain="$USSH_DOMAIN"
|
||||
ssh=
|
||||
|
@ -175,7 +191,8 @@ parse_opts + "${PRETTYOPTS[@]}" \
|
|||
-q,--quiet quiet=1 \
|
||||
-t,--tty tty=1 \
|
||||
-l:,--login: login= \
|
||||
-o options \
|
||||
-p:,--port: port= \
|
||||
-o: options \
|
||||
-d:,--domain: domain= \
|
||||
-S:,--ssh ssh= \
|
||||
-R,--remove action=remove \
|
||||
|
|
Loading…
Reference in New Issue