diff --git a/changelogs/fragments/community.docker-88-docker_container-healthcheck.yml b/changelogs/fragments/community.docker-88-docker_container-healthcheck.yml new file mode 100644 index 0000000000..949d0875b5 --- /dev/null +++ b/changelogs/fragments/community.docker-88-docker_container-healthcheck.yml @@ -0,0 +1,2 @@ +bugfixes: +- "docker_container - fix healthcheck disabling idempotency issue with strict comparison (https://github.com/ansible-collections/community.docker/issues/85)." diff --git a/plugins/modules/cloud/docker/docker_container.py b/plugins/modules/cloud/docker/docker_container.py index 30033ebf67..88ca923ded 100644 --- a/plugins/modules/cloud/docker/docker_container.py +++ b/plugins/modules/cloud/docker/docker_container.py @@ -2293,6 +2293,12 @@ class Container(DockerBaseClass): match = self._compare(getattr(self.parameters, key), value, compare) if not match: + if key == 'expected_healthcheck' and config_mapping['disable_healthcheck'] and self.parameters.disable_healthcheck: + # If the healthcheck is disabled (both in parameters and for the current container), and the user + # requested strict comparison for healthcheck, the comparison will fail. That's why we ignore the + # expected_healthcheck comparison in this case. + continue + # no match. record the differences p = getattr(self.parameters, key) c = value diff --git a/tests/integration/targets/docker_container/tasks/tests/options.yml b/tests/integration/targets/docker_container/tasks/tests/options.yml index ae46827315..b6bd50eb61 100644 --- a/tests/integration/targets/docker_container/tasks/tests/options.yml +++ b/tests/integration/targets/docker_container/tasks/tests/options.yml @@ -1663,6 +1663,21 @@ register: healthcheck_6 ignore_errors: yes +- name: healthcheck (disabled, idempotency, strict) + docker_container: + image: "{{ docker_test_image_alpine }}" + command: '/bin/sh -c "sleep 10m"' + name: "{{ cname }}" + state: started + healthcheck: + test: + - NONE + force_kill: yes + comparisons: + '*': strict + register: healthcheck_7 + ignore_errors: yes + - name: healthcheck (string in healthcheck test, changed) docker_container: image: "{{ docker_test_image_alpine }}" @@ -1672,7 +1687,7 @@ healthcheck: test: "sleep 1" force_kill: yes - register: healthcheck_7 + register: healthcheck_8 ignore_errors: yes - name: healthcheck (string in healthcheck test, idempotency) @@ -1684,7 +1699,7 @@ healthcheck: test: "sleep 1" force_kill: yes - register: healthcheck_8 + register: healthcheck_9 ignore_errors: yes - name: cleanup @@ -1702,8 +1717,9 @@ - healthcheck_4 is not changed - healthcheck_5 is changed - healthcheck_6 is not changed - - healthcheck_7 is changed - - healthcheck_8 is not changed + - healthcheck_7 is not changed + - healthcheck_8 is changed + - healthcheck_9 is not changed when: docker_py_version is version('2.0.0', '>=') - assert: that: