我正在使用 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 还不太了解。