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.