2017-10-03 3 views
0

La plupart de mes emplacements ont 4+ sources DNS, mais quelques-unes en ont moins. Chaque emplacement obtient leur propre variable de liste dns4_ips comme ceci:Obtenir les premiers éléments "N" d'une liste dans le modèle Jinja2 dans Ansible

dns4_ips: 
    - dns_A 
    - dns_B 
    - dns_C 
    - dns_C 

Mon modèle resolv.conf ressemble à ceci:

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

La boucle Jinja for fonctionne très bien, mais dans les cas où j'ai de nombreux serveurs de noms Je préfère ne citer que les 3 premiers que le shuffle() renvoie.

Je pensais à ceci:

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

... mais il y a des cas où je n'ai un ou deux serveurs DNS disponibles afin que ceux produirait soit une ligne incorrecte ou une erreur, non?

Existe-t-il un moyen propre de gérer cela avec la boucle for, ou dois-je envelopper les trois lignes de serveur de noms dans {% if (dns4_ips|shuffle(seed=inventory_hostname))[1] is defined %}?

Répondre

2

simplement:

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 * C'était, merci! –