web-dev-qa-db-fra.com

Ansible: obtenir l'adresse IP actuelle de l'hôte cible

Comment obtenez-vous l'adresse IP de l'hôte actuel dans un rôle?

Je sais que vous pouvez obtenir la liste des groupes dont l'hôte est membre et le nom d'hôte de l'hôte, mais je ne parviens pas à trouver de solution pour obtenir l'adresse IP.

Vous pouvez obtenir le nom d'hôte en utilisant {{inventory_hostname}} et le groupe en utilisant {{group_names}}.

J'ai essayé des choses comme {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_Host'] }} et ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_Host }}"

69
SJC

Une liste de toutes les adresses est stockée dans un fait ansible_all_ipv4_addresses, une adresse par défaut dans ansible_default_ipv4.address.

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

Ensuite, des adresses sont attribuées à chaque interface réseau ... Dans ce cas, vous pouvez afficher tous les faits et trouver celui qui a la valeur que vous souhaitez utiliser.

88
techraf

Vous pouvez obtenir l'adresse IP de hostvars, dict ansible_default_ipv4 et de la touche address.

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

et adresse IPv6 respectivement

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

Un exemple de playbook:

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

Vous pouvez utiliser dans votre template.j2 {{ ansible_eth0.ipv4.address }} de la même manière que vous utilisez {{inventory_hostname}}.

ps: veuillez vous référer au blog suivant pour avoir plus d’informations sur COMMENT RECUEILLIR DES INFORMATIONS SUR DES HÔTES DISTINCT AVEC DES FAITS ANTIBLES DE COLLIERS .

'en espérant que ça va aider quelqu'un un jour

23
Orsius

Si vous voulez l'IP publique externe externe et que vous vous trouvez dans un environnement en nuage comme AWS ou Azure, vous pouvez utiliser le module 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:

Cela placera l'adresse IP publique dans la variable ipify_public_ip.

4
Simon Woodside

Une autre façon de trouver une adresse IP publique serait d'utiliser le module uri:

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

Votre adresse IP sera dans ip_response.content

3
chava

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

donc dans le modèle, pour e. g.:

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

Remarques:

  • Etant donné que non seulement le nom DNS peut être utilisé dans l'inventaire, il faut vérifier si ce n'est pas déjà une adresse IP.
  • De toute évidence, ce reçu ne fonctionnerait pas comme prévu pour les spécifications d’hôte indirect (comme l’utilisation d’hôtes de saut, par exemple).

Mais cela sert quand même 99% (au sens figuré) de cas d’utilisation.

1
poige

L'extrait suivant renverra l'adresse IP publique de la machine distante ainsi que l'adresse IP par défaut (i.e: LAN)

Cela permettra également d’imprimer ip entre guillemets pour éviter toute confusion lors de l’utilisation de fichiers de configuration.

>> 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