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
* `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"
[ "${#hosts[*]}" -gt 0 ] || die "Vous devez spécifier l'hôte sur lequel se connecter"
cmd="'$(qvals "${args[@]}")
"'
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
}
__auto_screen
'\'
[ ${#args[*]} -gt 0 ] && cmd="$(qvals "${args[@]}"); " || cmd=
cmd="$cmd$(<"$scriptdir/start-screen")"
cmd="'${cmd//\'/\'\\\'\'}'"
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

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
70300 pour PHP 7.3
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
défaut est:
$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
-n, --fake
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
Forcer l'opération (là où cela a du sens)
-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)"
[ -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() {
[ -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"
}
function docker_set_run_args() {
replace_run_args+=(--env-file "$1")
@ -791,6 +803,7 @@ function initialize_build_env() {
DIST=
}
function default_update_build_env() {
local var
if [ -n "$DIST" ]; then
[ -n "$VERSION" ] && VERSION="$VERSION-"
VERSION="$VERSION$DIST"
@ -798,6 +811,10 @@ function default_update_build_env() {
fi
[ -n "$VERSION" ] || docker_add_build_arg VERSION "$(get_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; }
@ -1023,6 +1040,11 @@ function auto_run() {
eval "$(utools_local parse_opts)"
local detach no_deps rm=1 service_ports use_aliases volume
local -a envs labels
local var
for var in "${VARS[@]}"; do
envs+=(-e "$var")
done
args=(
+
-d,--detach detach=1
@ -1401,6 +1423,7 @@ function local_composer() { default_local_composer "$@"; }
function docker_composer() { default_docker_composer "$@"; }
function auto_composer() {
local COMPOSER_PHP=
local COMPOSER_PHP_MAX=
local COMPOSER_IMAGE="$DEFAULT_COMPOSER_IMAGE"
local COMPOSER_MACHINE=-u
local COMPOSER_CMD=
@ -1410,6 +1433,7 @@ function auto_composer() {
while [ $# -gt 0 ]; do
case "$1" in
COMPOSER_PHP=*) setv "$1"; shift;;
COMPOSER_PHP_MAX=*) setv "$1"; shift;;
COMPOSER_IMAGE=*) setv "$1"; shift;;
COMPOSER_MACHINE=*) setv "$1"; shift;;
COMPOSER_CMD=*) setv "$1"; shift;;
@ -1419,7 +1443,20 @@ function auto_composer() {
done
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
[ "$COMPOSER_IMAGE" != none ] && use_image=1
elif [ "$COMPOSER_PHP" == force -o "$COMPOSER_PHP" == any ]; then
@ -1479,6 +1516,7 @@ CONFIG=
DM_SET_MACHINE=
USE_STACK=
FAKE=
VARS=()
FORCE=
NO_CACHE=
HOST=
@ -1497,6 +1535,7 @@ args=(
-m:,--set-machine: DM_SET_MACHINE=
--stack USE_STACK=1
-n,--fake FAKE=1
-e:,--build-arg:,--env: VARS
-f,--force FORCE=1
-j,--no-cache NO_CACHE=1
-h:,--host: HOST=

View File

@ -582,19 +582,63 @@ function deli(num, i, j) {
}
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, /,/)
if (in_array(field1, array, 1) || in_array(field2, array, 1)) {
return tolower(value1) == tolower(value2)
i = tolower(value1) == tolower(value2)? "1": "0"
} else {
return value1 == value2
i = value1 == value2? "1": "0"
}
return i suffix
}
function ocompareic(field1, field2, icfields, v1, v2, array) {
return comparevic(field1, oget(field1), field2, oget(field2), icfields)
function ocompareic(field1, field2, icfields, spfields, v1, v2, array) {
return comparevic(field1, oget(field1), field2, oget(field2), icfields, spfields)
}
function compareic(field1, field2, icfields, v1, v2, array) {
return comparevic(field1, get(field1), field2, get(field2), icfields)
function compareic(field1, field2, icfields, spfields, v1, v2, array) {
return comparevic(field1, get(field1), field2, get(field2), icfields, spfields)
}
function infields(field, 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