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:
msg: ansible_hostname = {{ ansible_hostname }}
- debug:
msg: ansible_play_batch = {{ ansible_play_batch }}
- debug:
msg: ansible_play_hosts_all = {{ ansible_play_hosts_all }}
- debug:
msg: ansible_limit = {{ ansible_limit }}
- debug:
msg: inventory_hostname = {{ inventory_hostname }}
- debug:
msg: inventory_hostname_short = {{ inventory_hostname_short }}
- debug:
msg: play_hosts = {{ play_hosts }}
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, running this playbook should return something like this.
TASK [debug]
ok: [server1.example.com] => {
"msg: "ansible_hostname = server1"
}
ok: [server2.example.com] => {
"msg: "ansible_hostname = server2"
}
ok: [server3.example.com] => {
"msg: "ansible_hostname = server3"
}
TASK [debug]
ok: [server1.example.com] => {
"msg": [
"server1.example.com",
"server2.example.com",
"server3.example.com"
]
}
TASK [debug]
ok: [server1.example.com] => {
"msg": [
"server1.example.com",
"server2.example.com",
"server3.example.com"
]
}
TASK [debug]
ok: [server1.example.com] => {
"msg: "ansible_limit = server1.example.com"
}
TASK [debug]
ok: [server1.example.com] => {
"msg: "inventory_hostname = server1.example.com"
}
ok: [server2.example.com] => {
"msg: "inventory_hostname = server2.example.com"
}
ok: [server3.example.com] => {
"msg: "inventory_hostname = server3.example.com"
}
TASK [debug]
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"
}
TASK [debug]
ok: [server1.example.com] => {
"msg: "play_hosts = ['server1.example.com', 'server2.example.com', 'server3.example.com']"
}
ok: [server2.example.com] => {
"msg: "play_hosts = ['server1.example.com', 'server2.example.com', 'server3.example.com']"
}
ok: [server3.example.com] => {
"msg: "play_hosts = ['server1.example.com', 'server2.example.com', 'server3.example.com']"
}
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