繁体   English   中英

是否有Ansible / Jinja2子组变量唯一过滤器?

[英]Is there an Ansible/Jinja2 subgroup variables unique filter?

我们正在使用Ansible从Jinja2模板生成一些iptables规则。 主机位于嵌套组中,其子网作为变量存储在清单文件中的子组变量中,如下所示:

[parent_group]
[parent_group:children]
child_group1
    [child_group1]
    FQDN1
    FQDN2
    [child_group1:vars]
    subnet=10.0.0.0/24

我们有许多子组,每个子组都有各自的主机组各自的子网/掩码。 大多数Ansible / Jinja2文档都通过使用for循环在其成员主机上进行迭代来引用组变量,这将导致模板文件中出现重复行。 一次获取parent_group的child_group变量的最佳方法是什么? 有没有办法在Jinja2 for循环中过滤唯一值?

这是一个表达式,用于获取parent_group主机的唯一子网列表:

{{ groups['parent_group'] | map('extract',hostvars,'subnet') | list | unique }}

这里描述这种价值提取技术。

经过对Jinja2表达式的摸索后,我能够提出以下模板,以基于子组变量创建规则,而没有重复项:

{% set subnets = [] %}
{% for host in groups['parent_group'] %}
{% if hostvars[host].subnet not in subnets %}
-A INPUT -s {{hostvars[host].subnet}} -j ACCEPT {{subnets.append(hostvars[host].subnet)}}
{% endif %}
{% endfor %}

这对我来说感觉很笨拙,因此,如果有人知道更好的方法,我将不胜感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM