Linux
如何使用 ansible 找到第二個 NIC 的名稱?
我正在使用 Ansible 將某些東西部署到 Linux 主機,並且我需要它僅在主機上的第二個 NIC 上進行偵聽。
查看可用的事實,我可以看到 ansible_interfaces 列出了我所有的 NIC,例如
"ansible_interfaces": [ "lo", "ens9f0", "ens9f1" ]
我知道這不是 lo,所以我可以打折。通過查看 ansible_default_ipv4.alias,我可以看到我的主要是 ens9f0。
在劇本/劇本中,我怎麼能算出 ens9f1 是次要的?
案例是我想在模板中執行以下操作:
Listen {{ ansible_second_nic.ipv4.address }}
我工作的每台機器可能有不同的 NIC 名稱,所以我不能在我的角色中硬編碼這些名稱。從歷史上看,我只會假設 eth1,但這不再安全。
取
ansible_interfaces
、減'lo'
和ansible_default_ipv4.alias
取剩餘列表的第一個元素:- debug: msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | first }}"
我注意到“ansible_interfaces”中的 NIC 並不總是按順序返回(我正在處理 3,我需要知道哪個是 2nd)。因此,您可能必須先通過“排序”對其進行管道傳輸:
- debug: msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | sort | first }}"
我嘗試使用“facter_interfaces”而不是“ansible_interfaces”,因為它按順序返回 NIC,但我似乎無法操作該輸出……也許是因為它是一個字元串而不是列表?我太新了,無法知道。