2016-10-02 7 views
25

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

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

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

Я пытался что-то вроде {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }} и ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"

ответ

37

список всех адресов хранится в самом деле 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 

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

+0

Как вы показываете все флаги? – SJC

+0

'ansible -m setup' или' all' вместо имени хоста для всех хостов в файле инвентаря – techraf

+1

Можете ли вы перечислить все флаги из задачи? – SJC

17

Вы можете получить IP-адрес от hostvars, ДИКТ ansible_default_ipv4 и ключ address

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

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

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

Пример пьес:

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

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

ps: Для получения дополнительной информации о HOW TO COLLECT INFORMATION ABOUT REMOTE HOSTS WITH ANSIBLE GATHERS FACTS , пожалуйста, обратитесь к следующей блоге.

«в надежде, что это поможет кому-то один день ッ

+3

Будьте осторожны. В настоящее время сетевой интерфейс по умолчанию не всегда является «eth0». Иногда это называется 'ens3' или' enp2s0' и такие вещи. У вас только лучшие ставки, если вы используете 'ansible_default_ipv4', а если он не работает, то переключитесь назад, ища некоторые нормальные значения по умолчанию. –

2

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

# 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.

+0

Это не всегда работает. Для меня переменная 'ipify_public_ip' пуста – Davide

+0

Для AWS, resource_hostname будет ip-адресом. –

+0

Этот плагин может работать в определенных обстоятельствах, если вы пользуетесь Интернетом из-за NAT, это не сработает. В основном это работает, когда серверы доступны в Интернете и могут попасть в ipify.org для разрешения своего внешнего IP-адреса при доступе к сайту. – slm

Смежные вопросы