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:
parent
cff5477330
commit
7b882245f4
@ -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):
|
|||||||
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):
|
|||||||
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,6 +481,13 @@ class CheckCommand(SubCommand):
|
|||||||
print("Image does not exist")
|
print("Image does not exist")
|
||||||
return 1
|
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 dkr.image_matches_dockerfile(tag, dockerfile):
|
||||||
if not args.quiet:
|
if not args.quiet:
|
||||||
print("Image is up to date")
|
print("Image is up to date")
|
||||||
@ -481,6 +495,18 @@ class CheckCommand(SubCommand):
|
|||||||
else:
|
else:
|
||||||
print("Image needs updating")
|
print("Image needs updating")
|
||||||
return 1
|
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():
|
||||||
|
Loading…
Reference in New Issue
Block a user