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):