如何使用 ansible 找到第二个 NIC 的名称?

如何使用 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,但这不再安全。

答案1

ansible_interfaces,减去'lo'ansible_default_ipv4.alias取剩余列表的第一个元素:

- debug:
    msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | first }}"

答案2

我注意到“ansible_interfaces”中的 NIC 并不总是按顺序返回(我正在处理 3 个,我需要知道哪个是第二个)。因此,您可能必须先通过“sort”将其传输:

- debug:
msg: "{{ ansible_interfaces | difference(['lo',ansible_default_ipv4.alias]) | sort | first }}"

我尝试使用“facter_interfaces”而不是“ansible_interfaces”,因为它按顺序返回 NIC,但我似乎无法操纵该输出...也许是因为它是一个字符串而不是列表?我对 ansible 还不太了解。

相关内容