Message ID | 1474369559-16903-1-git-send-email-ehabkost@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 <ehabkost@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
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)
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 <ehabkost@redhat.com> --- tests/docker/docker.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)