在 Ansible 的 Jinja2 模板中获取列表的前 "N" 个元素
Get first "N" elements of a list in Jinja2 template in Ansible
我的大部分位置都有 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()
returns.[=18 的前 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 %}
中?
简单:
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 %}
我的大部分位置都有 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()
returns.[=18 的前 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 %}
中?
简单:
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 %}