55# pylint:disable=redefined-outer-name
66
77import subprocess
8+ import time
89from pathlib import Path
910
1011import docker
@@ -24,6 +25,7 @@ def docker_swarm(docker_client):
2425 # teardown
2526 assert docker_client .swarm .leave (force = True )
2627
28+
2729@pytest .fixture (scope = 'module' )
2830def docker_stack (docker_swarm , docker_client , docker_compose_file : Path , tools_docker_compose_file : Path ):
2931 docker_compose_ignore_file = docker_compose_file .parent / "docker-compose.ignore.yml"
@@ -44,10 +46,46 @@ def docker_stack(docker_swarm, docker_client, docker_compose_file: Path, tools_d
4446 )
4547 assert process .returncode == 0 , "Error in '{}'" .format (cmd )
4648
49+
4750 with docker_compose_ignore_file .open () as fp :
4851 docker_stack_cfg = yaml .safe_load (fp )
49- yield docker_stack_cfg
5052
51- # clean up
53+ def _print_services (msg ):
54+ from pprint import pprint
55+ print ("{:*^100}" .format ("docker services list " + msg ))
56+ for service in docker_client .services .list ():
57+ pprint (service .attrs )
58+ print ("-" * 100 )
59+
60+
61+ _print_services ("[BEFORE TEST]" )
62+
63+ yield docker_stack_cfg
64+
65+ _print_services ("[AFTER TEST]" )
66+
67+ # clean up. Guarantees that all services are down before creating a new stack!
68+ #
69+ # WORKAROUND https://github.com/moby/moby/issues/30942#issue-207070098
70+ #
71+ # docker stack rm services
72+
73+ # until [ -z "$(docker service ls --filter label=com.docker.stack.namespace=services -q)" ] || [ "$limit" -lt 0 ]; do
74+ # sleep 1;
75+ # done
76+
77+ # until [ -z "$(docker network ls --filter label=com.docker.stack.namespace=services -q)" ] || [ "$limit" -lt 0 ]; do
78+ # sleep 1;
79+ # done
80+
5281 assert subprocess .run ("docker stack rm services" , shell = True ).returncode == 0
82+
83+ while docker_client .services .list (filters = {"label" :"com.docker.stack.namespace=services" }):
84+ time .sleep (1 )
85+
86+ while docker_client .networks .list (filters = {"label" :"com.docker.stack.namespace=services" }):
87+ time .sleep (1 )
88+
5389 docker_compose_ignore_file .unlink ()
90+
91+ _print_services ("[AFTER REMOVED]" )
0 commit comments