Hey there,
I am spawning some VMs using vagrant (CentOS 6.5 images) and copying a file to them. I only want to copy the file if it does not already exist, so that I can repeatedly run my playbooks against the host.
My copy task looks like this:
- name: Upload the default iptables configuration
copy: src=
iptables.cf dest=/etc/sysconfig/iptables force=no
sudo: yes
Roughly every 1 in 4 runs -- when reproducing on a fresh VM using "vagrant destroy -f myvm; vagrant up myvm; ansible-playbook -i myinventory playbook.yml" -- the 'copy' module will report an 'ok' status and *not* copy in the file, despite the fact that the file definitely did not exist when the task was run. The rest of the time the task will correctly report a 'changed' status and correctly copy the file.
I was unable to reproduce this when running against localhost. However, the behaviour is not dependent on the choice of destination file. I can try "/tmp/nonexistent-file-i-made-up" and it will reproduce with the same frequency. This makes me think that it's not due to a timing issue in the VM boot, as was my first thought.
I have no idea why this would happen, or how I can debug further, does anyone have an idea?
I am working around it by doing an explicit check before:
- name: Check for iptables configuration existence
action: stat path=/etc/sysconfig/iptables
register: iptables_stat
- name: Upload the default iptables configuration
copy: src=
iptables.cf dest=/etc/sysconfig/iptables
sudo: yes
when: not iptables_stat.stat.exists
This doesn't have the same issue, although it does have the obvious race condition.
Dave