我想将 ansible_default_ipv4 更改为指向 eth1 而不是 eth0。我可以在剧本中或通过 --extra-vars 选项执行此操作吗?
ip -4 route get 8.8.8.8
来获取默认的 ipv4 接口。您可以 更改您的 IP/路由表,使 eth1
成为默认路由,它会返回它。
或者您可以使用 自定义事实。
PS:使用
set_fact
来覆盖ansible_default_ipv4
事实,但由于缓存、范围等原因,它有自己的陷阱......
另一个选项是始终显式引用您的界面。 不同的云提供商对于将私有(通常是 10.x.y.z)管理网络放在 eth0 或 eth1 上有不同的约定。
而不是引用
ansible_default_ipv4["address"]
您始终可以定义您想要的 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'] }}"
且仅使用
ansible_default_ipv4
当您想要引用用于访问 8.8.8.8(一般互联网)的私有或公共 IP 时。
顺便说一句,我尝试了 Eron Wright 的路线添加建议 -net 8.8.8.8 netmask 255.255.255.255 eth1。它似乎对我不起作用,而且我无法 ping 谷歌(尽管 ping 任何其他公共 IP 都有效)。
ip -4 route get 8.8.8.8
无法在我的服务器上运行。
我创建了这个工作。
- name: find default ipv4... this is a bit of a hack.
shell: ifconfig $(route | grep default | awk '{print $(NF)}') | grep 'inet' | awk '{ print $2}'
register: ipv4_address
现在我可以在任何需要的地方使用
ipv4_address
!