How to retry Ansible task that may fail?
I don't understand your claim that the "first command execution fails whole play". It wouldn't make sense if Ansible behaved this way.
The following task:
- command: /usr/bin/false
retries: 3
delay: 3
register: result
until: result.rc == 0
produces:
TASK [command] ******************************************************************************************
FAILED - RETRYING: command (3 retries left).
FAILED - RETRYING: command (2 retries left).
FAILED - RETRYING: command (1 retries left).
fatal: [localhost]: FAILED! => {"attempts": 3, "changed": true, "cmd": ["/usr/bin/false"], "delta": "0:00:00.003883", "end": "2017-05-23 21:39:51.669623", "failed": true, "rc": 1, "start": "2017-05-23 21:39:51.665740", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
which seems to be exactly what you want.
Not sure if this is Ansible tower specific, but I am using:
- command: /usr/bin/false
register: result
retries: 3
delay: 10
until: result is not failed