你如何改变ansible_default_ipv4?

How do you change ansible_default_ipv4?

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

ansible uses command ip -4 route get 8.8.8.8 to get the default ipv4 interface. You can change your ip/routing tables 使 eth1 成为默认路由,它会 return 它。

或者您可以使用 custom fact

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']['address'] }}

一个简单的 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

当您想引用私人或 public 用于访问 8.8.8.8(一般互联网)的 ip 时。

顺便说一句,我尝试了 Eron Wright 关于路由添加 -net 8.8.8.8 网络掩码 255.255.255.255 eth1 的建议。它似乎对我不起作用,我无法 ping google(尽管 ping 任何其他 public 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 }' register: ipv4_address

现在我可以在任何需要的地方使用 ipv4_address