Ansible: получить IP-адрес текущего целевого хоста

как вы получаете IP-адрес текущего хоста в роли?

Я знаю, что вы можете получить список групп, принимающих член и имя хозяина но я не могу найти решение для получения IP-адреса.

вы можете получить имя хоста с помощью {{inventory_hostname}} и группа с помощью {{group_names}}

Я пробовал такие вещи, как {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }} и ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"

5 ответов


список всех адресов хранится в самом деле ansible_all_ipv4_addresses, адрес по умолчанию в ansible_default_ipv4.address.

---
- hosts: localhost
  connection: local
  tasks:
    - debug: var=ansible_all_ipv4_addresses
    - debug: var=ansible_default_ipv4.address

тогда есть адреса, назначенные каждому сетевому интерфейсу... В таких случаях можно просмотреть все факты и найти тот, который имеет значение, которое вы хотите использовать.


вы можете получить IP-адрес из hostvars, дикт ansible_default_ipv4 и клавишу address

hostvars[inventory_hostname]['ansible_default_ipv4']['address']

и IPv6 адрес соответственно

hostvars[inventory_hostname]['ansible_default_ipv6']['address']

пример playbook:

---
- hosts: localhost
  tasks:
    - debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
    - debug: var=hostvars[inventory_hostname]['ansible_default_ipv6']['address']

Вы можете использовать в вашем шаблоне.в J2 {{ ansible_eth0.ipv4.address }} Так же, как вы используете {{inventory_hostname}}.

ps: пожалуйста, обратитесь к следующему blogpost, чтобы получить больше информации о КАК СОБИРАТЬ ИНФОРМАЦИЮ ОБ УДАЛЕННЫХ ХОСТАХ С ПОМОЩЬЮ ANSIBLE СОБИРАЕТ ФАКТЫ .

' надеюсь, что это поможет кому-то в один прекрасный день!--3-->


Если вы хотите внешний публичный IP и вы находитесь в облачной среде, такой как AWS или Azure, вы можете использовать модуль ipify_facts:

# TODO: SECURITY: This requires that we trust ipify to provide the correct public IP. We could run our own ipify server.
- name: Get my public IP from ipify.org
  ipify_facts:

это поместит общедоступный IP в переменную ipify_public_ip.


http://docs.ansible.com/ansible/latest/plugins/lookup/dig.html

Так в шаблоне, для e. г.:

{{ lookup('dig', ansible_host) }}

Примечания:

  • так как не только DNS-имя может быть использовано в инвентаре проверка, если это не IP уже лучше добавить
  • очевидно, что эта квитанция не будет работать как предназначенная для косвенных спецификаций хоста (например, с помощью хостов перехода, для e. г.)

но все же он служит 99 % (образно говоря) прецедентов.