docker_compose_v2: ignore some pull events (#803)

* Ignore some pull events.

* Adjust tests.
This commit is contained in:
Felix Fontein 2024-02-23 18:24:16 +01:00 committed by GitHub
parent f0c91ef5f9
commit 6f5d67860c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 11 additions and 6 deletions

View File

@ -0,0 +1,3 @@
bugfixes:
- "docker_compose_v2 - do not treat service-level pull events as changes to avoid incorrect ``changed=true`` return value of ``pull=always``
(https://github.com/ansible-collections/community.docker/issues/802, https://github.com/ansible-collections/community.docker/pull/803)."

View File

@ -350,9 +350,11 @@ def parse_events(stderr, dry_run=False, warn_function=None):
return events
def has_changes(events):
def has_changes(events, ignore_service_pull_events=False):
for event in events:
if event.status in DOCKER_STATUS_WORKING:
if ignore_service_pull_events and event.status in DOCKER_STATUS_PULL:
continue
return True
return False
@ -539,8 +541,8 @@ class BaseComposeManager(DockerBaseClass):
def emit_warnings(self, events):
emit_warnings(events, warn_function=self.client.warn)
def update_result(self, result, events, stdout, stderr):
result['changed'] = result.get('changed', False) or has_changes(events)
def update_result(self, result, events, stdout, stderr, ignore_service_pull_events=False):
result['changed'] = result.get('changed', False) or has_changes(events, ignore_service_pull_events=ignore_service_pull_events)
result['actions'] = result.get('actions', []) + extract_actions(events)
result['stdout'] = combine_text_output(result.get('stdout'), to_native(stdout))
result['stderr'] = combine_text_output(result.get('stderr'), to_native(stderr))

View File

@ -496,7 +496,7 @@ class ServicesManager(BaseComposeManager):
rc, stdout, stderr = self.client.call_cli(*args, cwd=self.project_src)
events = self.parse_events(stderr, dry_run=self.check_mode)
self.emit_warnings(events)
self.update_result(result, events, stdout, stderr)
self.update_result(result, events, stdout, stderr, ignore_service_pull_events=True)
self.update_failed(result, events, args, stdout, stderr, rc)
return result
@ -527,7 +527,7 @@ class ServicesManager(BaseComposeManager):
rc_1, stdout_1, stderr_1 = self.client.call_cli(*args_1, cwd=self.project_src)
events_1 = self.parse_events(stderr_1, dry_run=self.check_mode)
self.emit_warnings(events_1)
self.update_result(result, events_1, stdout_1, stderr_1)
self.update_result(result, events_1, stdout_1, stderr_1, ignore_service_pull_events=True)
is_failed_1 = is_failed(events_1, rc_1)
if not is_failed_1 and not self._are_containers_stopped():
# Make sure all containers are stopped

View File

@ -199,7 +199,7 @@
- present_3_check.actions | selectattr('status', 'eq', 'Pulling') | first
- present_3_check.actions | selectattr('status', 'eq', 'Creating') | length == 0
- present_3_check.actions | selectattr('status', 'eq', 'Recreating') | length == 0
- present_3 is changed
- present_3 is not changed
- present_3.actions | selectattr('status', 'eq', 'Pulling') | first
- present_3.actions | selectattr('status', 'eq', 'Creating') | length == 0
- present_3.actions | selectattr('status', 'eq', 'Recreating') | length == 0