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 % (образно говоря) прецедентов.