All I could find was this from the docs:
Additionally,
inventory_hostname
is the name of the hostname as configured in Ansible’s inventory host file. This can be useful for when you don’t want to rely on the discovered hostnameansible_hostname
or for other mysterious reasons. If you have a long FQDN,inventory_hostname_short
also contains the part up to the first period, without the rest of the domain.
Is there any actual difference between inventory_hostname
and ansible_hostname
variables in Ansible? If so, then which one should I use and when?
inventory_hostname
- As configured in the ansible inventory file (eg:/etc/ansible/hosts
). It can be an IP address or a name that can be resolved by the DNSansible_hostname
- As discovered byansible
. Ansiblessh
's into the host and gathers some facts. As part of the fact, it also discovers its hostname which is stored inansible_hostname
.Which one should you use?
hostvars
is a dictionary which has an entry for each inventory host. If you want to access host information, you need to use theinventory_hostname
. If you want to use/print the name of the host as configured on the host, you should useansible_hostname
since most likely the IP will be used in the inventory file.Important: To use
ansible_hostname
, you need to gather facts:Otherwise, you will get a message that
ansible_hostname
is not defined.Try this with one host to understand the differences