it-swarm.com.ru

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

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

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

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

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

62
SJC

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

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

83
techraf

Вы можете получить IP-адрес от hostvars, dict 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']
46
Pasi H

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

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

"надеясь, что это поможет кому-нибудь однажды

23
Orsius

Если вы хотите внешний публичный 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.

4
Simon Woodside

Другой способ найти общедоступный IP-адрес - использовать модуль uri:

    - name: Find my public ip
      uri: 
        url: http://ifconfig.me/ip
        return_content: yes
      register: ip_response

Ваш IP будет в ip_response.content

3
chava

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

так в шаблоне, для эл. г.:

{{ lookup('Dig', ansible_Host) }}

Заметки:

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

Но все же это служит 99% (образно говоря) случаев использования.

1
poige

Следующий фрагмент вернет публичный IP-адрес удаленного компьютера, а также IP-адрес по умолчанию (т. Е. LAN)

Это будет печатать ip в кавычках, чтобы избежать путаницы при использовании файлов конфигурации.

>> main.yml

---
- hosts: localhost
  tasks:
    - name: ipify
      ipify_facts:
    - debug: var=hostvars[inventory_hostname]['ipify_public_ip']
    - debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
    - name: template
      template:
        src: debug.j2
        dest: /tmp/debug.ansible

>> templates/debug.j2

public_ip={{ hostvars[inventory_hostname]['ipify_public_ip'] }}
public_ip_in_quotes="{{ hostvars[inventory_hostname]['ipify_public_ip'] }}"

default_ipv4={{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}
default_ipv4_in_quotes="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
0
Akhil Jalagam