2016-10-02 4 views
25

Wie erhalten Sie die IP-Adresse des aktuellen Hosts in einer Rolle?Ansible: aktuelle IP-Adresse des Zielhosts abrufen

Ich weiß, Sie können die Liste der Gruppen, die der Host ist ein Mitglied und den Hostnamen des Hosts, aber ich bin nicht in der Lage, eine Lösung zum Abrufen der IP-Adresse zu finden.

Sie können den Hostnamen erhalten, indem {{inventory_hostname}} und die Gruppe mit unter Verwendung {{group_names}}

Ich habe versucht, Dinge wie {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }} und ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"

Antwort

37

Eine Liste aller Adressen in einer Tatsache ansible_all_ipv4_addresses, eine Default-Adresse in ansible_default_ipv4.address gespeichert ist.

--- 
- hosts: localhost 
    connection: local 
    tasks: 
    - debug: var=ansible_all_ipv4_addresses 
    - debug: var=ansible_default_ipv4.address 

Dann gibt es Adressen für jede Netzwerkschnittstelle zugewiesen ... In solchen Fällen können Sie alle Fakten darstellen kann und die einen finden, der den Wert, den Sie verwenden möchten, hat.

+0

Wie zeigen Sie alle Flags an? – SJC

+0

'ansible -m Setup' oder' all' anstelle von Hostname für alle Hosts in der Inventardatei – techraf

+1

Können Sie alle Flags innerhalb einer Aufgabe auflisten? – SJC

17

Sie können die IP-Adresse von hostvars erhalten, dict ansible_default_ipv4 und Schlüssel address

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

und IPv6-Adresse bzw.

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

Ein Beispiel Textbuch:

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

Sie können in Ihrem template.j2 {{ ansible_eth0.ipv4.address }} die gleiche Weise verwenden, die Sie {{inventory_hostname}} verwenden.

ps: Weitere Informationen zu HOW TO COLLECT INFORMATION ABOUT REMOTE HOSTS WITH ANSIBLE GATHERS FACTS finden Sie im folgenden Blogpost.

‚Hoffnung, es werde jemand eines Tages helfen ッ

+3

Seien Sie besonders vorsichtig. Heutzutage ist die Standard-Netzwerkschnittstelle nicht immer 'eth0'. Es nennt sich manchmal ens3 oder enp2s0 und solche Dinge. Sie haben einfach bessere Wetten, wenn Sie 'ansible_default_ipv4' verwenden und wenn es nicht funktioniert, dann wechseln Sie zurück und suchen Sie nach einigen vernünftigen Standardeinstellungen. –

2

Wenn Sie die externe öffentliche IP wollen und Sie sind in einer Cloud-Umgebung wie AWS oder Azure können Sie die ipify_facts module 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: 

Dies wird die öffentliche IP-Adresse in die Variable ipify_public_ip setzen.

+0

Das funktioniert nicht immer. Für mich ist die 'ipify_public_ip'-Variable leer – Davide

+0

Für AWS ist inventory_hostname die IP-Adresse. –

+0

Dieses Plugin kann unter bestimmten Umständen funktionieren. Wenn Sie von einem NAT aus auf das Internet zugreifen, funktioniert es nicht. Grundsätzlich funktioniert das, wenn die Server für das Internet zugänglich sind und den ipify treffen können.org Website, um ihre externe IP beim Zugriff auf die Website aufzulösen. – slm

Verwandte Themen