Bootstrap FreeKB - Ansible - List target servers passed into the --limit option using ansible_limit
Ansible - List target servers passed into the --limit option using ansible_limit

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). 

The ansible_limit magic variable will return the contents of the -l or --limit command line option. For example, let's say you invoke the following command.

ansible-playbook foo.yml --limit server1.example.com

 

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"}

 

If you are running version 2.5 or higher of Ansible, the fail module can be used to fail a play when the -l or --limit command line option was not used, meaing the ansible_limit magic variable is not defined, like this.

- name: "fail when the -l or --limit option is not used on the command line'
  fail:
   msg: "the -l or --limit option was not used on the command line"
  when: ansible_limit is not defined

 

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


Add a Comment


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