From cd4121cb5964f07aa211cdab4ec678d741eedb43 Mon Sep 17 00:00:00 2001 From: Viktor Shlapakov Date: Mon, 3 Oct 2016 16:41:14 +0300 Subject: [PATCH 1/2] Add patterns support for exclude-image-file --- docker_custodian/docker_gc.py | 6 ++++- tests/docker_gc_test.py | 41 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/docker_custodian/docker_gc.py b/docker_custodian/docker_gc.py index aa458a7..c02c2f6 100644 --- a/docker_custodian/docker_gc.py +++ b/docker_custodian/docker_gc.py @@ -4,6 +4,7 @@ Remove old docker containers and images that are no longer in use. """ import argparse +import fnmatch import logging import sys @@ -88,7 +89,10 @@ def filter_excluded_images(images, exclude_set): image_tags = image_summary.get('RepoTags') if no_image_tags(image_tags): return True - return not set(image_tags) & exclude_set + for exclude_pattern in exclude_set: + if fnmatch.filter(image_tags, exclude_pattern): + return False + return True return filter(include_image, images) diff --git a/tests/docker_gc_test.py b/tests/docker_gc_test.py index 1a6caf1..242334c 100644 --- a/tests/docker_gc_test.py +++ b/tests/docker_gc_test.py @@ -177,6 +177,47 @@ def test_filter_excluded_images(): assert list(actual) == expected +def test_filter_excluded_images_advanced(): + exclude_set = set([ + 'user/one:*', + 'user/foo:tag*', + 'user/repo-*:tag', + ]) + images = [ + { + 'RepoTags': [':'], + 'Id': 'babababababaabababab' + }, + { + 'RepoTags': ['user/one:latest', 'user/one:abcd'] + }, + { + 'RepoTags': ['user/foo:test'] + }, + { + 'RepoTags': ['user/foo:tag123'] + }, + { + 'RepoTags': ['user/repo-1:tag'] + }, + { + 'RepoTags': ['user/repo-2:tag'] + }, + + ] + expected = [ + { + 'RepoTags': [':'], + 'Id': 'babababababaabababab' + }, + { + 'RepoTags': ['user/foo:test'], + }, + ] + actual = docker_gc.filter_excluded_images(images, exclude_set) + assert list(actual) == expected + + def test_is_image_old(image, now): assert docker_gc.is_image_old(image, now) From 7e8feb390492c62d624754e7dc869c6276948ec6 Mon Sep 17 00:00:00 2001 From: Viktor Shlapakov Date: Tue, 4 Oct 2016 12:23:40 +0300 Subject: [PATCH 2/2] Add pattern matching info to README.rst --- README.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rst b/README.rst index d20e6b7..c0ad43a 100644 --- a/README.rst +++ b/README.rst @@ -84,7 +84,13 @@ being removed. Path to a file which contains a list of images to exclude, one image tag per line. +You also can use basic pattern matching to exclude images with generic tags. +.. code:: + + user/repositoryA:* + user/repositoryB:?.? + user/repositoryC-*:tag dcstop ------