Bootstrap FreeKB - Ansible - inventory_hostname_short magic variable
Ansible - inventory_hostname_short magic variable

Updated:   |  Ansible articles

There are a number of different magic variable will return the hostname of a managed node.

Or, the lookup pipe hostname plugin can be used to return the hostname of your control node (that's your Ansible server). 

For example, let's say you have the following playbook. 

---
- hosts: all
  tasks:
  - debug:
      var: ansible_hostname

  - debug:
      var: ansible_host

  - debug:
      var: ansible_play_batch

  - debug:
      var: ansible_play_hosts_all

  - debug:
      var: inventory_hostname

  - debug:
      var: inventory_hostname_short

  - debug:
      var: play_hosts

  - debug:
      var: ansible_limit
    when: ansible_limit is defined
...

 

Since the ansible_hostname will return the hostname from facts, gather_facts must be true. If gather_facts is false, something like this will be returned.

TASK [debug] 
fatal: [server1.example.com]: FAILED! => {"msg": "The task includes an option with an undefined variable.
The error was: 'ansible_hostname' is undefined\n\n
The error appears to be in '/home/john.doe/testing.yml': line 18, column 7, but may\n
be elsewhere in the file depending on the exact syntax problem.\n\n
The offending line appears to be:\n\n
  tasks:\n
    - debug:\n
      ^ here\n"}

 

Assuming gather_facts is true, ansible_hostname should return something like this.

ok: [server1.example.com] => {
    "ansible_hostname": "server1"
}
ok: [server2.example.com] => {
    "ansible_hostname": "server2"
}
ok: [server3.example.com] => {
    "ansible_hostname": "server3"
}

 

ansible_host should return something like this.

ok: [server1.example.com] => {
    "ansible_host": "server1"
}
ok: [server2.example.com] => {
    "ansible_host": "server2"
}
ok: [server3.example.com] => {
    "ansible_host": "server3"
}

 

ansible_play_batch should return something like this.

ok: [server1.example.com] => {
    "ansible_play_batch": [
        "server1.example.com",
        "server2.example.com",
        "server3.example.com"
    ]
}

 

ansible_play_batch_all should return something like this.

ok: [server1.example.com] => {
    "ansible_play_batch_all": [
        "server1.example.com",
        "server2.example.com",
        "server3.example.com"
    ]
}

 

If the --limit option was used, ansible_limit should return something like this.

ok: [server1.example.com] => {
    "ansible_limit": "server1.example.com"
}

 

inventory_hostname should return something like this.

ok: [server1.example.com] => {
    "inventory_hostname": "server1.example.com"
}
ok: [server2.example.com] => {
    "inventory_hostname": "server2.example.com"
}
ok: [server3.example.com] => {
    "inventory_hostname": "server3.example.com"
}

 

inventory_hostname_short should return something like this.

ok: [server1.example.com] => {
    "msg: "inventory hostname_short = server1"
}
ok: [server2.example.com] => {
    "msg: "inventory hostname_short = server3"
}
ok: [server3.example.com] => {
    "msg: "inventory hostname_short = server3"
}

 

play_hosts should return something like this.

ok: [server1.example.com] => {
    "play_hosts": [
        "server1.example.com",
        "server2.example.com",
        "server3.example.com"
    ]
}

 




Did you find this article helpful?

If so, consider buying me a coffee over at Buy Me A Coffee



Comments


July 19 2021 by
looks like error output ok: [server2.example.com] => { "msg: "inventory hostname_short = server3" }

July 20 2021 by Jeremy (moderator)
Nice catch. I got this corrected.

Add a Comment


Please enter 0a9df1 in the box below so that we can be sure you are a human.