5

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

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

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

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

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

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

4

1 回答 1

6

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

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

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

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

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

于 2017-07-10T01:30:44.123 回答