playbooks playbook example ansible ansible-facts ansible-template

example - ansible playbook format



Ansible: obtener la dirección IP del host objetivo actual (7)

¿Cómo se obtiene la dirección IP del host actual en un rol?

Sé que puede obtener la lista de grupos a los que pertenece el host y el nombre de host del host, pero no puedo encontrar una solución para obtener la dirección IP.

Puede obtener el nombre de host usando {{inventory_hostname}} y el grupo usando {{group_names}}

He intentado cosas como {{ hostvars[{{ inventory_hostname }}][''ansible_ssh_host''] }} e ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"


El siguiente fragmento devolverá la IP pública de la máquina remota y también la IP predeterminada (es decir, LAN)

Esto imprimirá ip entre comillas también para evitar confusiones al usar archivos de configuración.

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


Otra forma de encontrar IP pública sería utilizar el módulo uri :

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

Su IP estará en ip_response.content


Puede obtener la dirección IP de hostvars , dict ansible_default_ipv4 y la address clave

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

y dirección IPv6 respectivamente

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

Un ejemplo de libro de jugadas:

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



Si desea la IP pública externa y se encuentra en un entorno de nube como AWS o Azure, puede usar el módulo 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:

Esto colocará la IP pública en la variable ipify_public_ip .


Una lista de todas las direcciones se almacena en un hecho ansible_all_ipv4_addresses , una dirección predeterminada en ansible_default_ipv4.address .

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

Luego hay direcciones asignadas a cada interfaz de red ... En tales casos, puede mostrar todos los hechos y encontrar el que tiene el valor que desea utilizar.


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

así en plantilla, por ejemplo:

{{ lookup(''dig'', ansible_host) }}

Notas:

  • Dado que no solo se puede usar el nombre DNS en el inventario, se debe agregar una verificación si no es IP.
  • Obviamente, este recibo no funcionaría según lo previsto para las especificaciones indirectas del host (como usar hosts de salto, por ejemplo)

Pero aún sirve el 99% (en sentido figurado) de los casos de uso.