Message ID | 20161028163339.31096-6-alex.bennee@linaro.org |
---|---|
State | New |
Headers | show |
On Fri, 10/28 17:33, Alex Bennée wrote: > Modern docker cli commands can filter by repository but as we want to > work on all instances do this by hand in python: > > /tests/docker/docker.py images --repo qemu > > Will return a space delimited list for the benefit of our Makefile > recipes. > > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > --- > tests/docker/docker.py | 27 ++++++++++++++++++++++----- > 1 file changed, 22 insertions(+), 5 deletions(-) > > diff --git a/tests/docker/docker.py b/tests/docker/docker.py > index 37d8319..03c0238 100755 > --- a/tests/docker/docker.py > +++ b/tests/docker/docker.py > @@ -105,12 +105,15 @@ class Docker(object): > signal.signal(signal.SIGTERM, self._kill_instances) > signal.signal(signal.SIGHUP, self._kill_instances) > > - def _do(self, cmd, quiet=True, infile=None, **kwargs): > + def _do(self, cmd, quiet=True, infile=None, output=False, **kwargs): > if quiet: > kwargs["stdout"] = DEVNULL > if infile: > kwargs["stdin"] = infile > - return subprocess.call(self._command + cmd, **kwargs) > + if output: > + return subprocess.check_output(self._command + cmd, **kwargs) > + else: > + return subprocess.call(self._command + cmd, **kwargs) > > def _do_kill_instances(self, only_known, only_active=True): > cmd = ["ps", "-q"] > @@ -188,8 +191,8 @@ class Docker(object): > self._instances.remove(label) > return ret > > - def command(self, cmd, argv, quiet): > - return self._do([cmd] + argv, quiet=quiet) > + def command(self, cmd, argv, quiet, output=False): > + return self._do([cmd] + argv, quiet=quiet, output=output) > > class SubCommand(object): > """A SubCommand template base class""" > @@ -325,8 +328,22 @@ class CleanCommand(SubCommand): > class ImagesCommand(SubCommand): > """Run "docker images" command""" > name = "images" > + def args(self, parser): > + parser.add_argument("--repo", > + help="List images in the given repository") > + > def run(self, args, argv): > - return Docker().command("images", argv, args.quiet) > + if args.repo: > + images=[] > + image_re = re.compile(r"^"+re.escape(args.repo)+r"\s+(\S*)") > + output = Docker().command("images", argv, args.quiet, output=True) > + for line in output.split("\n"): > + search = image_re.search(line) > + if search: > + images.append(search.group(1)) > + print ' '.join(map(str,images)) s/,/, / Otherwise looks good. > + else: > + return Docker().command("images", argv, args.quiet) > > def main(): > parser = argparse.ArgumentParser(description="A Docker helper", > -- > 2.10.1 >
diff --git a/tests/docker/docker.py b/tests/docker/docker.py index 37d8319..03c0238 100755 --- a/tests/docker/docker.py +++ b/tests/docker/docker.py @@ -105,12 +105,15 @@ class Docker(object): signal.signal(signal.SIGTERM, self._kill_instances) signal.signal(signal.SIGHUP, self._kill_instances) - def _do(self, cmd, quiet=True, infile=None, **kwargs): + def _do(self, cmd, quiet=True, infile=None, output=False, **kwargs): if quiet: kwargs["stdout"] = DEVNULL if infile: kwargs["stdin"] = infile - return subprocess.call(self._command + cmd, **kwargs) + if output: + return subprocess.check_output(self._command + cmd, **kwargs) + else: + return subprocess.call(self._command + cmd, **kwargs) def _do_kill_instances(self, only_known, only_active=True): cmd = ["ps", "-q"] @@ -188,8 +191,8 @@ class Docker(object): self._instances.remove(label) return ret - def command(self, cmd, argv, quiet): - return self._do([cmd] + argv, quiet=quiet) + def command(self, cmd, argv, quiet, output=False): + return self._do([cmd] + argv, quiet=quiet, output=output) class SubCommand(object): """A SubCommand template base class""" @@ -325,8 +328,22 @@ class CleanCommand(SubCommand): class ImagesCommand(SubCommand): """Run "docker images" command""" name = "images" + def args(self, parser): + parser.add_argument("--repo", + help="List images in the given repository") + def run(self, args, argv): - return Docker().command("images", argv, args.quiet) + if args.repo: + images=[] + image_re = re.compile(r"^"+re.escape(args.repo)+r"\s+(\S*)") + output = Docker().command("images", argv, args.quiet, output=True) + for line in output.split("\n"): + search = image_re.search(line) + if search: + images.append(search.group(1)) + print ' '.join(map(str,images)) + else: + return Docker().command("images", argv, args.quiet) def main(): parser = argparse.ArgumentParser(description="A Docker helper",
Modern docker cli commands can filter by repository but as we want to work on all instances do this by hand in python: /tests/docker/docker.py images --repo qemu Will return a space delimited list for the benefit of our Makefile recipes. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> --- tests/docker/docker.py | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) -- 2.10.1