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 }}"
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.
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']
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
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
.
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
http://docs.ansible.com/ansible/latest/plugins/lookup/Dig.html
donc dans le modèle, pour e. g.:
{{ lookup('Dig', ansible_Host) }}
Remarques:
Mais cela sert quand même 99% (au sens figuré) de cas d’utilisation.
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'] }}"