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

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

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

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

Вариант 1 – hostvars

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

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

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

Запускаем:

[simterm]

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

[/simterm]

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

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

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

Пример:

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

Запускаем:

[simterm]

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

[/simterm]

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

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

Готово.