Tomando o valor do registrador e usando-o posteriormente como variável

1

Eu quero fazer a dinâmica atribuída ip para vm permanente, adicionando-o ao seu arquivo ifcfg-eth0, estou tendo problemas em usar o valor register: eth0 , que é o endereço IP real e colocá-lo na última linha 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"

erro:

[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 ~]$
    
por Mohd 30.05.2017 / 06:44

1 resposta

1

Você está acessando a variável de registro eth0 tentando usar o nome "register" que não existe.

Quando você registra uma variável em ansible, você também informa ao ansible o nome da variável que deseja registrá-la como - no seu caso, eth0:

register: eth0

Para acessá-lo mais tarde, você teria que usar o nome eth0 assim:

IPADDR={{ eth0.stdout }}

Agora, se você me permite resolver o que eu acredito ser um problema XY seu - em vez de usar o grep para analisar o endereço IP da sua interface, por que não tentar usar fatos ansiosos? Se você souber o nome da interface no host, você pode simplesmente fazer algo assim:

IPADDR={{ ansible_eth0.ipv4.address }}

Se, por outro lado, você não souber o nome da interface (ou eles são diferentes em todos os seus hosts) - mas você sabe que cada host tem apenas uma interface viável, você pode usar algo como o seguinte:

IPADDR={{ ansible_default_ipv4.address }}

Para ver todos os fatos que o ansible coleta em um sistema, use o seguinte comando:

ansible <hosts> -m setup
    
por 30.05.2017 / 08:37

Tags