提交 f97da1f7 编写于 作者: A Alex Bennée

docker: docker.py add check sub-command

This command allows you to check if we need to re-build a docker
image. If the image isn't in the repository or the checksums don't
match then we return false and some text (for processing in
makefiles).
Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
上级 f9172822
......@@ -184,8 +184,14 @@ class Docker(object):
stderr=subprocess.STDOUT,
**kwargs)
def inspect_tag(self, tag):
try:
return self._output(["inspect", tag])
except subprocess.CalledProcessError:
return None
def get_image_dockerfile_checksum(self, tag):
resp = self._output(["inspect", tag])
resp = self.inspect_tag(tag)
labels = json.loads(resp)[0]["Config"].get("Labels", {})
return labels.get("com.qemu.dockerfile-checksum", "")
......@@ -447,6 +453,36 @@ class CcCommand(SubCommand):
return Docker().command("run", cmd, args.quiet)
class CheckCommand(SubCommand):
"""Check if we need to re-build a docker image out of a dockerfile.
Arguments: <tag> <dockerfile>"""
name = "check"
def args(self, parser):
parser.add_argument("tag",
help="Image Tag")
parser.add_argument("dockerfile",
help="Dockerfile name")
def run(self, args, argv):
dockerfile = open(args.dockerfile, "rb").read()
tag = args.tag
dkr = Docker()
info = dkr.inspect_tag(tag)
if info is None:
print("Image does not exist")
return 1
if dkr.image_matches_dockerfile(tag, dockerfile):
if not args.quiet:
print("Image is up to date")
return 0
else:
print("Image needs updating")
return 1
def main():
parser = argparse.ArgumentParser(description="A Docker helper",
usage="%s <subcommand> ..." % os.path.basename(sys.argv[0]))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册