Linux

如何使用 ansible 找到第二個 NIC 的名稱?

  • August 6, 2018

我正在使用 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,但我似乎無法操作該輸出……也許是因為它是一個字元串而不是列表?我太新了,無法知道。

引用自:https://serverfault.com/questions/848549