레지스터 값을 가져와 나중에 변수로 사용

레지스터 값을 가져와 나중에 변수로 사용

ifcfg-eth0 파일에 추가하여 VM에 대한 동적 할당 IP를 영구적으로 만들고 싶습니다. register: eth0실제 IP 주소 값을 사용하고 마지막 줄에 입력하는 데 문제가 있습니다.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"

오류:

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

답변1

존재하지 않는 "register"라는 이름을 사용하여 레지스터 변수 eth0에 액세스하고 있습니다.

ansible에 변수를 등록할 때 등록하려는 변수의 이름도 ansible에 알려줍니다. 귀하의 경우에는 eth0입니다.

register: eth0

따라서 나중에 액세스하려면 다음과 같이 eth0이라는 이름을 사용해야 합니다.

IPADDR={{ eth0.stdout }}

이제 귀하의 XY 문제라고 생각되는 문제를 해결하도록 허용한다면 grep을 사용하여 인터페이스의 IP 주소를 구문 분석하는 대신 Ansible 사실을 사용해 보는 것이 어떨까요? 호스트의 인터페이스 이름을 알고 있으면 다음과 같이 간단히 수행할 수 있습니다.

IPADDR={{ ansible_eth0.ipv4.address }}

반면에 인터페이스 이름을 모르지만(또는 모든 호스트에서 이름이 다름) 각 호스트에 실행 가능한 인터페이스가 하나만 있다는 것을 알고 있는 경우 다음과 같은 것을 사용할 수 있습니다.

IPADDR={{ ansible_default_ipv4.address }}

ansible이 시스템에서 수집하는 모든 사실을 보려면 다음 명령을 사용하십시오.

ansible <hosts> -m setup

관련 정보