Jak uzyskać adres IP obecnego hosta w roli?
Wiem, że możesz uzyskać listę grup, których członkiem jest host, oraz nazwę hosta, ale nie mogę znaleźć rozwiązania, aby uzyskać adres IP.
Nazwę hosta można uzyskać za pomocą, {{inventory_hostname}}
a grupę przy użyciu{{group_names}}
Próbowałem takich rzeczy jak {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }}
iip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"
setup:
modułregister: allfacts
- debug: var=allfacts
gather_facts
musi być,true
aby to zadziałało. jest to domyślnie prawda, ale można zmienić ją na fałsz, jeśli informacje o hostach nie są wymagane.Możesz uzyskać adres IP z
hostvars
, dictansible_default_ipv4
i keyaddress
i adres IPv6 odpowiednio
Przykładowy poradnik:
źródło
Możesz użyć w swoim template.j2 w
{{ ansible_eth0.ipv4.address }}
taki sam sposób jak używasz{{inventory_hostname}}
.ps: Zapoznaj się z następującym postem na blogu, aby uzyskać więcej informacji na temat JAK ZBIERAĆ INFORMACJE O ZDALNYCH HOSTACH Z PRAWIDŁOWYMI ZBIORAMI FAKTÓW .
mam nadzieję, że kiedyś komuś pomoże ッ
źródło
ens3
lubenp2s0
i takie rzeczy. Masz po prostu lepsze zakłady, jeśli używasz,ansible_default_ipv4
a jeśli to nie działa, przełącz się z powrotem, szukając rozsądnych ustawień domyślnych.Jeśli chcesz mieć zewnętrzny publiczny adres IP i jesteś w środowisku chmurowym, takim jak AWS lub Azure, możesz użyć modułu ipify_facts :
Spowoduje to umieszczenie publicznego adresu IP w zmiennej
ipify_public_ip
.źródło
ipify_public_ip
zmienna jest pustainventory_hostname
jest tym, co jest ustawione w ekwipunku. Może to być nazwa hosta ustawiona w.ssh/config
.Innym sposobem na znalezienie publicznego adresu IP byłoby użycie
uri
modułu:Twoje IP będzie w
ip_response.content
źródło
https://ipecho.net/plain
Proste polecenie debugowania:
wynik:
pobierz adres IP hosta:
źródło
http://docs.ansible.com/ansible/latest/plugins/lookup/dig.html
więc w szablonie, na przykład:
Uwagi:
Ale nadal obsługuje 99% (mówiąc w przenośni) przypadków użycia.
źródło
ansible_host
nie jest to adres IP danego hosta?Równina
ansible_default_ipv4.address
może nie być tym, co myślisz w niektórych przypadkach , użyj:źródło
Poniższy fragment kodu zwróci publiczny adres IP zdalnego komputera, a także domyślny adres IP (tj .: LAN)
Spowoduje to również wyświetlenie adresów IP w cudzysłowach, aby uniknąć nieporozumień w używaniu plików konfiguracyjnych.
źródło
Po prostu użyj
ansible_ssh_host
zmiennejźródło