Ansible&Vagrant:获取专用网络ip地址

时间:2018-10-17 11:04:23

标签: networking ansible vagrant virtual-machine

我正在尝试创建一个简单的脚本以在Vagrant设置中配置机器。

我目前建立了一个专用网络,其中Vagrant文​​件中的每个节点都具有以下内容:

  

node.vm.network“专用网络”,ip:“ 172.16.x.x”

在Ansible脚本中,我最初使用{{ ansible_eth2.ipv4.address }}来获取剧本任务中的IP地址。

但是,当我最近交换计算机时,A​​nsible变量未定义,因为新计算机没有eth2网络接口。在新计算机上,Vagrant文​​件中设置的专用ip地址似乎已分配给eth1接口。

为解决此问题并使Ansible剧本在硬件上不可知,我将对{{ ansible_eth2.ipv4.address }}的所有引用替换为{{ ansible_default_ipv4.address }},但这样会检索eth0处的ip地址( 10.0.xx)。

如何设置Vagrant文​​件以始终将IP地址添加到Ansible将用于{{ ansible_default_ipv4.address }}的任何网络接口上?

或者失败了,我可以用Ansible(甚至原始的shellscript)做任何事情来检索私有IP地址吗?

1 个答案:

答案 0 :(得分:0)

至少有一种方法,因为可能有几种:

  - 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 -%}