Skip to content

Commit

Permalink
docker: docker.py adding age check command
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
stsquad committed Jun 20, 2018
1 parent cff5477 commit 7b88224
Showing 1 changed file with 36 additions and 10 deletions.
46 changes: 36 additions & 10 deletions tests/docker/docker.py
Expand Up @@ -32,6 +32,7 @@
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']
Expand Down Expand Up @@ -190,6 +191,9 @@ def inspect_tag(self, tag):
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", {})
Expand Down Expand Up @@ -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()
Expand All @@ -474,13 +481,32 @@ def run(self, args, argv):
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():
Expand Down

0 comments on commit 7b88224

Please sign in to comment.