copy module with hard link destination

Background: I am using Ansible 1.5 on RedHat. Apparently system-config-network creates a hard link to /etc/hosts and /etc/resolve.conf. I want to be able to copy the correct hosts file in place if is not there, whether or not the file links is > 1.

What happens: If the source file is already the same as the destination, I get FAILED with a message “absolute paths are required”.

I can find this message in the code of the file module, not the copy module. Also, if the source file is different, the copy works fine. I am assuming that it gets to the file module somehow after the atomic copy call in the copy module.

Anyhow, can someone please tell me if this should be expected and/or if there is a good work around?

Below is an example… Thanks in advance!

/etc/hosts has > 1 links

[root@padishah1 ansible]# ls -l /etc/hosts
-rw-r–r–. 2 root root 13888 May 16 17:21 /etc/hosts
[root@padishah1 ansible]# find /etc -xdev -samefile /etc/hosts
/etc/sysconfig/networking/profiles/default/hosts
/etc/hosts

hosts.bkp = hosts && hosts.different != hosts

[root@padishah1 ansible]# md5sum /etc/hosts /etc/hosts.{bkp,different}
0f7cc9afcb0f17a9864b45391027a6ad /etc/hosts
0f7cc9afcb0f17a9864b45391027a6ad /etc/hosts.bkp
9c5799def96f6f2e7309a3914075589b /etc/hosts.different

Trying to use the copy module with an identical file fails

[root@padishah1 ansible]# ansible all -i <(echo -e “localhost ansible_connection=local”) -m copy -a “src=/etc/hosts.bkp dest=/etc/hosts mode=0644 owner=root group=root” --check
localhost | FAILED >> {
“failed”: true,
“md5sum”: “0f7cc9afcb0f17a9864b45391027a6ad”,
“msg”: “absolute paths are required”
}

Trying to copy with a new file is sucessful

[root@padishah1 ansible]# ansible all -i <(echo -e “localhost ansible_connection=local”) -m copy -a “src=/etc/hosts.different dest=/etc/hosts mode=0644 owner=root group=root” --check
— before: /etc/hosts
+++ after: /etc/hosts.different
—diff redacted—

Can you please check and see if you have a problem on Ansible 1.7.2?

We can’t support older versions on this list.

yes… 1.7.2 is installed now and the result is the same. also, as an interesting aside, I apparently can no longer use bash FIFOs as an inventory file like i did in the previous example.

Assuming you mean the (>$) whichever weird syntax, using fifo’s as an inventory file was never really an intended thing.

Please file a bug on the hardlink issue so we can investigate.

Thanks!

issue #302 - ansible-modules-core

thanks!

and i never expect fifo’s to work, but it is a nice shortcut when testing. :slight_smile:

For those who find this same issue in the future, the error will still appear unless you add
state: file

to the copy module, as documented in here:

https://github.com/ansible/ansible-modules-core/issues/468