我在使用Jinja2和Ansible时遇到了一个IP排序问题。以下是我用于ansible模板的变量和jinja2代码。
roles/DNS/vars/main.yml:
---
DC1:
srv1:
ip: 10.2.110.3
srv2:
ip: 10.2.110.11
srv3:
ip: 10.2.110.19
srv4:
ip: 10.2.110.24
DC2:
srv5:
ip: 172.26.158.3
srv6:
ip: 172.26.158.11
srv7:
ip: 172.26.158.19
srv8:
ip: 172.26.158.24
roles/DNS/templates/db.example.com.j2:
$TTL 86400
@ IN SOA example.com. root.example.com. (
2014051001 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ; minimum
)
; Name server
IN NS dns01.example.com.
; Name server A record
dns01.example.com. IN A 10.2.110.92
; 10.2.110.0/24 A records in this Domain
{% for hostname, dnsattr in DC1.iteritems() %}
{{hostname}}.example.com. IN A {{dnsattr.ip}}
; 172.26.158.0/24 A records in this Domain
{% for hostname, dnsattr in DC2.iteritems() %}
{{hostname}}.example.com. IN A {{dnsattr.ip}}
roles/DNS/tasks/main.yml:
- name: Update DNS zone file db.example.com
template:
src: db.example.com.j2
dest: "/tmp/db.example.com"
with_items: "{{DC1,DC2}}"
- name: Restart DNS Server
service:
name: named
state: restarted
DNS区域文件已正确创建,但IP地址未按数字顺序排序。我尝试使用以下方法,但没有成功:
按主机名字母表顺序排序
{% for hostname, dnsattr in center.iteritems() | sort %}
找不到属性dnsattr
{% for hostname, dnsattr in center.iteritems() | sort(attribute='dnsattr.ip') %}
找不到属性ip。
{% for hostname, dnsattr in center.iteritems() | sort(attribute='ip') %}
main.yml
格式不正确 - 重复ip
属性,db.example.com.j2
使用未定义的center
变量。而您表示“DNS区域文件已正确创建”。真的吗? - Konstantin Suvorovcenter
变量怎么样? - Konstantin Suvorov[{host: 'srv1',ip:'10.2.110.3'}, etc.]
。 - Konstantin Suvorovwith_items
? - Chris Lam