我正在尝试创建一个简单的脚本以在Vagrant设置中配置机器。
我目前建立了一个专用网络,其中Vagrant文件中的每个节点都具有以下内容:
node.vm.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.xx)。
如何设置Vagrant文件以始终将IP地址添加到Ansible将用于{{ ansible_default_ipv4.address }}
的任何网络接口上?
或者失败了,我可以用Ansible(甚至原始的shellscript)做任何事情来检索私有IP地址吗?
答案 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 -%}