Let's say you have a playbook named foo.yml and you use the ansible-playbook command to invoke foo.yml.
ansible-playbook foo.yml
Let's say some problem occurs when invoking foo.yml.
PLAY [all]
TASKS [mkdir /opt/foo]
fatal: [server1.example.com]: FAILED! => {"changed": false, "checksum": "34949034fz73467b77cdc923aa747b", "msg": "Destination /var not writable"}
PLAY RECAP
server1.example.com : ok=0 changed=0 unreachable=0 failed=1
This will create a .retry file, named foo.retry in this example.
-rw-rw-r--. 1 root root 27 Jul 20 09:38 foo.retry
-rw-rw-r--. 1 root root 515 Jul 20 10:01 foo.yml
The .retry file will contain the hostname of the managed hosts (e.g. target system).
server1.example.com
This occurs because, by default, the /etc/ansible/ansible.cfg has the following.
retry_files_enabled = True
Or, on version 2.8 or later of Ansible, the retry files lines in ansible.cfg are commented out.
# retry_files_enabled = False
The --limit command line option could then be used to run the playbook against the hosts defined in the .retry file.
ansible-playbook foo.yml --limit @foo.retry
Of course, if you don't want Ansible to create the .retry file, you could do the following in ansible.cfg.
retry_files_enabled = False
Or, with the following environmental variable.
ANSIBLE_RETRY_FILES_ENABLED=0 ansible-playbook foo.yml
Did you find this article helpful?
If so, consider buying me a coffee over at