我试图在Ubuntu 16.04上configuration一个网桥接口,模板化/etc/network/interfaces file以便自动插入本地网卡,如下所示:
auto br0 iface br0 inet dhcp bridge_ports <interface>
我没有安装biosdevname ,所以界面显示为ens33 (在我的testing系统上),以及其他主机上的更改; 而不是历史的eth0 。
我不能使用{{ ansible_default_ipv4.interface }}来完成文件,因为这将只在第一次运行时正确地填充文件 – 重新启动后,运行剧本,而不是桥br0端口完成文件。
我尝试了许多不同的使用{{ ansible_interfaces }}variables的迭代,并试图根据regex en。*(所有这些端口都是固定的以太网卡)进行匹配,但是没有一个正确地填充文件。
我到目前为止最近的是:
- 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 }}"