On Tue, 09/20 08:05, Eduardo Habkost wrote: > When trying to run docker tests on a host without the docker > command, we get the following Python backtrace: > > $ make docker-test-quick@centos6 V=1 > .../qemu/tests/docker/docker.py build qemu:centos6 > .../qemu/tests/docker/dockerfiles/centos6.docker > Traceback (most recent call last): > File ".../qemu/tests/docker/docker.py", line 339, in <module> > sys.exit(main()) > File ".../qemu/tests/docker/docker.py", line 336, in main > return args.cmdobj.run(args, argv) > File ".../qemu/tests/docker/docker.py", line 231, in run > dkr = Docker() > File ".../qemu/tests/docker/docker.py", line 98, in __init__ > self._command = _guess_docker_command() > File ".../qemu/tests/docker/docker.py", line 41, in _guess_docker_command > stdout=DEVNULL, stderr=DEVNULL) == 0: > File "/usr/lib64/python2.7/subprocess.py", line 523, in call > return Popen(*popenargs, **kwargs).wait() > File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__ > errread, errwrite) > File "/usr/lib64/python2.7/subprocess.py", line 1343, in _execute_child > raise child_exception > OSError: [Errno 2] No such file or directory > .../qemu/tests/docker/Makefile.include:47: recipe for target > 'docker-image-centos6' failed > make: *** [docker-image-centos6] Error 1 > > Change _guess_docker_command() to handle OSError exceptions > raised by subprocess.call(), so we will keep looking for other > commands and print a better error message. > > New output will be: > > $ make docker-test-quick@centos6 V=1 > .../qemu/tests/docker/docker.py build qemu:centos6 > .../qemu/tests/docker/dockerfiles/centos6.docker > Traceback (most recent call last): > File ".../qemu/tests/docker/docker.py", line 343, in <module> > sys.exit(main()) > File ".../qemu/tests/docker/docker.py", line 340, in main > return args.cmdobj.run(args, argv) > File ".../qemu/tests/docker/docker.py", line 235, in run > dkr = Docker() > File ".../qemu/tests/docker/docker.py", line 102, in __init__ > self._command = _guess_docker_command() > File ".../qemu/tests/docker/docker.py", line 49, in _guess_docker_command > commands_txt) > Exception: Cannot find working docker command. Tried: > docker > sudo -n docker > .../qemu/tests/docker/Makefile.include:47: recipe for target > 'docker-image-centos6' failed > make: *** [docker-image-centos6] Error 1 > > Signed-off-by: Eduardo Habkost <ehabk...@redhat.com> > --- > tests/docker/docker.py | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/tests/docker/docker.py b/tests/docker/docker.py > index b85c165..daff340 100755 > --- a/tests/docker/docker.py > +++ b/tests/docker/docker.py > @@ -13,6 +13,7 @@ > > import os > import sys > +import exceptions > import subprocess > import json > import hashlib > @@ -37,9 +38,12 @@ def _guess_docker_command(): > """ Guess a working docker command or raise exception if not found""" > commands = [["docker"], ["sudo", "-n", "docker"]] > for cmd in commands: > - if subprocess.call(cmd + ["images"], > - stdout=DEVNULL, stderr=DEVNULL) == 0: > - return cmd > + try: > + if subprocess.call(cmd + ["images"], > + stdout=DEVNULL, stderr=DEVNULL) == 0: > + return cmd > + except exceptions.OSError: > + pass > commands_txt = "\n".join([" " + " ".join(x) for x in commands]) > raise Exception("Cannot find working docker command. Tried:\n%s" % \ > commands_txt) > -- > 2.7.4 >
Looks good, except that like exceptions.Exception, OSError is also magically addressable as "OSError", saving us one import. _copy_with_mkdir below already does that. Fixing that for consistency and queued for next PULL, thanks! Fam