Я пытаюсь настроить интерфейс моста в Ubuntu 16.04, используя шаблон /etc/network/interfaces file
чтобы автоматически вставить локальную сетевую карту, например:
auto br0
iface br0 inet dhcp
bridge_ports <interface>
у меня нет biosdevname
установлен, поэтому интерфейс отображается как ens33
(в моей тестовой системе) и изменения на других хостах; вместо исторического eth0
.
Я не могу использовать {{ ansible_default_ipv4.interface }}
для завершения файла, так как это будет правильно заполнять файл только при первом запуске - после перезагрузки запуск playbook завершает файл с мостом br0
порт вместо этого.
Я пробовал несколько разных вариантов использования {{ ansible_interfaces }}
переменная и попытка сопоставления на основе регулярного выражения en. * (все эти порты будут фиксированными сетевыми картами Ethernet), но ни один из них не заполняет файл правильно.
Ближайшее, что я зашел так далеко, это:
- debug: msg={{ ansible_interfaces | map('match','ens.*') | list }}
который выводит
TASK [openvpn : debug] ****************************************************
ok: [192.168.0.134] => {
"msg": [
false,
false,
true
]
}
Но мне нужно иметь возможность извлечь фактическое имя адаптера, которое совпадает, а не только то, было совпадение или нет.
В качестве альтернативы,
- debug: msg="{{ item }}"
when: "{{ item }} | map('match','ens.*')"
with_items: "{{ ansible_interfaces }}"
дает этот многообещающий результат, но для всех адаптеров, а не только для того, который я пытаюсь сопоставить:
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"
}
Хм, если вам нужно получить имя интерфейса, попробуйте:
- debug:
msg: "{{ ansible_interfaces | select('match','ens.*') | list | first }}"