The nfs-client tasks uses the variable nfsServer[‘ansible_facts’], but I got following error, it cannot find dictionary variable nfsServer[‘ansible_facts’]:
fatal: One or more undefined variables: ‘dict’ object has no attribute ‘ansible_facts’.
After updating to v1.8.2, I’ve got following error which was running fine in v1.7. I’ve got no idea what it stuck about, there is nothing changed except updating to 1.8.2, what could be possible wrong here?
I set up ansible_ssh_host=10.1.0.1 in my inventory file, but the function def _get_host(self, hostname) in inventory init.py checks if hostname == host.name, when the hostname is “ansible_ssh_host”, it cannot match and return None and exception. Is it a bug in 1.8.2?
Are you able to post a small reproducer? It would help to determine if this is a bug or not.
That problem only occurred on CentOS 6.5, it did not repeat in CentOS 7 and Ubuntu 14. I suspect that might be caused by different python version, CentOS 6 uses python 2.6, both CentOS 7 and Ubuntu 14 use python 2.7. It does not seem the bug in the ansible code, but it is fragile .
Anyway, the original issue still remains in v1.8.2 although Tom said it did not break in his site, I still could not get it work. Both CentOS 7 and Ubuntu 14 got the same exception at - { role: nfs-client, nfsServer: { ‘ansible_facts’: { ‘ansible_eth0’ : { ‘ipv4’ : { ‘address’: ‘hce.com’ } } } } }
I’ve found the dictionary variable problem, there is a task register the same variable name as follows:
name: register the variable
register: nfsServer
…
when: nfsServer is not defined
When I define the - { role: nfs-client, nfsServer: { ‘ansible_facts’: { ‘ansible_eth0’ : { ‘ipv4’ : { ‘address’: ‘hce.com’ } } } } }, I thought the when checked it, the register should never be called, but no, the register is still being called, the vairable nfsServer I defined in the playbook is changed to be the registered variable which got contents of {u’skipped’: True, u’changed’: False}. If I commented the register statement out, it works.
The question is why the register can still be called even the when condition is in false status?