Intégration de la branche release-9.6.0
This commit is contained in:
commit
abd178bf0d
|
@ -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
|
||||
|
|
|
@ -1 +1 @@
|
|||
9.5.0
|
||||
9.6.0
|
||||
|
|
74
cssh
74
cssh
|
@ -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
41
dk
|
@ -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=
|
||||
|
|
58
lib/ulib/awk
58
lib/ulib/awk
|
@ -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, /,/)
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue