--- - name: Execute unattended Mailcow update become: true ansible.builtin.command: cmd: ./update.sh --force chdir: "{{ mailcow_dir | default('/data/mailcow') }}" register: mailcow_first_pass # Exit code 2 means "modules updated, run me again". Anything else is a real failure. failed_when: mailcow_first_pass.rc not in [0, 2] changed_when: - mailcow_first_pass.rc == 0 - "'Updated code is available' in mailcow_first_pass.stdout or 'Pulling' in mailcow_first_pass.stdout or 'Upgrading' in mailcow_first_pass.stdout" notify: Restart main Docker stack - name: Re-run unattended Mailcow update (if modules changed) become: true ansible.builtin.command: cmd: ./update.sh --force chdir: "{{ mailcow_dir | default('/data/mailcow') }}" # Only trigger this second pass if the first pass threw the specific restart code when: mailcow_first_pass.rc == 2 register: mailcow_second_pass changed_when: - "'Updated code is available' in mailcow_second_pass.stdout or 'Pulling' in mailcow_second_pass.stdout or 'Upgrading' in mailcow_second_pass.stdout" notify: Restart main Docker stack