From: Fam Zheng <famz@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] docker: Handle exceptions when looking for docker command
Date: Tue, 20 Sep 2016 19:16:09 +0800 [thread overview]
Message-ID: <20160920111609.GA22222@lemon> (raw)
In-Reply-To: <1474369559-16903-1-git-send-email-ehabkost@redhat.com>
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
prev parent reply other threads:[~2016-09-20 11:16 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-20 11:05 [Qemu-devel] [PATCH] docker: Handle exceptions when looking for docker command Eduardo Habkost
2016-09-20 11:16 ` Fam Zheng [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160920111609.GA22222@lemon \
--to=famz@redhat.com \
--cc=ehabkost@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.