Quiero que la IP dinámica asignada a la máquina virtual sea permanente agregándola a su archivo ifcfg-eth0. Tengo problemas para usar el register: eth0
valor que es la dirección IP real y ponerlo en la última línea. line: "IPADDR=register.stdout"
---
- hosts: all
become: yes
tasks:
- name: getting ip address of eth0
shell: ip r l | grep -e eth0 | grep default | grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
register: eth0
- shell: rm -f /etc/sysconfig/network-scripts/ifcfg-eth0
- file: path="/etc/sysconfig/network-scripts/ifcfg-eth0" state=touch
- blockinfile:
dest: "/etc/sysconfig/network-scripts/ifcfg-eth0"
block: |
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
IPADDR=
NETMASK=255.255.255.0
GATEWAY=
- name: adding ip in ifcfg-eth0
lineinfile:
dest: "/etc/sysconfig/network-scripts/ifcfg-eth0"
regexp: "IPADDR="
line: "IPADDR=register.stdout"
error:
[tempuser@testing ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# BEGIN ANSIBLE MANAGED BLOCK
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
IPADDR=register.stdout
NETMASK=255.255.255.0
GATEWAY=
# END ANSIBLE MANAGED BLOCK[tempuser@testing ~]$
Respuesta1
Está accediendo a la variable de registro eth0 intentando utilizar el nombre "registro" que no existe.
Cuando registra una variable en ansible, también le dice a ansible el nombre de la variable como desea registrarla; en su caso, eth0:
register: eth0
Entonces, para acceder a él más tarde, tendrías que usar el nombre eth0 así:
IPADDR={{ eth0.stdout }}
Ahora, si me permite resolver lo que creo que es un problema suyo XY, en lugar de usar grep para analizar la dirección IP de su interfaz, ¿por qué no intentar usar hechos ansibles? Si conoce el nombre de la interfaz en el host, simplemente puede hacer algo como esto:
IPADDR={{ ansible_eth0.ipv4.address }}
Si, por otro lado, no conoce el nombre de la interfaz (o son diferentes en todos sus hosts), pero sí sabe que cada host tiene sólo una interfaz viable, entonces podría usar algo como lo siguiente:
IPADDR={{ ansible_default_ipv4.address }}
Para ver todos los datos que ansible recopila en un sistema, utilice el siguiente comando:
ansible <hosts> -m setup