Registerwert übernehmen und später als Variable verwenden

Registerwert übernehmen und später als Variable verwenden

Ich möchte die dynamisch zugewiesene IP-Adresse der VM dauerhaft machen, indem ich sie zu ihrer ifcfg-eth0-Datei hinzufüge. Ich habe Probleme, den register: eth0Wert zu verwenden, der die tatsächliche IP-Adresse ist, und ihn in die letzte Zeile einzufügen 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"

Fehler:

[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 ~]$

Antwort1

Sie greifen auf die Registervariable eth0 zu, indem Sie versuchen, den Namen „register“ zu verwenden, der nicht existiert.

Wenn Sie eine Variable in Ansible registrieren, teilen Sie Ansible auch den Namen der Variable mit, als die Sie sie registrieren möchten – in Ihrem Fall eth0:

register: eth0

Um später darauf zuzugreifen, müssen Sie den Namen eth0 wie folgt verwenden:

IPADDR={{ eth0.stdout }}

Wenn Sie mir jetzt erlauben, ein Problem zu lösen, das ich für ein XY-Problem halte – anstatt grep zu verwenden, um die IP-Adresse Ihrer Schnittstelle zu analysieren, warum versuchen Sie es nicht mit Ansible Facts? Wenn Sie den Schnittstellennamen auf dem Host kennen, können Sie einfach Folgendes tun:

IPADDR={{ ansible_eth0.ipv4.address }}

Wenn Sie hingegen die Schnittstellennamen nicht kennen (oder diese auf allen Ihren Hosts unterschiedlich sind), aber wissen, dass jeder Host nur eine nutzbare Schnittstelle hat, können Sie etwa Folgendes verwenden:

IPADDR={{ ansible_default_ipv4.address }}

Um alle Fakten anzuzeigen, die Ansible auf einem System sammelt, verwenden Sie den folgenden Befehl:

ansible <hosts> -m setup

verwandte Informationen