先获得" N" Ansible

时间:2017-10-03 21:37:10

标签: ansible jinja2 ansible-template

我的大多数地点都有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循环是否有一种干净的方法来处理这个问题,还是需要在{% if (dns4_ips|shuffle(seed=inventory_hostname))[1] is defined %}中包含三个名称服务器行?

1 个答案:

答案 0 :(得分:5)

简单地:

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 %}