it-swarm.com.de

Ansible: Ermittelt die IP-Adresse des aktuellen Zielhosts

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

69
SJC

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.

88
techraf

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']
52
Pasi H

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

23
Orsius

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.

4
Simon Woodside

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

3
chava

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

also in vorlage, für e. G.:

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

Anmerkungen:

  • Da nicht nur DNS-Namen im Inventar verwendet werden könnten, sollte eine Überprüfung, ob es sich nicht bereits um IP handelt, besser hinzugefügt werden
  • Offensichtlich würde diese Quittung für indirekte Host-Spezifikationen nicht wie vorgesehen funktionieren (wie die Verwendung von Sprung-Hosts, zum Beispiel).

Aber es dient immer noch 99% (bildlich gesprochen) der Anwendungsfälle.

1
poige

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'] }}"
0
Akhil Jalagam