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

docker: docker.py adding age check command

This is useful for querying if an image is too old.
Signed-off-by: NAlex Bennée <alex.bennee@linaro.org>
Reviewed-by: NPhilippe Mathieu-Daudé <f4bug@amsat.org>
上级 cff54773
...@@ -32,6 +32,7 @@ except ImportError: ...@@ -32,6 +32,7 @@ except ImportError:
from io import StringIO from io import StringIO
from shutil import copy, rmtree from shutil import copy, rmtree
from pwd import getpwuid from pwd import getpwuid
from datetime import datetime,timedelta
FILTERED_ENV_NAMES = ['ftp_proxy', 'http_proxy', 'https_proxy'] FILTERED_ENV_NAMES = ['ftp_proxy', 'http_proxy', 'https_proxy']
...@@ -190,6 +191,9 @@ class Docker(object): ...@@ -190,6 +191,9 @@ class Docker(object):
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
return None return None
def get_image_creation_time(self, info):
return json.loads(info)[0]["Created"]
def get_image_dockerfile_checksum(self, tag): def get_image_dockerfile_checksum(self, tag):
resp = self.inspect_tag(tag) resp = self.inspect_tag(tag)
labels = json.loads(resp)[0]["Config"].get("Labels", {}) labels = json.loads(resp)[0]["Config"].get("Labels", {})
...@@ -461,11 +465,14 @@ class CheckCommand(SubCommand): ...@@ -461,11 +465,14 @@ class CheckCommand(SubCommand):
def args(self, parser): def args(self, parser):
parser.add_argument("tag", parser.add_argument("tag",
help="Image Tag") help="Image Tag")
parser.add_argument("dockerfile", parser.add_argument("dockerfile", default=None,
help="Dockerfile name") 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): def run(self, args, argv):
dockerfile = open(args.dockerfile, "rb").read()
tag = args.tag tag = args.tag
dkr = Docker() dkr = Docker()
...@@ -474,13 +481,32 @@ class CheckCommand(SubCommand): ...@@ -474,13 +481,32 @@ class CheckCommand(SubCommand):
print("Image does not exist") print("Image does not exist")
return 1 return 1
if dkr.image_matches_dockerfile(tag, dockerfile): if args.checktype == "checksum":
if not args.quiet: if not args.dockerfile:
print("Image is up to date") print("Need a dockerfile for tag:%s" % (tag))
return 0 return 1
else:
print("Image needs updating") dockerfile = open(args.dockerfile, "rb").read()
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
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(): def main():
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册