我正在尝试提取属于两个组的主机的 IP 地址并将它们用于 .xml 配置文件中。
我在这里面临的问题是 Jinja 模板中使用的表达式生成的输出。我想要实现的是像这样的输出,10.3.5.1,10.3.5.2,10.3.5.2
但我得到的却是这样的[u'10.3.5.1],[u'10.3.5.2],[u'10.3.5.2]
。
这是 jinja 模板中使用的表达式:
<member1>{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | unique | join(',') }}</member1>
我也尝试了一些其他过滤器,但未能获得预期的结果。
我应该使用什么过滤器?(我找不到合适的过滤器)
答案1
ansible_ip_addresses
是一个列表,因此您有一个带有嵌套列表(带有 IP 地址)的列表(主机列表)。
您可能希望在应用之前将其弄平unique
,然后join
:
{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | sum(start=[]) | unique | join(',') }}
这将创建一个以单个 IP 地址为元素的平面列表,然后取出唯一的项目并用逗号将它们连接起来。