Hi everyone,
one simple question and sry for my english skills 
I have a playbook with some templates, in one template I added a condition to write a specific IP Address in my template.
(My servers have several network ports and unfortunately they have sometimes different names. Ok, i could use different templates but i wanted to use a single file)
The code:
{% if ansible_mgt.ipv4.address is defined %}
server_address={{ansible_mgt.ipv4.address}}
{% else %}
server_address={{ansible_eth0.ipv4.address}}
{% endif %}
If I run the playbook against a server which has not the network port ansible_mgt the playbook fails because the variable ansible_mgt.ipv4.address is not defined.
What I am doing wrong? Or it is not possible to check in a template if a variable is not defined?
Thanks for your help!
Regards,
Jost
Hi,
I guess, in that case not even ansible_mgt will be defined? What is exact error message (try ansible-playbook with -vvv) ?
David
Hi David,
the error message is:
fatal: [testserver.xxx] => {‘msg’: “AnsibleUndefinedVariable: One or more undefined variables: ‘ansible_mgt’ is undefined”, ‘failed’: True}
fatal: [testserver.xxx] => {‘msg’: “AnsibleUndefinedVariable: One or more undefined variables: ‘ansible_mgt’ is undefined”, ‘failed’: True}
FATAL: all hosts have already failed – aborting
Well, that is true. On this machine I have only ansible_eth0:
“ansible_eth0”: {
“active”: true,
“device”: “eth0”,
“ipv4”: {
“address”: “10.101.10.133”,
“netmask”: “255.255.255.0”,
“network”: “10.101.10.0”
},
My idea was to use the condition, if ansible_mgt is defined → use ansible_mgt and if not → ansible_eth0
Regards,
Jost
Hi Josh,
your idea is right:
{% if ansible_mgt is defined and ansible_mgt.ipv4.address is defined %}
server_address={{ansible_mgt.ipv4.address}}
{% else %}
server_address={{ansible_eth0.ipv4.address}}
{% endif %}
you have to check ansible_mgt first.
Hi David,
of course! thank you very much!
I didn’t recognized that the error message was only saying “ansible_mgt” and not “ansible_mgt.ipv4.address”…facepalm
Regards,
Jost