15

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

4

3 回答 3

17

ansible 使用命令 ip -4 route get 8.8.8.8获取默认的 ipv4 接口。您可以更改您的 ip/路由表以创建eth1默认路由,它会返回它。

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

PS:set_fact用于覆盖ansible_default_ipv4事实,但由于缓存,范围,......

于 2015-04-07T16:09:20.667 回答
4

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

而不是参考

ansible_default_ipv4["address"]

您始终可以定义所需的 iface(例如在 group_vars/all 中)

脸: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

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

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

于 2015-11-24T04:14:49.010 回答
1

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在任何需要的地方使用!

于 2017-10-26T17:02:01.840 回答