diff --git a/changelogs/fragments/159-docker_compose-idempotence-fix.yml b/changelogs/fragments/159-docker_compose-idempotence-fix.yml new file mode 100644 index 000000000..b071aa7d0 --- /dev/null +++ b/changelogs/fragments/159-docker_compose-idempotence-fix.yml @@ -0,0 +1,2 @@ +bugfixes: +- "docker_compose - fix idempotence bug when using ``stopped: true`` (https://github.com/ansible-collections/community.docker/issues/142, https://github.com/ansible-collections/community.docker/pull/159)." diff --git a/plugins/modules/docker_compose.py b/plugins/modules/docker_compose.py index 5a4837a08..67c08d10d 100644 --- a/plugins/modules/docker_compose.py +++ b/plugins/modules/docker_compose.py @@ -730,12 +730,12 @@ def cmd_up(self): if self.pull: pull_output = self.cmd_pull() - result['changed'] = pull_output['changed'] + result['changed'] |= pull_output['changed'] result['actions'] += pull_output['actions'] if self.build: build_output = self.cmd_build() - result['changed'] = build_output['changed'] + result['changed'] |= build_output['changed'] result['actions'] += build_output['actions'] if self.remove_orphans: @@ -760,6 +760,10 @@ def cmd_up(self): for service in self.project.services: if not service_names or service.name in service_names: plan = service.convergence_plan(strategy=converge) + if plan.action == 'start' and self.stopped: + # In case the only action is starting, and the user requested + # that the service should be stopped, ignore this service. + continue if plan.action != 'noop': result['changed'] = True result_action = dict(service=service.name) @@ -802,12 +806,12 @@ def cmd_up(self): if self.restarted: restart_output = self.cmd_restart(service_names) - result['changed'] = restart_output['changed'] + result['changed'] |= restart_output['changed'] result['actions'] += restart_output['actions'] if self.scale: scale_output = self.cmd_scale() - result['changed'] = scale_output['changed'] + result['changed'] |= scale_output['changed'] result['actions'] += scale_output['actions'] for service in self.project.services: diff --git a/tests/integration/targets/docker_compose/tasks/tests/start-stop.yml b/tests/integration/targets/docker_compose/tasks/tests/start-stop.yml index 98719497e..b96c0e1f2 100644 --- a/tests/integration/targets/docker_compose/tasks/tests/start-stop.yml +++ b/tests/integration/targets/docker_compose/tasks/tests/start-stop.yml @@ -219,8 +219,8 @@ that: - present_1 is changed - present_2 is changed - # - present_3 is not changed -- FIXME! https://github.com/ansible-collections/community.docker/issues/142 - # - present_4 is not changed -- FIXME! https://github.com/ansible-collections/community.docker/issues/142 + - present_3 is not changed + - present_4 is not changed - started_1 is changed - started_2 is changed - started_3 is not changed