次のように、ローカルNICを自動的に挿入するために/etc/network/interfaces file
をテンプレート化して、Ubuntu 16.04でブリッジインターフェイスを構成しようとしています。
auto br0
iface br0 inet dhcp
bridge_ports <interface>
私はbiosdevname
をインストールしていないため、インターフェースはens33
(テストシステム上)として表示され、他のホストでは変更されています。歴史的なeth0
の代わりに。
{{ ansible_default_ipv4.interface }}
を使用してファイルを完成させることはできません。これは、最初の実行時にのみファイルに正しく入力されるためです。再起動後、プレイブックを実行すると、代わりにブリッジbr0
ポートでファイルが完成します。
{{ ansible_interfaces }}
変数を使用していくつかの異なる反復を試行し、正規表現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 }}"