如何更改ansible_default_ipv4?

问题描述 投票:0回答:3

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

ansible ansible-facts
3个回答
18
投票

ansible 使用命令

ip -4 route get 8.8.8.8
来获取默认的 ipv4 接口。您可以 更改您的 IP/路由表,使
eth1
成为默认路由,它会返回它。

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

PS:使用

set_fact
覆盖
ansible_default_ipv4
事实,但由于缓存、范围等原因,它有自己的陷阱......


6
投票

另一个选项是始终显式引用您的界面。 不同的云提供商对于将私有(通常是 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 都有效)。


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.