Wie erhält man die IP-Adresse des aktuellen Hosts in einer Rolle?
Ich weiß, dass Sie die Liste der Gruppen, in denen der Host Mitglied ist, und den Hostnamen des Hosts abrufen können, aber ich kann keine Lösung für das Abrufen der IP-Adresse finden.
Sie können den Hostnamen mit {{inventory_hostname}}
und die Gruppe mit {{group_names}}
ermitteln.
Ich habe Dinge wie {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_Host'] }}
und ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_Host }}"
ausprobiert
Eine Liste aller Adressen ist in einem Fakt ansible_all_ipv4_addresses
gespeichert, eine Standardadresse in ansible_default_ipv4.address
.
---
- hosts: localhost
connection: local
tasks:
- debug: var=ansible_all_ipv4_addresses
- debug: var=ansible_default_ipv4.address
Dann werden jeder Netzwerkschnittstelle Adressen zugewiesen ... In solchen Fällen können Sie alle Fakten anzeigen und die finden, die den gewünschten Wert hat.
Sie können die IP-Adresse von hostvars
abrufen, ansible_default_ipv4
diktieren und address
eingeben.
hostvars[inventory_hostname]['ansible_default_ipv4']['address']
und IPv6-Adresse
hostvars[inventory_hostname]['ansible_default_ipv6']['address']
Ein Beispiel für ein Spielbuch:
---
- hosts: localhost
tasks:
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv6']['address']
Sie können {{ ansible_eth0.ipv4.address }}
in Ihrer Vorlage.j2 genauso verwenden wie {{inventory_hostname}}
.
ps: In folgendem Blogpost finden Sie weitere Informationen zu WIE INFORMATIONEN ÜBER FERNGASTGEBER MIT ANSIBLE GATHERS-FAKTEN SAMMELN .
Ich hoffe, es wird eines Tages jemandem helfen
Wenn Sie die externe öffentliche IP möchten und sich in einer Cloud-Umgebung wie AWS oder Azure befinden, können Sie das Modul ipify_facts verwenden =:
# 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:
Dadurch wird die öffentliche IP in die Variable ipify_public_ip
eingefügt.
Eine andere Möglichkeit, öffentliche IP-Adressen zu finden, ist die Verwendung des Moduls uri
:
- name: Find my public ip
uri:
url: http://ifconfig.me/ip
return_content: yes
register: ip_response
Deine IP wird in ip_response.content
sein
http://docs.ansible.com/ansible/latest/plugins/lookup/Dig.html
also in vorlage, für e. G.:
{{ lookup('Dig', ansible_Host) }}
Anmerkungen:
Aber es dient immer noch 99% (bildlich gesprochen) der Anwendungsfälle.
Das folgende Snippet gibt die öffentliche IP-Adresse des Remotecomputers und die Standard-IP-Adresse (z. B. LAN) zurück.
Dadurch werden auch IP-Adressen in Anführungszeichen gedruckt, um Verwechslungen bei der Verwendung von Konfigurationsdateien zu vermeiden.
>> 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'] }}"