server/mirrormanager/model.py | 31 -------------------
server/mirrormanager/zonecreator.py | 58 +++++++++++++++++++-----------------
2 files changed, 32 insertions(+), 57 deletions(-)
New commits:
commit 254c185232ece5663dd9de570b883373f192b258
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Thu Jan 20 14:26:21 2011 -0600
remove DNS SOA stuff, plan to include resulting per-category zonefile via $INCLUDE
diff --git a/server/mirrormanager/model.py b/server/mirrormanager/model.py
index b6db8ed..cd4817f 100644
--- a/server/mirrormanager/model.py
+++ b/server/mirrormanager/model.py
@@ -722,13 +722,10 @@ class Category(SQLObject):
GeoDNSDomain = UnicodeCol(default=None)
directories = RelatedJoin('Directory', orderBy='name') # all the
directories that are part of this category
hostCategories = MultipleJoin('HostCategory')
- categoryDNS = SingleJoin('CategoryDNS')
def destroySelf(self):
for hc in self.hostCategories:
hc.destroySelf()
- if self.categoryDNS is not None:
- self.categoryDNS.destroySelf()
SQLObject.destroySelf(self)
def directories_newer_than(self, since):
@@ -747,34 +744,6 @@ class Category(SQLObject):
return c
return None
-class CategoryDNS(SQLObject):
- class sqlmeta:
- cacheValues = False
- category = ForeignKey('Category')
- soa_master = UnicodeCol()
- soa_responsible = UnicodeCol()
- soa_serial = BigIntCol()
- soa_refresh = IntCol(default=(60*20))
- soa_retry = IntCol(default=(60*10))
- soa_expire = IntCol(default=864000)
- soa_minimum = IntCol(default=600)
- cname_ttl = IntCol(default=3600)
- nss = MultipleJoin('CategoryDnsNs')
-
-
- def destroySelf(self):
- """Cascade the delete operation"""
- for mx in self.mxs:
- mx.destroySelf()
- for ns in self.nss:
- ns.destroySelf()
-
-
-class CategoryDnsNS(SQLObject):
- class sqlmeta:
- cacheValues = False
- category = ForeignKey('CategoryDNS')
- ns = UnicodeCol()
def rsyncFilter(categories_requested, since):
"""
diff --git a/server/mirrormanager/zonecreator.py b/server/mirrormanager/zonecreator.py
index 4372c83..3abbe5c 100644
--- a/server/mirrormanager/zonecreator.py
+++ b/server/mirrormanager/zonecreator.py
@@ -1,53 +1,59 @@
import os
import re
import errno
+import IPy
import dns.zone
import dns.name
-import dns.rdtypes.ANY.CNAME
+import dns.rdtypes.IN.A, dns.rdtypes.IN.AAAA
from dns.exception import DNSException
from dns.rdataclass import *
from dns.rdatatype import *
from mirrormanager.model import Category, HostCategory
+from mirrormanager.mirrorlist import name_to_ips
-default_ttl = 3600
+default_ttl = 600
default_output_dir = '/var/lib/mirrormanager/dns'
def domainTemplateToName(domain, country):
return re.sub(u'CC', country, domain)
-def generateZoneFiles(directory):
- zones = {}
-
+def generateZoneFile(directory):
for c in Category.select():
+ z = dns.zone.Zone(dns.name.from_text(''))
if c.GeoDNSDomain is None: continue
hosts = [ hc.host for hc in c.hostCategories if hc.host.dnsCountryHost ]
for h in hosts:
- if h.country in zones:
- z = zones[h.country]['zone']
- else:
- domainname = domainTemplateToName(c.GeoDNSDomain, h.country)
- n = dns.name.from_text(domainname)
- z = dns.zone.Zone(n)
- zones[h.country] = {}
- zones[h.country]['zone'] = z
- zones[h.country]['name'] = domainname
-
- rdataset = z.find_rdataset('@', rdtype=CNAME, create=True)
- n = dns.name.from_text(h.name)
- rdata = dns.rdtypes.ANY.CNAME.CNAME(IN, CNAME, n)
- rdataset.add(rdata, ttl=default_ttl)
-
- for country, z in zones.iteritems():
- z['zone'].to_file(os.path.join(directory, u'zone-' +
z['name']))
-
-def writeZoneFiles():
- output_dir = default_output_dir
+ domainname = domainTemplateToName(c.GeoDNSDomain, h.country)
+ n = dns.name.from_text(domainname)
+
+ try:
+ ips = [IPy.IP(h.name)]
+ except ValueError:
+ ips = name_to_ips(h.name)
+ except:
+ continue
+
+ for ip in ips:
+ if ip.version() == 4:
+ rdatasetA = z.find_rdataset(n, rdtype=A, create=True)
+ rdata = dns.rdtypes.IN.A.A(IN, A, ip.strNormal())
+ rdatasetA.add(rdata, ttl=default_ttl)
+ elif ip.version() == 6:
+ rdatasetAAAA = z.find_rdataset(n, rdtype=AAAA, create=True)
+ rdata = dns.rdtypes.IN.AAAA.AAAA(IN, AAAA, ip.strNormal())
+ rdatasetAAAA.add(rdata, ttl=default_ttl)
+ else:
+ continue
+
+ z.to_file(os.path.join(directory, u'zone-' + c.GeoDNSDomain))
+
+def writeZoneFiles(output_dir = default_output_dir):
try:
os.makedirs(output_dir)
except OSError, e:
if e.errno != errno.EEXIST:
raise
- generateZoneFiles(output_dir)
+ generateZoneFile(output_dir)
__all__ = ['writeZoneFiles']
Show replies by date