Tomar el valor del registro y usarlo más tarde como variable.

Tomar el valor del registro y usarlo más tarde como variable.

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: eth0valor 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

información relacionada