From e66fb295f4bed2341427a3acf727157b4f752106 Mon Sep 17 00:00:00 2001 From: Matthew Mead-Briggs Date: Wed, 24 Apr 2019 07:39:07 -0700 Subject: [PATCH 1/2] Pre-commit wants to make these changes And they seem fine to me --- .pre-commit-config.yaml | 4 ++-- .secrets.baseline | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 34ca4c4..8e3af55 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: git://github.com/pre-commit/pre-commit-hooks - rev: v1.2.3 + rev: v2.2.1 hooks: - id: check-added-large-files - id: check-docstring-first @@ -14,7 +14,7 @@ repos: - id: requirements-txt-fixer - id: trailing-whitespace - repo: git://github.com/Yelp/detect-secrets - rev: 0.9.1 + rev: v0.12.2 hooks: - id: detect-secrets args: ['--baseline', '.secrets.baseline'] diff --git a/.secrets.baseline b/.secrets.baseline index 0cf9624..4902d77 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -1,6 +1,9 @@ { - "exclude_regex": "tests/.*", - "generated_at": "2018-07-12T23:43:31Z", + "exclude": { + "files": "tests/.*", + "lines": null + }, + "generated_at": "2019-04-24T14:36:38Z", "plugins_used": [ { "base64_limit": 4.5, @@ -15,5 +18,5 @@ } ], "results": {}, - "version": "0.9.1" + "version": "0.12.2" } From 0d48a757ef4600c2e347711a32fd6d1042f9e8a1 Mon Sep 17 00:00:00 2001 From: Matthew Mead-Briggs Date: Wed, 24 Apr 2019 07:46:23 -0700 Subject: [PATCH 2/2] Fix error on missing labels It seems a container can have "null" Labels so we need to handle that case. --- docker_custodian/docker_gc.py | 34 +++++++++++++++++++--------------- tests/docker_gc_test.py | 13 +++++++++++-- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/docker_custodian/docker_gc.py b/docker_custodian/docker_gc.py index 4258ff5..dffcd03 100644 --- a/docker_custodian/docker_gc.py +++ b/docker_custodian/docker_gc.py @@ -76,21 +76,25 @@ def filter_excluded_containers(containers, exclude_container_labels): def should_exclude_container_with_labels(container, exclude_container_labels): - for exclude_label in exclude_container_labels: - if exclude_label.value: - matching_keys = fnmatch.filter( - container['Labels'].keys(), - exclude_label.key, - ) - label_values_to_check = [ - container['Labels'][matching_key] - for matching_key in matching_keys - ] - if fnmatch.filter(label_values_to_check, exclude_label.value): - return True - else: - if fnmatch.filter(container['Labels'].keys(), exclude_label.key): - return True + if container['Labels']: + for exclude_label in exclude_container_labels: + if exclude_label.value: + matching_keys = fnmatch.filter( + container['Labels'].keys(), + exclude_label.key, + ) + label_values_to_check = [ + container['Labels'][matching_key] + for matching_key in matching_keys + ] + if fnmatch.filter(label_values_to_check, exclude_label.value): + return True + else: + if fnmatch.filter( + container['Labels'].keys(), + exclude_label.key + ): + return True return False diff --git a/tests/docker_gc_test.py b/tests/docker_gc_test.py index e6a31e4..445301f 100644 --- a/tests/docker_gc_test.py +++ b/tests/docker_gc_test.py @@ -75,6 +75,7 @@ def test_filter_excluded_containers(): {'Labels': {'too': 'lol'}}, {'Labels': {'toots': 'lol'}}, {'Labels': {'foo': 'bar'}}, + {'Labels': None}, ] result = docker_gc.filter_excluded_containers(mock_containers, None) assert mock_containers == list(result) @@ -86,7 +87,11 @@ def test_filter_excluded_containers(): mock_containers, exclude_labels, ) - assert [mock_containers[0], mock_containers[2]] == list(result) + assert [ + mock_containers[0], + mock_containers[2], + mock_containers[4] + ] == list(result) exclude_labels = [ docker_gc.ExcludeLabel(key='too*', value='lol'), ] @@ -94,7 +99,11 @@ def test_filter_excluded_containers(): mock_containers, exclude_labels, ) - assert [mock_containers[0], mock_containers[3]] == list(result) + assert [ + mock_containers[0], + mock_containers[3], + mock_containers[4] + ] == list(result) def test_cleanup_images(mock_client, now):