동적으로 할당된 IP를 ifcfg-eth0 파일에 추가하여 가상 머신을 영구적으로 할당하고 싶습니다. 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 문제를 해결할 수 있게 된다면 인터페이스의 IP 주소를 파악하는 대신 사실을 파악하기 위해 ansible을 사용해 보는 것은 어떨까요? 호스트의 인터페이스 이름을 알고 있다면 간단히 다음을 수행할 수 있습니다.
IPADDR={{ ansible_eth0.ipv4.address }}
반면에 인터페이스 이름을 모르지만(또는 모든 호스트에서 서로 다름) 호스트당 실행 가능한 인터페이스가 하나만 있다는 것을 알고 있는 경우 다음과 같이 사용할 수 있습니다.
IPADDR={{ ansible_default_ipv4.address }}
시스템에서 ansible이 수집한 모든 사실을 보려면 다음 명령을 사용하십시오.
ansible <hosts> -m setup