你如何改变ansible_default_ipv4?

jd5*_*d50 15 ansible ansible-facts

我想将ansible_default_ipv4更改为指向eth1而不是eth0.我可以在剧本中或通过--extra-vars选项执行此操作吗?

Kas*_*yap 16

ansible使用命令 ip -4 route get 8.8.8.8获取默认的ipv4接口.您可以更改您的IP /路由表eth1生成默认路由,它将返回它.

或者您可以使用 自定义事实.

PS:set_fact用来覆盖这个ansible_default_ipv4事实,但由于缓存,范围,它有它自己的陷阱......


dar*_*ram 6

另一种选择是始终显式引用您的接口。不同的云提供商对于将私有(通常是 10.xyz)管理网络放在 eth0 或 eth1 上有不同的约定。

而不是引用

ansible_default_ipv4["address"]
Run Code Online (Sandbox Code Playgroud)

你总是可以定义你想要的 iface (比如在 group_vars/all 中)

iface: eth0

并将其在任务中引用为

{{ 'ansible_'+iface['ipv4']['地址'] }}

一个简单的 grep 将显示所有参考文献。对您的项目进行全局查找和替换将让您改变这一点。 grep -RH ansible_default_ipv4 .

然后,当您想要切换云提供商时,您只需根据需要调整 iface 即可。

如果您喜欢不太冗长且更明确的定义

private_iface: eth0  #switch eth0,eth1 depending on your provider.
public_iface: eth1
private_host_ipv4: "{{ 'ansible_'+private_iface['ipv4']['address'] }}"
public_host_ipv4: "{{ 'ansible_'+public_iface['ipv4']['address'] }}"
Run Code Online (Sandbox Code Playgroud)

并且只使用

ansible_默认_ipv4

当您想要引用用于访问 8.8.8.8(一般互联网)的私有或公共 IP 时。

顺便说一句,我尝试了 Eron Wright 的路线添加建议 -net 8.8.8.8 netmask 255.255.255.255 eth1。它似乎对我不起作用,而且我无法 ping 谷歌(尽管 ping 任何其他公共 IP 都有效)。