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’库存变量的列表”。<< 假设我的主人只是一个组的成员。
如果不可能,有没有办法引用组名并执行此操作?
使用group
魔法变量。文档中有一个适用于您的用例的确切示例,只需替换变量名称:
组是清单中所有组(和主机)的列表。这可用于枚举组内的所有主机。[ ]
一个常用的成语是走一组查找该组中的所有 IP 地址
Run Code Online (Sandbox Code Playgroud){% for host in groups['app_servers'] %} {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }} {% endfor %}
您可以将模板与另一个魔术变量结合使用,group_names
以获取当前主机的组列表并将其用作外部循环。