(Ansible)如何将一组主机的所有库存变量作为模板/ Jinja2中的列表获取?

时间:2017-07-10 01:23:10

标签: ansible jinja2 ansible-inventory ansible-template

我正在使用这种类型的Ansible库存编写自动化:

[nodes]
<publicIp1>  privateIp=<privateIp1>
<publicIp2>  privateIp=<privateIp2>

我之所以这样做,是因为有时主机拥有与私有IP不同的公共IP(例如,AWS)。

现在在配置任何主机时,我需要获得一个类似于&#34; privateIp1,privateIp2&#34;的csv。在模板模块的jinja2文件中。

首先,我甚至不想参考群组名称&#34; node&#34;,而只是要求&#34;给我列出所有&#39; privateIp&#39;当前主机组的所有成员的库存变量。&#34; &LT;&LT;假设我的主持人只是一个小组的成员。

如果不可能,有没有办法引用群组名称并执行此操作?

1 个答案:

答案 0 :(得分:2)

使用group magic variable。您的用例在文档中有一个确切的示例,只需替换变量名称:

  

groups是清单中所有组(和主机)的列表。这可用于枚举组内的所有主机。 []

     

一个经常使用的习惯用法是走一个小组来查找该组中的所有IP地址

{% for host in groups['app_servers'] %}
  {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}
{% endfor %}

您可以将模板与另一个魔术变量group_names合并,以获取当前主机的组列表,并将其用作外部循环。