diff options
5 files changed, 24 insertions, 1 deletions
diff --git a/ansible/module_utils/kolla_container_worker.py b/ansible/module_utils/kolla_container_worker.py index 4c7bedffc..bf0c20b25 100644 --- a/ansible/module_utils/kolla_container_worker.py +++ b/ansible/module_utils/kolla_container_worker.py @@ -316,7 +316,10 @@ class ContainerWorker(ABC): def compare_labels(self, container_info): new_labels = self.params.get('labels') current_labels = container_info['Config'].get('Labels', dict()) - image_labels = self.check_image().get('Labels', dict()) + image_info = self.check_image() + if not image_info: + return False + image_labels = image_info.get('Labels', dict()) for k, v in image_labels.items(): if k in new_labels: if v != new_labels[k]: diff --git a/ansible/module_utils/kolla_docker_worker.py b/ansible/module_utils/kolla_docker_worker.py index 70b6af39b..f488bab66 100644 --- a/ansible/module_utils/kolla_docker_worker.py +++ b/ansible/module_utils/kolla_docker_worker.py @@ -77,6 +77,7 @@ class DockerWorker(ContainerWorker): for image_name in repo_tags: if image_name == find_image: return image + return dict() def check_volume(self): for vol in self.dc.volumes()['Volumes'] or list(): diff --git a/releasenotes/notes/bug-1889611-a89ddb10134081f4.yaml b/releasenotes/notes/bug-1889611-a89ddb10134081f4.yaml new file mode 100644 index 000000000..05cce09d8 --- /dev/null +++ b/releasenotes/notes/bug-1889611-a89ddb10134081f4.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixes image check with containers that don't exist locally. A bug in the + image comparison logic would make service-check-containers fail with + ``AttributeError: NoneType object has no attribute get`` + `LP#2166024 <https://launchpad.net/bugs/2166024>`__ diff --git a/tests/kolla_container_tests/test_docker_worker.py b/tests/kolla_container_tests/test_docker_worker.py index cd351e4ef..e32da66cb 100644 --- a/tests/kolla_container_tests/test_docker_worker.py +++ b/tests/kolla_container_tests/test_docker_worker.py @@ -1251,6 +1251,12 @@ class TestAttrComp(base.BaseTestCase): self.dw = get_DockerWorker({'privileged': False}) self.assertTrue(self.dw.compare_privileged(container_info)) + def test_compare_labels_image_missing(self): + container_info = {'Config': dict(Labels={'kolla_version': '1.0.1'})} + self.dw = get_DockerWorker({'labels': {}}) + self.dw.check_image = mock.MagicMock(return_value=dict()) + self.assertFalse(self.dw.compare_labels(container_info)) + def test_compare_labels_neg(self): container_info = {'Config': dict(Labels={'kolla_version': '2.0.1'})} self.dw = get_DockerWorker({'labels': {'kolla_version': '2.0.1'}}) diff --git a/tests/kolla_container_tests/test_podman_worker.py b/tests/kolla_container_tests/test_podman_worker.py index 048a7a797..04d6d987b 100644 --- a/tests/kolla_container_tests/test_podman_worker.py +++ b/tests/kolla_container_tests/test_podman_worker.py @@ -1264,6 +1264,12 @@ class TestAttrComp(base.BaseTestCase): self.pw = get_PodmanWorker({'privileged': False}) self.assertTrue(self.pw.compare_privileged(container_info)) + def test_compare_labels_image_missing(self): + container_info = {'Config': dict(Labels={'kolla_version': '1.0.1'})} + self.pw = get_PodmanWorker({'labels': {}}) + self.pw.check_image = mock.MagicMock(return_value=dict()) + self.assertFalse(self.pw.compare_labels(container_info)) + def test_compare_labels_neg(self): container_info = {'Config': dict(Labels={'kolla_version': '2.0.1'})} self.pw = get_PodmanWorker({'labels': {'kolla_version': '2.0.1'}}) |
