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事实,但由于缓存,范围,它有它自己的陷阱......
另一种选择是始终显式引用您的接口。不同的云提供商对于将私有(通常是 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 都有效)。