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: eth0
Wert 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