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

use*_*219 4 jinja2 ansible ansible-template ansible-inventory

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

[nodes]
<publicIp1>  privateIp=<privateIp1>
<publicIp2>  privateIp=<privateIp2>
Run Code Online (Sandbox Code Playgroud)

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

现在,在配置任何主机时,我需要在模板模块的 jinja2 文件中获取一个类似于“privateIp1,privateIp2”的 csv。

最好,我什至不想提及组名“节点”,而只是要求“给我当前主机组的所有成员的所有‘privateIp’库存变量的列表”。<< 假设我的主人只是一个组的成员。

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

tec*_*raf 6

使用group魔法变量。文档中有一个适用于您的用例的确切示例,只需替换变量名称:

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

一个常用的成语是走一组查找该组中的所有 IP 地址

{% for host in groups['app_servers'] %}
  {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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