diff --git a/dk b/dk index 36221eb..5a0e321 100755 --- a/dk +++ b/dk @@ -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() {