我的清单包含两个组:worker 和 main。 Worker 包含 5 个节点,main 包含 1 个节点。
每个节点都有一个
host_vars
文件包含name
和description
.
A Jinja 模板,循环遍历组中所有节点的
host_vars
。
我想像这样遍历 host_vars:
{% for node in groups["nodes"] %}
Name: {{ node.name }}
Description: {{ node.description }}
{% endfor %}
Name: Nam1
Description: Des1
Name: Nam2
Description: Des2
...
但是我看不出如何优雅地做到这一点。我目前使用的一个简单解决方案是保存一个包含所有
host_vars
信息的 vars 文件。每个目标都知道该 vars 文件,因此我可以从每个目标访问所有节点信息。但是,这不是我猜的最佳解决方案。
简而言之:
{% for node in groups["nodes"] %}
Name: {{ hostvars[node].name }}
Description: {{ hostvars[node].description }}
{% endfor %}
有关
hostvars
的文档,请参阅Ansible特殊变量
更进一步,请注意,如果您的库存如下所示:
---
nodes:
hosts:
server1.mydomain.com:
server2.mydomain.com:
inventory_hostname
将包含全名inventory_hostname_short
将在第一个点之前包含名称(即 server1
表示该列表中的第一个服务器)。您也可以查看上面的链接以了解那些特殊变量。因此,这可能会替换您的自定义
name
变量(在您的主机特定文件中保存一个变量),然后您的模板将类似于:
{% for node in groups["nodes"] %}
Name: {{ hostvars[node].inventory_hostname_short }}
Description: {{ hostvars[node].description }}
{% endfor %}