Ansible inventory_hostname vs ansible_hostname vs ansible_fqdn (Explained)
By Luca Berton · Published 2024-01-01 · Category: troubleshooting
Difference between Ansible inventory_hostname, ansible_hostname, ansible_host, and ansible_fqdn variables. When to use each, practical examples, common mistakes explained.
What is the difference between ansible_hostname vs inventory_hostname? These two ansible internal variables sometimes confuse one for another but they're fundamentally different. I'm Luca Berton and welcome to today's episode of Ansible Pilot.
ansible_hostname and ansible_fqdn
Read from the target machine hostname from the facts: • ansible_hostname read the hostname from the facts collected during the gather_facts • Same as the uname -n or hostname command-line • Need gather_facts enabled, otherwise the ansible_facts variable would be unavailable to use in your playbook • Same as hostname of the target host • As this is based on the gather_facts step. ansible_hostname not available in ad-hoc command
inventory_hostname
Read from Ansible inventory or hosts files: • inventory_hostname read the hostname from the inventory configuration or the hosts file. Could be different from the hostname configuration of the remote system. It could be only a name on the controller machine • inventory_hostname is always available to use in your playbook. • Could be different from the hostname of the target host • Available for both playbook and ad-hoc command
Playbook
Let me show you the difference between ansible_hostname vs inventory_hostname vs ansible_fqdn internal variables in a simple Ansible Playbook.
code • hostnames.yml • inventory
execution
idempotency
before execution
Conclusion
Now you know more about the Ansible internal variables ansible_hostname, inventory_hostname and ansible_fqdn. You know how to use it based on your use case.
Quick Comparison
| Variable | Source | Example | Needs gather_facts | |----------|--------|---------|-------------------| | inventory_hostname | Inventory file | web1 | No | | inventory_hostname_short | Inventory file (short) | web1 | No | | ansible_hostname | Remote host (hostname) | ip-10-0-1-42 | Yes | | ansible_fqdn | Remote DNS | ip-10-0-1-42.ec2.internal | Yes | | ansible_host | Inventory ansible_host | 10.0.1.42 | No | | ansible_nodename | Remote uname -n | ip-10-0-1-42 | Yes |
Example
When to Use Each
inventory_hostname — Most common
ansible_hostname — Actual hostname
ansible_fqdn — DNS/certificates
ansible_host — Connection address
In Templates
Common Pitfall
FAQ
Why is ansible_hostname different from inventory_hostname?
inventory_hostname is what YOU named the host in inventory. ansible_hostname is what the HOST calls itself (output of hostname). They can differ significantly, especially in cloud environments.
Which should I use in templates? • For file paths and Ansible references: inventory_hostname • For DNS/SSL/network configs: ansible_fqdn • For IP-based configs: ansible_host or ansible_default_ipv4.address
How do I set the hostname to match inventory?
Related Articles • Ansible Inventory Guide • Ansible Roles Guide
Category: troubleshooting
Watch the video: Ansible inventory_hostname vs ansible_hostname vs ansible_fqdn (Explained) — Video Tutorial