在Ansible中使用正则expression式从列表中提取单个项目

我试图在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 }}"