【问题标题】:Ansible & Vagrant: Get private network ip addressAnsible & Vagrant:获取私网ip地址
【发布时间】: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


【解决方案1】:

至少一种方式,可能有多种方式:

  - debug:
      verbosity: 0
      msg: |
          {%- for nic in ansible_interfaces -%}
          {%- for addr in (vars["ansible_"+nic]["ipv4"] | map(attribute="address") | list)
              if not (addr | regex_search('10(\.\d+){3}')) -%}
          nic {{ nic }} := {{ addr }}
          {%- endfor -%}
          {%- endfor -%}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多