Ansible:如何调整 map(带提取)过滤器的输出格式

Ansible:如何调整 map(带提取)过滤器的输出格式

我正在尝试提取属于两个组的主机的 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 地址为元素的平面列表,然后取出唯一的项目并用逗号将它们连接起来。

相关内容