dk: sta affiche le statut pour tous les services

This commit is contained in:
Jephté Clain 2020-03-26 22:33:25 +04:00
parent 1960c0c94e
commit 45976f45c2
1 changed files with 36 additions and 23 deletions

59
dk
View File

@ -92,10 +92,11 @@ COMMANDES
$scriptname -- service logs web -f $scriptname -- service logs web -f
Pour des cas d'utilisation plus complexe, il faut lancer directement Pour des cas d'utilisation plus complexe, il faut lancer directement
docker service docker service
sta|status SERVICE [num] sta|status [SERVICE] [num]
Afficher le status du service spécifié: pour chaque occurence, sur quel Afficher le status du service spécifié: pour chaque occurence, sur quel
noeud il tourne (ou tournait), quel est le statut actuel ainsi que le noeud il tourne (ou tournait), quel est le statut actuel ainsi que le
message associé. message associé. Si le service n'est pas spécifié, prendre la liste des
services affichée par docker service ls
'num' est le numéro de l'instance de service. Si ce numéro est précisé, 'num' est le numéro de l'instance de service. Si ce numéro est précisé,
afficher les informations uniquement pour cette instance là, ainsi que afficher les informations uniquement pour cette instance là, ainsi que
les logs les logs
@ -1243,11 +1244,11 @@ function __status_query_task() {
setx serviceID=json_get 0.ServiceID <<<"$taskData" setx serviceID=json_get 0.ServiceID <<<"$taskData"
} }
function __status_query_service() { function __status_query_service() {
[ -n "$serviceData" ] && return [ "$serviceID" == "$pServiceID" ] && return
setx serviceID=json_get 0.ServiceID <<<"$taskData"
setx serviceData="$DOCKER" inspect "$serviceID" setx serviceData="$DOCKER" inspect "$serviceID"
setx serviceName=json_get 0.Spec.Name <<<"$serviceData" setx serviceName=json_get 0.Spec.Name <<<"$serviceData"
setx serviceUpdateStatus=json_get 0.UpdateStatus.Message <<<"$serviceData" setx serviceUpdateStatus=json_get 0.UpdateStatus.Message <<<"$serviceData"
pServiceID="$serviceID"
} }
function __status_process_data() { function __status_process_data() {
__status_query_task __status_query_task
@ -1273,35 +1274,47 @@ $serviceName: $serviceUpdateStatus
let num=num+1 let num=num+1
} }
function auto_status() { function auto_status() {
local service="$1"; shift local -a services
[ -n "$service" ] || { local service
eerror "Vous devez spécifier le nom du service" if [[ "$1" == *=* ]]; then
return 1 : # le premier argument est un filtre
} elif [ -n "$1" -a -z "${1//[0-9]/}" ]; then
if [ -f docker-compose.yml -o -f docker-stack.yml ]; then : # le premier argument est un numéro d'instance
# si on est dans répertoire de projet, il est possible de spécifier le else
# service sans préfixe # le premier argument est un nom de service
local -a replace_env_args env_args service="$1"; shift
local -a replace_deploy_args deploy_args fi
local project_name container_name if [ -n "$service" ]; then
docker_set_deploy_args set_container_name if [ -f docker-compose.yml -o -f docker-stack.yml ]; then
service="${container_name}_${service#${container_name}_}" # si on est dans répertoire de projet, il est possible de spécifier
# le service sans préfixe
local -a replace_env_args env_args
local -a replace_deploy_args deploy_args
local project_name container_name
docker_set_deploy_args set_container_name
service="${container_name}_${service#${container_name}_}"
fi
services=("$service")
else
# lister les services qui tournent actuellement
setx -a services=docker service ls --format "{{.Name}}"
fi fi
local -a pscmd local -a psargs
local fnum local fnum
pscmd=( psargs=(
"$DOCKER" service ps "$service"
--format "taskID={{.ID}};node={{.Node}};desiredState='{{.DesiredState}}';currentState='{{.CurrentState}}';__status_process_data" --format "taskID={{.ID}};node={{.Node}};desiredState='{{.DesiredState}}';currentState='{{.CurrentState}}';__status_process_data"
) )
while [[ "$1" == *=* ]]; do while [[ "$1" == *=* ]]; do
pscmd+=(--filter "$1") psargs+=(--filter "$1")
shift shift
done done
fnum="$1"; shift fnum="$1"; shift
local num=0 taskData taskStatus taskSlot serviceID serviceData serviceName serviceUpdateStatus local num=0 taskData taskStatus taskSlot pServiceID serviceID serviceData serviceName serviceUpdateStatus
eval "$("${pscmd[@]}")" for service in "${services[@]}"; do
eval "$("$DOCKER" service ps "$service" "${psargs[@]}")"
done
} }
function default_compose_show_ip() { function default_compose_show_ip() {