在Ansible中的Jinja2模板中获取列表的前"N"个元素

11

我的大多数位置都有4个以上的DNS源,但有些位置则较少。每个位置都会获得自己的dns4_ips列表变量,就像这样:

dns4_ips:
  - dns_A
  - dns_B
  - dns_C
  - dns_C

我的resolv.conf模板看起来像这样:

domain example.com
search example.com dom2.example.com dom3.example.com
{% for nameserver in (dns4_ips|shuffle(seed=inventory_hostname)) %}
nameserver {{nameserver}}
{% endfor %}

Jinja的for循环非常好用,但是在我有许多名称服务器的情况下,我宁愿只列出shuffle()返回的前3个。

我想到了这个:

nameserver {{ (dns4_ips|shuffle(seed=inventory_hostname))[0] }}
nameserver {{ (dns4_ips|shuffle(seed=inventory_hostname))[1] }}
nameserver {{ (dns4_ips|shuffle(seed=inventory_hostname))[2] }}

但是有些情况下,我只有一到两个DNS服务器可用,那么它们将产生错误或错误的结果,对吗?

使用for循环是否有一种简洁的方法处理这个问题,还是我需要将三行nameserver代码包装在{% if (dns4_ips|shuffle(seed=inventory_hostname))[1] is defined %}中?

1个回答

19

简单地说:

domain example.com
search example.com dom2.example.com dom3.example.com
{% for nameserver in (dns4_ips|shuffle(seed=inventory_hostname))[:3] %}
nameserver {{nameserver}}
{% endfor %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接