docker: docker.py adding age check command

This is useful for querying if an image is too old.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
Alex Bennée 2018-06-12 21:28:45 +01:00
parent cff5477330
commit 7b882245f4
1 changed files with 36 additions and 10 deletions

View File

@ -32,6 +32,7 @@ except ImportError:
from io import StringIO
from shutil import copy, rmtree
from pwd import getpwuid
from datetime import datetime,timedelta
FILTERED_ENV_NAMES = ['ftp_proxy', 'http_proxy', 'https_proxy']
@ -190,6 +191,9 @@ class Docker(object):
except subprocess.CalledProcessError:
return None
def get_image_creation_time(self, info):
return json.loads(info)[0]["Created"]
def get_image_dockerfile_checksum(self, tag):
resp = self.inspect_tag(tag)
labels = json.loads(resp)[0]["Config"].get("Labels", {})
@ -461,11 +465,14 @@ class CheckCommand(SubCommand):
def args(self, parser):
parser.add_argument("tag",
help="Image Tag")
parser.add_argument("dockerfile",
help="Dockerfile name")
parser.add_argument("dockerfile", default=None,
help="Dockerfile name", nargs='?')
parser.add_argument("--checktype", choices=["checksum", "age"],
default="checksum", help="check type")
parser.add_argument("--olderthan", default=60, type=int,
help="number of minutes")
def run(self, args, argv):
dockerfile = open(args.dockerfile, "rb").read()
tag = args.tag
dkr = Docker()
@ -474,13 +481,32 @@ class CheckCommand(SubCommand):
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
if args.checktype == "checksum":
if not args.dockerfile:
print("Need a dockerfile for tag:%s" % (tag))
return 1
dockerfile = open(args.dockerfile, "rb").read()
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
elif args.checktype == "age":
timestr = dkr.get_image_creation_time(info).split(".")[0]
created = datetime.strptime(timestr, "%Y-%m-%dT%H:%M:%S")
past = datetime.now() - timedelta(minutes=args.olderthan)
if created < past:
print ("Image created @ %s more than %d minutes old" %
(timestr, args.olderthan))
return 1
else:
if not args.quiet:
print ("Image less than %d minutes old" % (args.olderthan))
return 0
def main():