Intégration de la branche release-9.6.0

This commit is contained in:
Jephté Clain 2020-02-24 09:13:57 +04:00
commit abd178bf0d
6 changed files with 183 additions and 71 deletions

View File

@ -1,3 +1,10 @@
## Version 9.6.0 du 24/02/2020-09:13
* `b7492fc` dk: ajout de l'option -e
* `08c081a` modification pour support des valeurs spéciales (ne sont pas synchronisées) dans LDAP
* `98129cd` passer par un script annexe pour cssh
* `99c0ccd` dk: support de PHP_VERSION_MAX
## Version 9.5.0 du 28/01/2020-14:06 ## Version 9.5.0 du 28/01/2020-14:06
* `640a2b1` maj doc * `640a2b1` maj doc

View File

@ -1 +1 @@
9.5.0 9.6.0

74
cssh
View File

@ -23,68 +23,18 @@ vars="$("$scriptdir/ussh" --parse "$@")" || die
eval "$vars" eval "$vars"
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter" [ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
cmd="'$(qvals "${args[@]}") [ ${#args[*]} -gt 0 ] && cmd="$(qvals "${args[@]}"); " || cmd=
"' cmd="$cmd$(<"$scriptdir/start-screen")"
function __ask() { cmd="'${cmd//\'/\'\\\'\'}'"
local r
read -p "$1" -t 2 r
[ $? -gt 128 -o -z "$r" -o "$r" == "o" -o "$r" == "O" -o "$r" == "y" -o "$r" == "Y" ]
}
function __auto_screen() {
# Si screen pas installé, ne rien faire
if [ -z "$(which screen 2>/dev/null)" ]; then
echo "'"$COULEUR_JAUNE"'WARNING'"$COULEUR_NORMALE"' screen introuvable. une session bash classique sera lancée"
exec /bin/bash -l
fi
# Si on est déjà dans screen, ne rien faire
[ -z "$STY" ] || return
# corriger TERM pour les vieilles versions de Linux
case "$TERM" in
xterm*) TERM=xterm;;
screen*) TERM=screen;;
esac
export TERM
local msgprefix
local screens count
screens="$(LANG=C screen -ls | grep -Ei "attached|detached")"
if [ -n "$screens" ]; then
count="$(echo "$screens" | wc -l)"
else
count=0
fi
if [ $count -gt 0 ]; then
if [ $count -eq 1 ]; then
msgprefix="Il y a '"$COULEUR_BLEUE"'1 session screen en cours'"$COULEUR_NORMALE"'
Cette session"
else
msgprefix="Il y a '"$COULEUR_ROUGE"'$count sessions screen en cours'"$COULEUR_NORMALE"':
$screens
La première session"
fi
if __ask "
$msgprefix sera reconnectée automatiquent dans 2 secondes
Voulez-vous reconnecter la session screen? [On] "; then
exec screen -q -s -/bin/bash -xRR
else
exec /bin/bash -l
fi
elif __ask "
Une '"$COULEUR_VERTE"'nouvelle session screen'"$COULEUR_NORMALE"' sera lancée automatiquement dans 2 secondes
Voulez-vous lancer une session screen? [On] "; then
exec screen -q -s -/bin/bash -RR
else
exec /bin/bash -l
fi
}
__auto_screen
'\'
for host in "${hosts[@]}"; do for host in "${hosts[@]}"; do
${exec:+exec} "$ssh" "${options[@]}" -t "$host" -- /bin/bash -c "$cmd" "$ssh" \
"${options[@]}" -qt "$host" -- \
"[ -x /usr/local/nutools/start-screen ] && exec /usr/local/nutools/start-screen $(qvals "${args[@]}") || exit 123"
if [ $? -eq 123 ]; then
# pas de start-screen en face, le faire à la main
${exec:+exec} \
"$ssh" "${options[@]}" -t "$host" -- \
/bin/bash -c "$cmd"
fi
done done

41
dk
View File

