dk: support de la sélection d'un service et de la machine sur laquelle tourne un service
This commit is contained in:
parent
07bea2c842
commit
e0e6178aa5
143
dk
143
dk
|
@ -55,7 +55,10 @@ COMMANDES
|
||||||
container après utilisation.
|
container après utilisation.
|
||||||
x|exec SERVICE COMMAND
|
x|exec SERVICE COMMAND
|
||||||
Lancer une commande dans le container correspondant au service spécifié,
|
Lancer une commande dans le container correspondant au service spécifié,
|
||||||
qui doit être en fonctionnement
|
qui doit être en fonctionnement. Si la commande n'est pas spécifiée, la
|
||||||
|
valeur par défaut est bash. Avec les options --select-service et
|
||||||
|
--select-machine, l'argument SERVICE vaut par défaut 'SS'
|
||||||
|
Un pseudo-tty est alloué pour la commande et STDIN est ouvert.
|
||||||
d|brd [NAME=VALUE...]
|
d|brd [NAME=VALUE...]
|
||||||
Construire les images (comme avec build), démarrer les services et
|
Construire les images (comme avec build), démarrer les services et
|
||||||
suivre les logs de façon interactive (comme avec up). Dès que l'on
|
suivre les logs de façon interactive (comme avec up). Dès que l'on
|
||||||
|
@ -119,6 +122,12 @@ COMMANDES
|
||||||
systemd|systemd-unit
|
systemd|systemd-unit
|
||||||
Générer une unité systemd qui démarre les services. A priori, ce n'est
|
Générer une unité systemd qui démarre les services. A priori, ce n'est
|
||||||
nécessaire que si aucune politique de redémarrage n'a été définie.
|
nécessaire que si aucune politique de redémarrage n'a été définie.
|
||||||
|
cp|copy CONTAINER:SRC DEST
|
||||||
|
cp|copy SRC CONTAINER:DEST
|
||||||
|
Copier un fichier ou un répertoire depuis/vers un container. Avec les
|
||||||
|
options --select-service et --select-machine, il est possible d'utiliser
|
||||||
|
'SS' pour signifier le container sélectionné e.g
|
||||||
|
$scriptname -s X_Y -- cp file SS:path/to/dir
|
||||||
ps [filter|name=value]
|
ps [filter|name=value]
|
||||||
Afficher les containers en cours d'exécution
|
Afficher les containers en cours d'exécution
|
||||||
Le filtre est une expression régulière de type awk qui est mise en
|
Le filtre est une expression régulière de type awk qui est mise en
|
||||||
|
@ -239,6 +248,21 @@ OPTIONS générales
|
||||||
-m, --set-machine MACHINE
|
-m, --set-machine MACHINE
|
||||||
Choisir l'environnement docker-machine spécifié avant de lancer les
|
Choisir l'environnement docker-machine spécifié avant de lancer les
|
||||||
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
|
||||||
|
-s, --select-service SERVICE[.N]
|
||||||
|
Sélectionner le service spécifié. Si le service a plusieurs instances,
|
||||||
|
il est possible de sélectionner une instance en particulier avec le
|
||||||
|
suffixe '.N' (par défaut, la première instance est sélectionnée)
|
||||||
|
Quand un service est sélectionné, dans les commandes 'cp' et 'exec', la
|
||||||
|
chaine 'SS' est remplacée par le nom du container correspondant e.g
|
||||||
|
$scriptname -s X_Y exec SS bash
|
||||||
|
$scriptname -s X_Y -- cp -L SS:path/to/file destdir
|
||||||
|
-t, --select-machine SERVICE[.N]
|
||||||
|
Sélectionner le service spécifié, puis choisir l'environnement
|
||||||
|
docker-machine correspondant. Cette option a la priorité sur l'option
|
||||||
|
--select-service
|
||||||
|
Cette option est traitée après l'option --set-machine, ce qui permet de
|
||||||
|
se connecter sur le manager d'un cluster puis de sélectionner le worker
|
||||||
|
sur lequel tourne un service
|
||||||
-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
|
-e, --build-arg, --env VAR=VALUE
|
||||||
|
@ -1265,13 +1289,28 @@ function auto_exec() {
|
||||||
local project_name container_name
|
local project_name container_name
|
||||||
if [ -f docker-compose.yml ]; then
|
if [ -f docker-compose.yml ]; then
|
||||||
compose_set_env_args
|
compose_set_env_args
|
||||||
compose_exec "$@"
|
local container="$1"; shift
|
||||||
|
if [ -n "$SELECT_CONTAINER" ]; then
|
||||||
|
[ -z "$container" -o "$container" == SS ] && container="$SELECT_CONTAINER"
|
||||||
|
fi
|
||||||
|
local command="$1"; shift
|
||||||
|
[ -n "$command" ] || command=bash
|
||||||
|
compose_exec "$container" "$command" "$@"
|
||||||
elif [ -f Dockerfile ]; then
|
elif [ -f Dockerfile ]; then
|
||||||
docker_set_env_args
|
docker_set_env_args
|
||||||
docker_check_name set_container_name
|
docker_check_name set_container_name
|
||||||
docker_exec "$@"
|
exec_args=(-it)
|
||||||
|
local command="$1"; shift
|
||||||
|
[ -n "$command" ] || command=bash
|
||||||
|
docker_exec "$command" "$@"
|
||||||
else
|
else
|
||||||
${FAKE:+qvals} "$DOCKER" exec "$@"
|
local container="$1"; shift
|
||||||
|
if [ -n "$SELECT_CONTAINER" ]; then
|
||||||
|
[ -z "$container" -o "$container" == SS ] && container="$SELECT_CONTAINER"
|
||||||
|
fi
|
||||||
|
local command="$1"; shift
|
||||||
|
[ -n "$command" ] || command=bash
|
||||||
|
${FAKE:+qvals} "$DOCKER" exec -it "$container" "$command" "$@"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1358,6 +1397,7 @@ function __format() {
|
||||||
|
|
||||||
function __status_query_task() {
|
function __status_query_task() {
|
||||||
setx taskData="$DOCKER" inspect "$taskID"
|
setx taskData="$DOCKER" inspect "$taskID"
|
||||||
|
setx taskID=json_get 0.ID <<<"$taskData"
|
||||||
setx taskSlot=json_get 0.Slot <<<"$taskData"
|
setx taskSlot=json_get 0.Slot <<<"$taskData"
|
||||||
setx taskStatus=json_get 0.Status.Err <<<"$taskData"
|
setx taskStatus=json_get 0.Status.Err <<<"$taskData"
|
||||||
setx serviceID=json_get 0.ServiceID <<<"$taskData"
|
setx serviceID=json_get 0.ServiceID <<<"$taskData"
|
||||||
|
@ -1381,11 +1421,11 @@ $serviceName: $serviceUpdateStatus
|
||||||
fi
|
fi
|
||||||
if [ "$num" -eq 0 ]; then
|
if [ "$num" -eq 0 ]; then
|
||||||
# afficher les en-têtes
|
# afficher les en-têtes
|
||||||
__format 3:num 32:taskName 32:node 8:dState 20:cState :error
|
__format 3:num 48:taskName 32:node 8:dState 20:cState :error
|
||||||
fi
|
fi
|
||||||
if [ -z "$fnum" -o "$num" == "$fnum" ]; then
|
if [ -z "$fnum" -o "$num" == "$fnum" ]; then
|
||||||
taskName="$serviceName.$taskSlot"
|
taskName="$serviceName.$taskSlot"
|
||||||
__format 3:"$num" 32:"$taskName.$taskID" 32:"$node" 8:"$desiredState" 20:"$currentState" :"$taskStatus"
|
__format 3:"$num" 48:"$taskName.$taskID" 32:"$node" 8:"$desiredState" 20:"$currentState" :"$taskStatus"
|
||||||
fi
|
fi
|
||||||
if [ "$num" == "$fnum" ]; then
|
if [ "$num" == "$fnum" ]; then
|
||||||
"$DOCKER" service logs -f "$taskID"
|
"$DOCKER" service logs -f "$taskID"
|
||||||
|
@ -1573,6 +1613,25 @@ EOF
|
||||||
local_run "$HOST" "$tmpscript"
|
local_run "$HOST" "$tmpscript"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function auto_copy() {
|
||||||
|
local src="$1"; shift
|
||||||
|
local dest="$1"; shift
|
||||||
|
if [ -n "$SELECT_CONTAINER" ]; then
|
||||||
|
if [ "${src#SS:}" != "$src" ]; then
|
||||||
|
src="$SELECT_CONTAINER${src#SS}"
|
||||||
|
elif [ "${src#:}" != "$src" ]; then
|
||||||
|
src="$SELECT_CONTAINER$src"
|
||||||
|
fi
|
||||||
|
if [ "${dest#SS:}" != "$dest" ]; then
|
||||||
|
dest="$SELECT_CONTAINER${dest#SS}"
|
||||||
|
elif [ "${dest#:}" != "$dest" ]; then
|
||||||
|
dest="$SELECT_CONTAINER$dest"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$DOCKER" cp "$src" "$dest" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
function default_local_composer() {
|
function default_local_composer() {
|
||||||
# lancement direct
|
# lancement direct
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
@ -1785,6 +1844,8 @@ export PROFILE
|
||||||
chdir=
|
chdir=
|
||||||
CONFIG=
|
CONFIG=
|
||||||
DM_SET_MACHINE=
|
DM_SET_MACHINE=
|
||||||
|
SELECT_CONTAINER=
|
||||||
|
SELECT_MACHINE=
|
||||||
USE_STACK=
|
USE_STACK=
|
||||||
FAKE=
|
FAKE=
|
||||||
VARS=()
|
VARS=()
|
||||||
|
@ -1804,6 +1865,8 @@ args=(
|
||||||
-P,--prod PROFILE=prod
|
-P,--prod PROFILE=prod
|
||||||
-T,--test PROFILE=test
|
-T,--test PROFILE=test
|
||||||
-m:,--set-machine: DM_SET_MACHINE=
|
-m:,--set-machine: DM_SET_MACHINE=
|
||||||
|
-s:,--select-service: SELECT_CONTAINER=
|
||||||
|
-t:,--select-machine: SELECT_MACHINE=
|
||||||
--stack USE_STACK=1
|
--stack USE_STACK=1
|
||||||
-n,--fake FAKE=1
|
-n,--fake FAKE=1
|
||||||
-e:,--build-arg:,--env: VARS
|
-e:,--build-arg:,--env: VARS
|
||||||
|
@ -1828,6 +1891,66 @@ if [ -n "$DM_SET_MACHINE" ]; then
|
||||||
# pour warning ci-dessous
|
# pour warning ci-dessous
|
||||||
[ "$DM_SET_MACHINE" == -u ] && DM_SET_MACHINE=
|
[ "$DM_SET_MACHINE" == -u ] && DM_SET_MACHINE=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "$SELECT_MACHINE" -o -n "$SELECT_CONTAINER" ]; then
|
||||||
|
function __ss_process_data() {
|
||||||
|
[ -n "$found" ] && return
|
||||||
|
__status_query_task
|
||||||
|
__status_query_service
|
||||||
|
if [ -n "$slot" ]; then
|
||||||
|
if [ "$taskSlot" == "$slot" ]; then
|
||||||
|
# ne prendre que le slot qui correspond
|
||||||
|
found=1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# prendre le premier
|
||||||
|
found=1
|
||||||
|
fi
|
||||||
|
taskName="$serviceName.$taskSlot"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -n "$SELECT_MACHINE" ]; then service="$SELECT_MACHINE"
|
||||||
|
elif [ -n "$SELECT_CONTAINER" ]; then service="$SELECT_CONTAINER"
|
||||||
|
fi
|
||||||
|
if [ -f docker-compose.yml -o -f docker-stack.yml ]; then
|
||||||
|
# si on est dans répertoire de projet, il est possible de spécifier
|
||||||
|
# le service sans préfixe
|
||||||
|
docker_set_deploy_args set_container_name
|
||||||
|
service="${container_name}_${service#${container_name}_}"
|
||||||
|
fi
|
||||||
|
if [[ "$service" == *.* ]]; then
|
||||||
|
slot="${service##*.}"
|
||||||
|
service="${service%.*}"
|
||||||
|
else
|
||||||
|
slot=
|
||||||
|
fi
|
||||||
|
|
||||||
|
psargs=(
|
||||||
|
--filter desired-state=running
|
||||||
|
--format "taskID={{.ID}};node={{.Node}};__ss_process_data"
|
||||||
|
)
|
||||||
|
found=
|
||||||
|
eval "$("$DOCKER" service ps "$service" "${psargs[@]}" 2>/dev/null)"
|
||||||
|
|
||||||
|
if [ -n "$found" ]; then
|
||||||
|
SELECT_CONTAINER="$serviceName.$taskSlot.$taskID"
|
||||||
|
if [ -n "$SELECT_MACHINE" ]; then
|
||||||
|
DM_SET_MACHINE="$node"
|
||||||
|
else
|
||||||
|
enote "Sélection du container $SELECT_CONTAINER"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
die "$service${slot:+.$slot}: service introuvable"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [ -n "$SELECT_MACHINE" ]; then
|
||||||
|
enote "Sélection de la machine $DM_SET_MACHINE"
|
||||||
|
|
||||||
|
[ -n "$DM_AVAILABLE" ] || die "docker-machine n'est pas disponible"
|
||||||
|
setx dm_env=docker-machine env "$DM_SET_MACHINE" || die
|
||||||
|
eval "$dm_env"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "$DM_AVAILABLE" ]; then
|
if [ -n "$DM_AVAILABLE" ]; then
|
||||||
found=
|
found=
|
||||||
for dm_profile in "${DM_PROFILES[@]}"; do
|
for dm_profile in "${DM_PROFILES[@]}"; do
|
||||||
|
@ -2083,6 +2206,14 @@ while [ $# -gt 0 ]; do
|
||||||
enote "Profil $PROFILE"
|
enote "Profil $PROFILE"
|
||||||
auto_systemd_unit "${args[@]}" || die
|
auto_systemd_unit "${args[@]}" || die
|
||||||
;;
|
;;
|
||||||
|
cp|copy)
|
||||||
|
args=()
|
||||||
|
while [ $# -gt 0 -a "$1" != -- ]; do
|
||||||
|
args+=("$1"); shift
|
||||||
|
done
|
||||||
|
enote "Profil $PROFILE"
|
||||||
|
auto_copy "${args[@]}" || die
|
||||||
|
;;
|
||||||
ps)
|
ps)
|
||||||
pscmd=(
|
pscmd=(
|
||||||
"$DOCKER" container ps -a
|
"$DOCKER" container ps -a
|
||||||
|
|
Loading…
Reference in New Issue