Ansible get hostname as defined in inventory

NeverEndingQueue picture NeverEndingQueue · Jan 21, 2018 · Viewed 25.1k times · Source

In my inventory I define hosts like this:

 [server1]
 141.151.176.223

I am looking for a variable which keeps the server1 name, as I am using it to define server hostname.

inventory_hostname is set to 141.151.176.223 ansible_hostname as well as inventory_hostname_short is set to 148.

To workaround this problem I am setting my own variable like this:

 [server1]
 141.151.176.223 hostname=server1

but I am not satisfied with this approach.

Any ideas?

Answer

techraf picture techraf · Jan 22, 2018

Explanation

If the inventory file was defined this way:

[server1_group]
server1 ansible_host=141.151.176.223

Then you can access:

  • server1 with the inventory_hostname fact;

  • 141.151.176.223 with the ansible_host fact;

  • server1_group with group_names|first (group_names fact contains a list of all groups server belongs to, first selects the first element from that list).

Regardless of the above, ansible_hostname fact contains the host name as defined on the host itself (the value is set during facts gathering).


Solution

You should use a standard ansible_host declaration to point to the target's IP address and set the inventory hostname to however you want to refer to the server in Ansible playbooks.

In particular you can skip groups definition altogether and define just:

server1 ansible_host=141.151.176.223