gpt4 book ai didi

python - 通过 Jinja2 模板对 IP 进行排序

转载 作者:太空狗 更新时间:2023-10-30 01:36:52 24 4
gpt4 key购买 nike

我在通过 Jinja2 和 Ansible 排序 IP 时遇到问题。这是我的变量和 ansible 模板的 jinja2 代码。

角色/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}}

角色/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') %}

最佳答案

要对 IP 进行数字排序,您可以实现并使用您自己的过滤器插件(顺便说一句,我会对任何其他解决方案感兴趣):

ansible.cfg 中添加 filter_plugins = path/to/filter_plugins

path/to/filter_plugins/ip_filters.py 中:

#!/usr/bin/python

def ip_sort(ip1, ip2):
# Sort on the last number
return int(ip1.split('.')[-1]) - int(ip2.split('.')[-1])

class FilterModule(object):
def filters(self):
return {
'sort_ip_filter': self.sort_ip_filter,
}

def sort_ip_filter(self, ip_list):
return sorted(ip_list, cmp=ip_sort)

然后,在 Ansible 中:

- name: "Sort ips"
debug:
msg: vars='{{ my_ips | sort_ip_filter }}'

我还会使用 ipaddr 过滤器来确保格式正确:

- name: "Sort ips"
debug:
msg: vars='{{ my_ips | ipaddr | sort_ip_filter }}'

关于python - 通过 Jinja2 模板对 IP 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44770065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com