Saltar al contenido

Ansible: agregue direcciones IP del inventario a /etc/hosts de todos los nodos

Verificamos de forma cada uno de los artículos en nuestro sitio web con la meta de mostrarte en todo momento información con la mayor veracidad y actual.

Solución:

Solución 1:

La respuesta anterior simplemente no funciona porque agrega una nueva línea para el mismo host en lugar de modificar la línea existente cuando cambia la dirección IP de un host.

La siguiente solución tiene en cuenta cuándo cambia la dirección IP para un servidor específico y lo maneja bien modificando solo la línea en lugar de agregar entradas duplicadas.

---
- name: Add IP address of all hosts to all hosts
  lineinfile:
    dest: /etc/hosts
    regexp: '.* item $'
    line: " hostvars[item].ansible_host  item"
    state: present
  when: hostvars[item].ansible_host is defined
  with_items: " groups.all "

Solución 2:

Parece que tienes errores en tu sintaxis. Además, ¿qué versión de ansible estás usando? Los nombres de las variables pueden ser diferentes. En versión 2.2 esto funciona para mí:

- name: Add IP address of all hosts to all hosts
  lineinfile:
    dest: /etc/hosts
    line: " hostvars[item].ansible_host   hostvars[item].inventory_hostname   hostvars[item].inventory_hostname_short "
    state: present
  with_items: " groups.all "

ACTUALIZAR

Basil ha pensado en situaciones en las que cambia la IP. En ese caso, es mejor usar su solución sugerida:

- name: Add IP address of all hosts to all hosts
  lineinfile:
    dest: /etc/hosts
    regexp: '.* item $'
    line: " hostvars[item].ansible_host  item"
    state: present
  when: hostvars[item].ansible_host is defined
  with_items: " groups.all "

Solución 3:

Tuve el mismo problema y aquí está mi solución para cualquier persona interesada.

anfitriones/dev.ini

[controller]
controller1 ansible_ssh_host=10.11.11.10
controller2 ansible_ssh_host=10.11.11.11
controller3 ansible_ssh_host=10.11.11.12

[compute]
compute1 ansible_ssh_host=10.11.11.13
compute2 ansible_ssh_host=10.11.11.14
compute3 ansible_ssh_host=10.11.11.15

[block]
block1 ansible_ssh_host=10.11.11.16
block2 ansible_ssh_host=10.11.11.17

[haproxy]
haproxy1 ansible_ssh_host=10.11.11.18

[nginx]
nginx1 ansible_ssh_host=10.11.11.19

[deployment]
deployment ansible_ssh_host=10.11.11.20

[all:vars]
ansible_python_interpreter=/usr/bin/python3

tareas/principal.yml

---
- name: Update /etc/hosts
  become: true
  blockinfile:
      path: /etc/hosts
      create: yes
      block: |
        127.0.0.1 localhost

        # The following lines are desirable for IPv6 capable hosts
        ::1 ip6-localhost ip6-loopback
        fe00::0 ip6-localnet
        ff00::0 ip6-mcastprefix
        ff02::1 ip6-allnodes
        ff02::2 ip6-allrouters
        ff02::3 ip6-allhosts

        % for item in ansible_play_batch %
         hostvars[item].ansible_ssh_host     item     
        % endfor %

Notas:

  • pitón 3.7.5 ansible 2.9.0
  • Decidí ir con blockinfile en lugar de usar plantillas porque el contexto de hostvars no se actualizaba dentro de la plantilla. Además, tenía prisa :-).

Más adelante puedes encontrar las crónicas de otros usuarios, tú también eres capaz insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *