Hmm, se você precisar obter o nome da interface, tente:
- debug:
msg: "{{ ansible_interfaces | select('match','ens.*') | list | first }}"
Estou tentando configurar uma interface de ponte no Ubuntu 16.04, modelando o /etc/network/interfaces file
para inserir automaticamente o NIC local, assim:
auto br0
iface br0 inet dhcp
bridge_ports <interface>
Eu não tenho o biosdevname
instalado, então a interface está sendo mostrada como ens33
(no meu sistema de teste) e as alterações em outros hosts; em vez do histórico eth0
.
Não é possível usar {{ ansible_default_ipv4.interface }}
para concluir o arquivo, pois isso só preencherá o arquivo corretamente na primeira execução - depois de uma reinicialização, a execução do manual conclui o arquivo com a ponte br0
port.
Eu tentei várias iterações diferentes de usar a variável {{ ansible_interfaces }}
e tentei corresponder com base na regex en. * (todas essas portas serão placas de rede Ethernet fixas), mas nenhuma delas preenche corretamente o arquivo .
O mais próximo que cheguei até agora é:
- debug: msg={{ ansible_interfaces | map('match','ens.*') | list }}
quais saídas
TASK [openvpn : debug] ****************************************************
ok: [192.168.0.134] => {
"msg": [
false,
false,
true
]
}
Mas preciso extrair o nome real do adaptador que corresponda, não apenas se houve uma correspondência ou não.
Alternativamente,
- debug: msg="{{ item }}"
when: "{{ item }} | map('match','ens.*')"
with_items: "{{ ansible_interfaces }}"
fornece essa saída promissora, mas para todos os adaptadores, não apenas o que eu estou tentando corresponder:
TASK [openvpn : debug] *****************************************************
ok: [192.168.0.134] => (item=lo) => {
"item": "lo",
"msg": "lo"
}
ok: [192.168.0.134] => (item=br0) => {
"item": "br0",
"msg": "br0"
}
ok: [192.168.0.134] => (item=ens33) => {
"item": "ens33",
"msg": "ens33"
}