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
Pour des cas d'utilisation plus complexe, il faut lancer directement
docker service
sta|status SERVICE [num]
sta|status [SERVICE] [num]
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
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é,
afficher les informations uniquement pour cette instance là, ainsi que
les logs
@ -1243,11 +1244,11 @@ function __status_query_task() {
setx serviceID=json_get 0.ServiceID <<<"$taskData"
}
function __status_query_service() {
[ -n "$serviceData" ] && return
setx serviceID=json_get 0.ServiceID <<<"$taskData"
[ "$serviceID" == "$pServiceID" ] && return
setx serviceData="$DOCKER" inspect "$serviceID"
setx serviceName=json_get 0.Spec.Name <<<"$serviceData"
setx serviceUpdateStatus=json_get 0.UpdateStatus.Message <<<"$serviceData"
pServiceID="$serviceID"
}
function __status_process_data() {
__status_query_task
@ -1273,35 +1274,47 @@ $serviceName: $serviceUpdateStatus
let num=num+1
}
function auto_status() {
local service="$1"; shift
[ -n "$service" ] || {
eerror "Vous devez spécifier le nom du service"
return 1
}
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
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}_}"
local -a services
local service
if [[ "$1" == *=* ]]; then
: # le premier argument est un filtre
elif [ -n "$1" -a -z "${1//[0-9]/}" ]; then
: # le premier argument est un numéro d'instance
else
# le premier argument est un nom de service
service="$1"; shift
fi
if [ -n "$service" ]; then
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
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
local -a pscmd
local -a psargs
local fnum
pscmd=(
"$DOCKER" service ps "$service"
psargs=(
--format "taskID={{.ID}};node={{.Node}};desiredState='{{.DesiredState}}';currentState='{{.CurrentState}}';__status_process_data"
)
while [[ "$1" == *=* ]]; do
pscmd+=(--filter "$1")
psargs+=(--filter "$1")
shift
done
fnum="$1"; shift
local num=0 taskData taskStatus taskSlot serviceID serviceData serviceName serviceUpdateStatus
eval "$("${pscmd[@]}")"
local num=0 taskData taskStatus taskSlot pServiceID serviceID serviceData serviceName serviceUpdateStatus
for service in "${services[@]}"; do
eval "$("$DOCKER" service ps "$service" "${psargs[@]}")"
done
}
function default_compose_show_ip() {