Como encontro o nome da segunda NIC usando ansible?

3

Estou implantando algo com o Ansible em um host Linux e preciso que ele seja escutado apenas na segunda NIC do host.

Olhando os dados disponíveis, posso ver que ansible_interfaces lista todas as minhas NICs, por exemplo

 "ansible_interfaces": [
        "lo", 
        "ens9f0", 
        "ens9f1"
 ]

Eu sei que não é lo, então eu posso descontar isso. E olhando ansible_default_ipv4.alias, eu posso ver que meu primário é ens9f0.

Em um play / playbook, como eu poderia descobrir que ens9f1 é o secundário?

O caso de uso para isso é que eu quero fazer algo como o seguinte em um modelo:

Listen {{ ansible_second_nic.ipv4.address }}

Cada máquina em que trabalho pode ter diferentes nomes de NIC, por isso não posso codificá-los em minhas funções. Historicamente, eu apenas assumiria eth1, mas isso não é mais seguro.

    
por Anonymouslemming 05.05.2017 / 22:44

2 respostas

3

Pegue ansible_interfaces , subtraia 'lo' e ansible_default_ipv4.alias , tome o primeiro elemento da lista restante:

- debug:
    msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | first }}"
    
por 06.05.2017 / 10:29
0

Eu notei que os NICs em "ansible_interfaces" nem sempre voltam em ordem (estou lidando com 3 e preciso saber qual é o segundo). Então você pode ter que passar por 'sort' primeiro:

- debug:
msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | sort | first }}"

Eu tentei usar "facter_interfaces" em vez de "ansible_interfaces" porque ele retorna as NICs em ordem, mas parece que não consigo manipular essa saída ... talvez porque seja uma string em vez de uma lista? Sou novo demais para ansiar em saber.

    
por 06.08.2018 / 22:45