@ -154,6 +154,14 @@ COMMANDES
Cette valeur doit être spécifiée avec le format de PHP_VERSION_ID i.e Cette valeur doit être spécifiée avec le format de PHP_VERSION_ID i.e
70300 pour PHP 7.3 70300 pour PHP 7.3
Spécifier 'any' ou 'force' pour forcer l'utilisation de l'image docker Spécifier 'any' ou 'force' pour forcer l'utilisation de l'image docker
* COMPOSER_PHP_MAX -- Version de PHP à partir de laquelle COMPOSER_IMAGE
est utilisée. En d'autres termes, c'est la version maximum de PHP, à
partir de laquelle il faut passer par une image docker. L'idée est que
si la version de PHP installée est trop récente, ça peut poser
problème avec le calcul des dépendances.
Cette valeur doit être spécifiée avec le format de PHP_VERSION_ID i.e
70300 pour PHP 7.3
Si la valeur n'est pas spécifiée ou vaut 'none', elle est ignorée.
* COMPOSER_IMAGE -- Image utilisée pour lancer composer. La valeur par * COMPOSER_IMAGE -- Image utilisée pour lancer composer. La valeur par
défaut est: défaut est:
$DEFAULT_COMPOSER_IMAGE $DEFAULT_COMPOSER_IMAGE
@ -205,6 +213,8 @@ OPTIONS générales
commandes. Utiliser -u pour desélectionner la machine en cours, e.g -m-u commandes. Utiliser -u pour desélectionner la machine en cours, e.g -m-u
-n, --fake -n, --fake
Ne pas lancer les commandes, simplement les afficher Ne pas lancer les commandes, simplement les afficher
-e, --build-arg, --env VAR=VALUE
(Re)définir un argument pour le build ou une variable d'environnement
-f, --force -f, --force
Forcer l'opération (là où cela a du sens) Forcer l'opération (là où cela a du sens)
-h, --host HOST -h, --host HOST
@ -352,11 +362,13 @@ function docker_parse_env_args() {
[ -f .build.env ] && eval "$(docker_parse_build_args .build.env)" [ -f .build.env ] && eval "$(docker_parse_build_args .build.env)"
[ -f build.env ] && eval "$(docker_parse_build_args build.env)" [ -f build.env ] && eval "$(docker_parse_build_args build.env)"
[ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && eval "$(docker_parse_build_args ".build.$PROFILE.env")" [ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && eval "$(docker_parse_build_args ".build.$PROFILE.env")"
[ -n "$PROFILE" -a -f "build.$PROFILE.env" ] && eval "$(docker_parse_build_args "build.$PROFILE.env")"
} }
function docker_set_env_args() { function docker_set_env_args() {
[ -f .build.env ] && source ./.build.env [ -f .build.env ] && source ./.build.env
[ -f build.env ] && source ./build.env [ -f build.env ] && source ./build.env
[ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && source "./.build.$PROFILE.env" [ -n "$PROFILE" -a -f ".build.$PROFILE.env" ] && source "./.build.$PROFILE.env"
[ -n "$PROFILE" -a -f "build.$PROFILE.env" ] && source "./build.$PROFILE.env"
} }
function docker_set_run_args() { function docker_set_run_args() {
replace_run_args+=(--env-file "$1") replace_run_args+=(--env-file "$1")
@ -791,6 +803,7 @@ function initialize_build_env() {
DIST= DIST=
} }
function default_update_build_env() { function default_update_build_env() {
local var
if [ -n "$DIST" ]; then if [ -n "$DIST" ]; then
[ -n "$VERSION" ] && VERSION="$VERSION-" [ -n "$VERSION" ] && VERSION="$VERSION-"
VERSION="$VERSION$DIST" VERSION="$VERSION$DIST"
@ -798,6 +811,10 @@ function default_update_build_env() {
fi fi
[ -n "$VERSION" ] || docker_add_build_arg VERSION "$(get_version)" [ -n "$VERSION" ] || docker_add_build_arg VERSION "$(get_version)"
[ -n "$VERSION" ] && TAGS+=("$VERSION") [ -n "$VERSION" ] && TAGS+=("$VERSION")
# Variables en ligne de commande
for var in "${VARS[@]}"; do
docker_add_build_arg "${var%%=*}" "${var#*=}"
done
} }
function update_build_env() { default_update_build_env; } function update_build_env() { default_update_build_env; }
@ -1023,6 +1040,11 @@ function auto_run() {
eval "$(utools_local parse_opts)" eval "$(utools_local parse_opts)"
local detach no_deps rm=1 service_ports use_aliases volume local detach no_deps rm=1 service_ports use_aliases volume
local -a envs labels local -a envs labels
local var
for var in "${VARS[@]}"; do
envs+=(-e "$var")
done
args=( args=(
+ +
-d,--detach detach=1 -d,--detach detach=1
@ -1401,6 +1423,7 @@ function local_composer() { default_local_composer "$@"; }
function docker_composer() { default_docker_composer "$@"; } function docker_composer() { default_docker_composer "$@"; }
function auto_composer() { function auto_composer() {
local COMPOSER_PHP= local COMPOSER_PHP=
local COMPOSER_PHP_MAX=
local COMPOSER_IMAGE="$DEFAULT_COMPOSER_IMAGE" local COMPOSER_IMAGE="$DEFAULT_COMPOSER_IMAGE"
local COMPOSER_MACHINE=-u local COMPOSER_MACHINE=-u
local COMPOSER_CMD= local COMPOSER_CMD=
@ -1410,6 +1433,7 @@ function auto_composer() {
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
COMPOSER_PHP=*) setv "$1"; shift;; COMPOSER_PHP=*) setv "$1"; shift;;
COMPOSER_PHP_MAX=*) setv "$1"; shift;;
COMPOSER_IMAGE=*) setv "$1"; shift;; COMPOSER_IMAGE=*) setv "$1"; shift;;
COMPOSER_MACHINE=*) setv "$1"; shift;; COMPOSER_MACHINE=*) setv "$1"; shift;;
COMPOSER_CMD=*) setv "$1"; shift;; COMPOSER_CMD=*) setv "$1"; shift;;
@ -1419,7 +1443,20 @@ function auto_composer() {
done done
local use_image local use_image
if [ -z "$COMPOSER_PHP" ]; then if [ -n "$COMPOSER_PHP_MAX" -a "$COMPOSER_PHP_MAX" != none ]; then
# Vérifier la version de PHP
php -r '
$version = $argv[1];
if (strpos($version, ".") !== false) {
$version = explode(".", $version);
$version = $version[0] * 10000 + $version[1] * 100 + (isset($version[2])? $version[2]: 0);
}
exit((PHP_VERSION_ID > $version)? 0: 1);
' -- "$COMPOSER_PHP_MAX" && use_image=1
fi
if [ -n "$use_image" ]; then
: # ok, on a déjà décidé qu'il faut utiliser une image
elif [ -z "$COMPOSER_PHP" ]; then
# pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE # pas de version minimum, tester simplement la valeur de COMPOSER_IMAGE
[ "$COMPOSER_IMAGE" != none ] && use_image=1 [ "$COMPOSER_IMAGE" != none ] && use_image=1
elif [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then elif [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
@ -1479,6 +1516,7 @@ CONFIG=
DM_SET_MACHINE= DM_SET_MACHINE=
USE_STACK= USE_STACK=
FAKE= FAKE=
VARS=()
FORCE= FORCE=
NO_CACHE= NO_CACHE=
HOST= HOST=
@ -1497,6 +1535,7 @@ args=(
-m:,--set-machine: DM_SET_MACHINE= -m:,--set-machine: DM_SET_MACHINE=
--stack USE_STACK=1 --stack USE_STACK=1
-n,--fake FAKE=1 -n,--fake FAKE=1
-e:,--build-arg:,--env: VARS
-f,--force FORCE=1 -f,--force FORCE=1
-j,--no-cache NO_CACHE=1 -j,--no-cache NO_CACHE=1
-h:,--host: HOST= -h:,--host: HOST=

View File

@ -582,19 +582,63 @@ function deli(num, i, j) {
} }
function del(field) { deli(geth(field)) } function del(field) { deli(geth(field)) }
function comparevic(field1, value1, field2, value2, icfields, array) { function __starts_with(prefix, string) {
return substr(string, 1, length(prefix)) == prefix
}
function __comparevic_truth(retval) {
return substr(retval, 1, 1) == "1"
}
function __comparevic_suffix(retval) {
return substr(retval, 2)
}
function comparevic(field1, value1, field2, value2, icfields, spfields, array, i, vs, f, prefix, suffix) {
# tester si on est un champ spécial.
prefix = ""
split(spfields, array, /,/)
for (i in array) {
split(array[i], vs, /=/)
f = tolower(vs[1])
if (f == tolower(field1) || f == tolower(field2)) {
prefix = vs[2]
break
}
}
suffix = ""
if (prefix != "") {
# les valeurs ayant le préfixe spécifié sont ignorées
split(value1, array, /;/)
array_new(vs)
for (i in array) {
if (!__starts_with(prefix, array[i])) {
array_add(vs, array[i])
} else {
if (suffix != "") suffix = suffix ";"
suffix = suffix array[i]
}
}
value1 = array_join(vs, ";")
split(value2, array, /;/)
array_new(vs)
for (i in array) {
if (!__starts_with(prefix, array[i])) {
array_add(vs, array[i])
}
}
value2 = array_join(vs, ";")
}
split(icfields, array, /,/) split(icfields, array, /,/)
if (in_array(field1, array, 1) || in_array(field2, array, 1)) { if (in_array(field1, array, 1) || in_array(field2, array, 1)) {
return tolower(value1) == tolower(value2) i = tolower(value1) == tolower(value2)? "1": "0"
} else { } else {
return value1 == value2 i = value1 == value2? "1": "0"
} }
return i suffix
} }
function ocompareic(field1, field2, icfields, v1, v2, array) { function ocompareic(field1, field2, icfields, spfields, v1, v2, array) {
return comparevic(field1, oget(field1), field2, oget(field2), icfields) return comparevic(field1, oget(field1), field2, oget(field2), icfields, spfields)
} }
function compareic(field1, field2, icfields, v1, v2, array) { function compareic(field1, field2, icfields, spfields, v1, v2, array) {
return comparevic(field1, get(field1), field2, get(field2), icfields) return comparevic(field1, get(field1), field2, get(field2), icfields, spfields)
} }
function infields(field, fields, array) { function infields(field, fields, array) {
split(fields, array, /,/) split(fields, array, /,/)

72
start-screen Executable file
View File

@ -0,0 +1,72 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
COULEUR_NORMALE=$'\e[0m'
COULEUR_ROUGE=$'\e[31;1m'
COULEUR_VERTE=$'\e[32;1m'
COULEUR_JAUNE=$'\e[33;1m'
COULEUR_BLEUE=$'\e[34;1m'
COULEUR_BLANCHE=$'\e[37;1m'
function __ask() {
local r
read -p "$1" -t 2 r
[ $? -gt 128 -o -z "$r" -o "$r" == "o" -o "$r" == "O" -o "$r" == "y" -o "$r" == "Y" ]
}
function __auto_screen() {
# Si screen pas installé, ne rien faire
if [ -z "$(which screen 2>/dev/null)" ]; then
echo "${COULEUR_JAUNE}WARNING${COULEUR_NORMALE} screen introuvable. une session bash classique sera lancée"
exec /bin/bash -l
fi
# Si on est déjà dans screen, ne rien faire
[ -z "$STY" ] || return
# corriger TERM pour les vieilles versions de Linux
case "$TERM" in
xterm*) TERM=xterm;;
screen*) TERM=screen;;
esac
export TERM
local msgprefix
local screens count
screens="$(LANG=C screen -ls | grep -Ei "attached|detached")"
if [ -n "$screens" ]; then
count="$(echo "$screens" | wc -l)"
else
count=0
fi
if [ $count -gt 0 ]; then
if [ $count -eq 1 ]; then
msgprefix="Il y a ${COULEUR_BLEUE}1 session screen en cours${COULEUR_NORMALE}
Cette session"
else
msgprefix="Il y a ${COULEUR_ROUGE}$count sessions screen en cours${COULEUR_NORMALE}:
$screens
La première session"
fi
if __ask "
$msgprefix sera reconnectée automatiquent dans 2 secondes
Voulez-vous reconnecter la session screen? [On] "; then
exec screen -q -s -/bin/bash -xRR
else
exec /bin/bash -l
fi
elif __ask "
Une ${COULEUR_VERTE}nouvelle session screen${COULEUR_NORMALE} sera lancée automatiquement dans 2 secondes
Voulez-vous lancer une session screen? [On] "; then
exec screen -q -s -/bin/bash -RR
else
exec /bin/bash -l
fi
}
if [ $# -gt 0 ]; then
# lancer les commandes fournies avant de lancer SCREEN
"$@"
fi
__auto_screen