【发布时间】:2018-10-17 11:04:23
【问题描述】:
我正在尝试创建一个简单的脚本来配置我的 Vagrant 设置中的机器。
我目前设置了一个专用网络,其中 Vagrant 文件中的每个节点都有如下内容:
node.vm.network "private_network", ip: "172.16.x.x"
在我的 Ansible 脚本中,我最初使用 {{ ansible_eth2.ipv4.address }} 来获取我的剧本任务中的 IP 地址。
然而,当我最近更换机器时,Ansible 变量未定义,因为新机器没有eth2 网络接口。在新机器上,Vagrant 文件中设置的私有 ip 地址似乎分配给了eth1 接口。
为了解决这个问题并使我的 Ansible 剧本与硬件无关,我将所有对 {{ ansible_eth2.ipv4.address }} 的引用替换为 {{ ansible_default_ipv4.address }},但这会检索到 eth0 的 IP 地址(在我的情况下为 10.0.x.x )。
如何将 Vagrant 文件设置为始终将 IP 地址添加到 Ansible 将用于{{ ansible_default_ipv4.address }} 的任何网络接口?
如果做不到这一点,我可以用 Ansible(甚至原始 shellscript)做些什么来检索私有 IP 地址吗?
【问题讨论】:
-
嗯,你已经尝试了什么?因为在我见过的每个 ansible
hostfacts上,它都包含所有接口的地址,因此 jinja2 过滤掉 10.0.x.y 以获取其余接口是微不足道的 -
有关如何过滤网络接口的说明会很有帮助。不过现在,我在 Vagrant 文件中使用了
node.vm.network "private_network", ip: machine_ip, bridge: "eth1: Ethernet",以确保我的私有 IP 始终位于 eth1 接口上。至少那是我认为那行代码正在做的事情......
标签: networking ansible vagrant virtual-machine