2017-10-03 3 views
0

Die meisten meiner Standorte haben 4+ DNS-Quellen, aber ein paar haben weniger. Jeder Standort bekommt ihre eigene dns4_ips Listenvariable wie folgt aus:Erste "N" Elemente einer Liste in Jinja2 Vorlage in Ansible

dns4_ips: 
    - dns_A 
    - dns_B 
    - dns_C 
    - dns_C 

Meine resolv.conf Template wie folgt aussieht:

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

Die Jinja for Schleife funktioniert gut, aber in den Fällen, in denen ich zahlreiche Nameserver Ich würde eher nur die ersten 3 auflisten, die die shuffle() zurückgibt.

Ich dachte an diese:

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

... aber es gibt einige Fälle, in denen ich zur Verfügung ein oder zwei DNS-Server haben nur so entweder eine falsche Zeile oder einen Fehler diejenigen erzeugen würde, nicht wahr?

Gibt es einen sauberen Weg, um dies mit der for-Schleife zu behandeln, oder muss ich die drei Nameserver-Zeilen in {% if (dns4_ips|shuffle(seed=inventory_hostname))[1] is defined %} wickeln?

Antwort

2

einfach:

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

* Doh * Das war es, Dank! –

Verwandte Themen