Fix des records A, AAAA et CNAME portant le nom de zones
This commit is contained in:
parent
64ee985f7a
commit
90f9d15ced
1 changed files with 26 additions and 3 deletions
29
main.py
29
main.py
|
@ -73,7 +73,16 @@ template_reverse = ("$TTL 2D\n"
|
||||||
|
|
||||||
|
|
||||||
def write_dns_files(api_client):
|
def write_dns_files(api_client):
|
||||||
for zone in api_client.list("dns/zones"):
|
dns_zones = api_client.list("dns/zones")
|
||||||
|
zone_names = {zone['name'][1:] for zone in dns_zones}
|
||||||
|
records_to_add = {name: {'a': [], 'aaaa': [], 'cname': []} for name in zone_names}
|
||||||
|
|
||||||
|
def add_record(zone, record, type):
|
||||||
|
nonlocal records_to_add
|
||||||
|
records_to_add[zone][type].append(record)
|
||||||
|
return False
|
||||||
|
|
||||||
|
for zone in sorted(dns_zones, key=lambda zone:zone['name'].count('.')):
|
||||||
zone_name = zone['name'][1:]
|
zone_name = zone['name'][1:]
|
||||||
|
|
||||||
now = datetime.datetime.now(datetime.timezone.utc)
|
now = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
@ -146,6 +155,7 @@ def write_dns_files(api_client):
|
||||||
template_a.format(hostname=x['hostname'],
|
template_a.format(hostname=x['hostname'],
|
||||||
ipv4=x['ipv4'])
|
ipv4=x['ipv4'])
|
||||||
for x in zone['a_records']
|
for x in zone['a_records']
|
||||||
|
if (True if x['hostname'] + '.' + zone_name not in zone_names else add_record(x['hostname'] + '.' + zone_name, template_a.format(hostname='@', ipv4=ip['ipv4']), 'a'))
|
||||||
)
|
)
|
||||||
|
|
||||||
aaaa_records = "\n".join(
|
aaaa_records = "\n".join(
|
||||||
|
@ -153,14 +163,25 @@ def write_dns_files(api_client):
|
||||||
ipv6=ip['ipv6'])
|
ipv6=ip['ipv6'])
|
||||||
for x in zone['aaaa_records']
|
for x in zone['aaaa_records']
|
||||||
for ip in x['ipv6']
|
for ip in x['ipv6']
|
||||||
if x['ipv6'] is not None
|
if x['ipv6'] is not None
|
||||||
|
and (True if x['hostname'] + '.' + zone_name not in zone_names else add_record(x['hostname'] + '.' + zone_name, template_aaaa.format(hostname='@', ipv6=ip['ipv6']), 'aaaa'))
|
||||||
)
|
)
|
||||||
|
|
||||||
cname_records = "\n".join(
|
cname_records = "\n".join(
|
||||||
template_cname.format(hostname=x['hostname'],
|
template_cname.format(hostname=x['hostname'],
|
||||||
alias=x['alias'])
|
alias=x['alias'])
|
||||||
for x in zone['cname_records']
|
for x in zone['cname_records']
|
||||||
|
if (True if x['hostname'] + '.' + zone_name not in zone_names else add_record(x['hostname'] + '.' + zone_name, template_cname.format(hostname='@', alias=x['alias']), 'cname'))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if records_to_add[zone_name]['a']:
|
||||||
|
a_records += "\n" + "\n".join(records_to_add[zone_name]['a'])
|
||||||
|
|
||||||
|
if records_to_add[zone_name]['aaaa']:
|
||||||
|
aaaa_records += "\n" + "\n".join(records_to_add[zone_name]['aaaa'])
|
||||||
|
|
||||||
|
if records_to_add[zone_name]['cname']:
|
||||||
|
cname_records += "\n" + "\n".join(records_to_add[zone_name]['cname'])
|
||||||
|
|
||||||
zone_file_content = template_zone.format(soa=soa,
|
zone_file_content = template_zone.format(soa=soa,
|
||||||
originv4=originv4,
|
originv4=originv4,
|
||||||
|
@ -340,4 +361,6 @@ for service in api_client.list("services/regen/"):
|
||||||
write_dns_files(api_client)
|
write_dns_files(api_client)
|
||||||
write_dns_reverse_file(api_client)
|
write_dns_reverse_file(api_client)
|
||||||
api_client.patch(service['api_url'], data={'need_regen': False})
|
api_client.patch(service['api_url'], data={'need_regen': False})
|
||||||
os.system('/usr/sbin/knotc zone-reload >/dev/null 2>&1')
|
ok = os.system('/usr/sbin/knotc zone-reload >/dev/null 2>&1')
|
||||||
|
if not ok:
|
||||||
|
os.system('/usr/sbin/knotc zone-reload')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue