Ansible: получить IP таргет-хоста

Автор: | 04/09/2019
 

Задача — в Ansible получить IP адрес хоста, на котором выполняется задача.

Есть два варианта (может и больше), ниже — примеры с обоими.

Вариант 1 — hostvars

См. документацию тут>>>.

Добавим тестовую задачу:

- name: Test hosts list
  debug:
    msg: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"

Запускаем:

...
TASK [test : Test hosts list] ****
ok: [dev.backend-app1-internal.example.com] => {
"msg": "10.0.2.71"
}
ok: [dev.backend-app2-internal.example.com] => {
"msg": "10.0.2.91"
}
ok: [dev.backend-console-internal.example.com] => {
"msg": "10.0.2.104"
}
ok: [dev.backend-bastion.example.com] => {
"msg": "10.0.2.126"
}
...

Вариант 2 — lookup и dig

Второй вариант — с помощью lookup и его плагина dig.

См. документацию тут>>>.

Пример:

...
- name: Test hosts list
  debug:
    msg: "{{ lookup('dig', ansible_host) }}"
...

Запускаем:

...
TASK [test : Test hosts list] ****
ok: [dev.backend-app1-internal.example.com] => {
"msg": "10.0.2.71"
}
ok: [dev.backend-app2-internal.example.com] => {
"msg": "10.0.2.91"
}
ok: [dev.backend-bastion.example.com] => {
"msg": "18.***.***.67"
}
ok: [dev.backend-console-internal.example.com] => {
"msg": "10.0.2.104"
}
...

Единственное, на что стоит обратить внимание — dev.backend-bastion.example.com в первом случае резолвится на приватный IP EC2 инстанса, а во втором — на приватный.

У остальных имён есть только приватные адреса.

Готово.