循环遍历 jinja 中 ansible 主机组中主机的 host_vars

问题描述 投票:0回答:1

设置

库存

我的清单包含两个组:worker 和 main。 Worker 包含 5 个节点,main 包含 1 个节点。

Host_Vars

每个节点都有一个

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 文件,因此我可以从每个目标访问所有节点信息。但是,这不是我猜的最佳解决方案。

ansible jinja2
1个回答
2
投票

简而言之:

{% for node in groups["nodes"] %}
Name: {{ hostvars[node].name }}
Description: {{ hostvars[node].description }}
{% endfor %}

有关

hostvars
的文档,请参阅Ansible特殊变量

更进一步,请注意,如果您的库存如下所示:

---
nodes:
  hosts:  
    server1.mydomain.com:
    server2.mydomain.com:
  1. inventory_hostname
    将包含全名
  2. inventory_hostname_short
    将在第一个点之前包含名称(即
    server1
    表示该列表中的第一个服务器)。

您也可以查看上面的链接以了解那些特殊变量。因此,这可能会替换您的自定义

name
变量(在您的主机特定文件中保存一个变量),然后您的模板将类似于:

{% for node in groups["nodes"] %}
Name: {{ hostvars[node].inventory_hostname_short }}
Description: {{ hostvars[node].description }}
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.