Lookup host IP address(es) from global_vars

What is the right way to look up the IPv4 address (or addresses) associated with a host name from global_vars?

Here is the scenario. I use Postgres with Host-Based Authentication (HBA). In order to configure HBA, I need to put IP addresses of the permitted clients into the configuration file, but what I have as the input are host FQDNs that I need to resolve somehow. What would be the best way to do it in a Jinja2 template or within group_vars?

I tried to use Python socket.gethostbyname() but I could not get the syntax right.

Granted, I can fall back to a shell script and templetize it outside of Ansible/Jinja2 but I still hope to find a decent way to do it in Ansible.

Regards,
/Sergey

Hi Sergey,

you can try something like:

{% for host in groups[‘app_servers’] %}
ACCEPT $FW int:{{ hostvars[host][‘ansible_eth1’][‘ipv4’][‘address’] }} tcp 80,443
{% endfor %}

Hi David,

Thank you very much for your response!

My understanding is that this solution requires that Ansible “visits” the remote host to get the list of interfaces and their settings, including the IPv4 address for each interface. For example, I would not be able to use it to resolve “www.google.com” or any other arbitrary string, right?

Cheers,
/Sergey

Hi Sergey,

I see, in that case try pipe lookup plugin:
http://docs.ansible.com/ansible/playbooks_lookups.html#more-lookups

And try to resolve IP address from hostname by some cmdline resolver.

https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/lookup/dig.py

> What is the right way to look up the IPv4 address (or addresses) associated
> with a host name from global_vars?

<snip>

Nice and flexible. Thank you, Duncan!

Duncan gave a link to a very elaborate lookup plugin based on “dig” below.