9

我的大多数位置都有 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 %}

Jinjafor循环效果很好,但在我有许多名称服务器的情况下,我宁愿只列出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 循环来处理这个问题,还是我需要将三个名称服务器行包装在 中{% if (dns4_ips|shuffle(seed=inventory_hostname))[1] is defined %}

4

1 回答 1

15

简单地:

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 %}
于 2017-10-03T21:53:49.323 回答