Branch 'v1.4' - server/mirrormanager
by Matt Domsch
server/mirrormanager/controllers.py | 15 +++++++++++++++
server/mirrormanager/templates/adminview.kid | 11 +++++++++++
server/mirrormanager/zonecreator.py | 7 ++++++-
3 files changed, 32 insertions(+), 1 deletion(-)
New commits:
commit bbeacdde4972bdfa1a8079acf052a53a73449a0e
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Fri Jan 21 14:04:17 2011 -0600
report number of sites and hosts in adminview
diff --git a/server/mirrormanager/controllers.py b/server/mirrormanager/controllers.py
index b636b52..8f05356 100644
--- a/server/mirrormanager/controllers.py
+++ b/server/mirrormanager/controllers.py
@@ -1245,6 +1245,15 @@ class Root(controllers.RootController):
@expose(template="mirrormanager.templates.adminview")
@identity.require(identity.in_group(admin_group))
def adminview(self):
+ num_sites = Site.select().count()
+ num_private_sites = 0
+ for s in Site.select():
+ if site.private: num_private_sites = num_private_sites + 1
+ num_hosts = Host.select().count()
+ num_private_hosts = 0
+ for h in Host.select():
+ if h.is_private(): num_private_hosts = num_private_hosts + 1
+
return {"sites":Site.select(orderBy='name'),
"arches":Arch.select(),
"products":Product.select(),
@@ -1257,6 +1266,12 @@ class Root(controllers.RootController):
"repository_redirects":RepositoryRedirect.select(orderBy='fromRepo'),
"country_continent_redirects":CountryContinentRedirect.select(orderBy='country'),
"locations":Location.select(orderBy='name'),
+ "num_sites": num_sites,
+ "num_private_sites":num_private_sites,
+ "num_public_sites":(num_sites-num_private_sites)
+ "num_hosts":num_hosts,
+ "num_private_hosts":num_private_hosts,
+ "num_public_hosts":(num_hosts - num_private_hosts)
}
@expose(template="mirrormanager.templates.rsync_acl", format="plain", content_type="text/plain")
diff --git a/server/mirrormanager/templates/adminview.kid b/server/mirrormanager/templates/adminview.kid
index f75e054..089295a 100644
--- a/server/mirrormanager/templates/adminview.kid
+++ b/server/mirrormanager/templates/adminview.kid
@@ -16,6 +16,17 @@ Nothing to see here, move along.
<div id="adminview" py:if="admin_group in tg.identity.groups">
+<h3>Statistics</h3>
+<UL>
+ <LI>Sites: <span py:replace="num_sites"/> total
+ (<span py:replace="num_public_sites"/> public /
+ <span py:replace="num_private_sites"/> private) </LI>
+ <LI>Hosts: <span py:replace="num_hosts"/> total
+ (<span py:replace="num_public_hosts"/> public /
+ <span py:replace="num_private_hosts"/> private) </LI>
+</UL>
+
+
<div id="categories">
<h3>Categories <a href="${tg.url('/category/new')}">[Add]</a></h3>
<ul>
diff --git a/server/mirrormanager/zonecreator.py b/server/mirrormanager/zonecreator.py
index 3abbe5c..96c2940 100644
--- a/server/mirrormanager/zonecreator.py
+++ b/server/mirrormanager/zonecreator.py
@@ -56,4 +56,9 @@ def writeZoneFiles(output_dir = default_output_dir):
generateZoneFile(output_dir)
-__all__ = ['writeZoneFiles']
+def zoneFilesIdentical(file1, file2):
+ z1 = dns.zone.from_file(file1)
+ z2 = dns.zone.from_file(file2)
+ return z1 == z2
+
+__all__ = ['writeZoneFiles', 'zoneFilesIdentical']
13 years, 4 months
Branch 'v1.4' - server/mirrormanager
by Matt Domsch
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']
13 years, 4 months
Branch 'v1.4' - mirrorlist-server/mirrorlist_server.py
by Matt Domsch
mirrorlist-server/mirrorlist_server.py | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
New commits:
commit b13f62435c952a6eb04ea64dfd59afd6d8172602
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Wed Jan 19 16:55:53 2011 -0600
fix previous commit
diff --git a/mirrorlist-server/mirrorlist_server.py b/mirrorlist-server/mirrorlist_server.py
index 71b3f7e..440fb5b 100755
--- a/mirrorlist-server/mirrorlist_server.py
+++ b/mirrorlist-server/mirrorlist_server.py
@@ -64,7 +64,7 @@ hcurl_cache = {}
asn_host_cache = {}
internet2_tree = radix.Radix()
global_tree = radix.Radix()
-netblocks_tree = radix.Radix()
+host_netblocks_tree = radix.Radix()
location_cache = {}
def lookup_ip_asn(tree, ip):
@@ -192,7 +192,7 @@ def client_netblocks(ip):
# fast lookup in the tree; if present, find all the netblocks in the list
# rather than just the "best" one
- node = host_netblock_tree.search_best(str(ip))
+ node = host_netblock_tree.search_best(ip.strNormal()))
if node is not None:
for k,v in host_netblock_cache.iteritems():
if clientIP in k:
@@ -609,7 +609,7 @@ def do_mirrorlist(kwargs):
return d
-def setup_netblocks_tree():
+def setup_host_netblocks_tree():
tree = radix.Radix()
for k, v in host_netblock_cache.iteritems():
tree.add(k.strNormal())
@@ -692,15 +692,15 @@ def read_caches():
setup_continents()
global internet2_tree
global global_tree
- global netblocks_tree
+ global host_netblocks_tree
del internet2_tree
del global_tree
- del netblocks_tree
+ del host_netblocks_tree
internet2_tree = setup_netblocks(internet2_netblocks_file)
global_tree = setup_netblocks(global_netblocks_file)
- netblocks_tree = setup_netblocks_tree()
+ host_netblocks_tree = setup_host_netblocks_tree()
def errordoc(metalink, message):
if metalink:
13 years, 4 months
Branch 'v1.4' - mirrorlist-server/mirrorlist_server.py
by Matt Domsch
mirrorlist-server/mirrorlist_server.py | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
New commits:
commit 33bc667e2e9ca6ea9b692824ec7f3f8e421fc044
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Wed Jan 19 16:43:30 2011 -0600
mirrorlist_server: speed up host netblock lookups using radix trees for the common case of no match
diff --git a/mirrorlist-server/mirrorlist_server.py b/mirrorlist-server/mirrorlist_server.py
index 4340d7e..71b3f7e 100755
--- a/mirrorlist-server/mirrorlist_server.py
+++ b/mirrorlist-server/mirrorlist_server.py
@@ -64,6 +64,7 @@ hcurl_cache = {}
asn_host_cache = {}
internet2_tree = radix.Radix()
global_tree = radix.Radix()
+netblocks_tree = radix.Radix()
location_cache = {}
def lookup_ip_asn(tree, ip):
@@ -188,9 +189,14 @@ def client_netblocks(ip):
clientIP = IP(ip)
except:
return result
- for k,v in host_netblock_cache.iteritems():
- if clientIP in k:
- result.extend(v)
+
+ # fast lookup in the tree; if present, find all the netblocks in the list
+ # rather than just the "best" one
+ node = host_netblock_tree.search_best(str(ip))
+ if node is not None:
+ for k,v in host_netblock_cache.iteritems():
+ if clientIP in k:
+ result.extend(v)
return result
def trim_by_client_country(s, clientCountry):
@@ -603,6 +609,12 @@ def do_mirrorlist(kwargs):
return d
+def setup_netblocks_tree():
+ tree = radix.Radix()
+ for k, v in host_netblock_cache.iteritems():
+ tree.add(k.strNormal())
+ return tree
+
def setup_netblocks(netblocks_file):
tree = radix.Radix()
@@ -680,12 +692,15 @@ def read_caches():
setup_continents()
global internet2_tree
global global_tree
+ global netblocks_tree
del internet2_tree
del global_tree
+ del netblocks_tree
internet2_tree = setup_netblocks(internet2_netblocks_file)
global_tree = setup_netblocks(global_netblocks_file)
+ netblocks_tree = setup_netblocks_tree()
def errordoc(metalink, message):
if metalink:
13 years, 4 months
Branch 'v1.4' - server/mirrormanager
by Matt Domsch
server/mirrormanager/model.py | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
New commits:
commit c5f9e8312c1fd444db0a1131e4c0a19a5b6c7076
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Tue Jan 18 11:00:20 2011 -0600
drop CategoryDnsMX as unneeded, set default SOA values
diff --git a/server/mirrormanager/model.py b/server/mirrormanager/model.py
index d57c32d..b6db8ed 100644
--- a/server/mirrormanager/model.py
+++ b/server/mirrormanager/model.py
@@ -752,10 +752,13 @@ class CategoryDNS(SQLObject):
cacheValues = False
category = ForeignKey('Category')
soa_master = UnicodeCol()
- soa_hostmaster = UnicodeCol()
+ soa_responsible = UnicodeCol()
soa_serial = BigIntCol()
- cname_ttl = IntCol()
- mxs = MultipleJoin('CategoryDnsMx')
+ 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')
@@ -766,13 +769,6 @@ class CategoryDNS(SQLObject):
for ns in self.nss:
ns.destroySelf()
-class CategoryDnsMx(SQLObject):
- class sqlmeta:
- cacheValues = False
- category = ForeignKey('CategoryDNS')
- mx = UnicodeCol()
- priority = IntCol()
-
class CategoryDnsNS(SQLObject):
class sqlmeta:
13 years, 4 months
Branch 'v1.4' - 2 commits - server/mirrormanager
by Matt Domsch
server/mirrormanager/model.py | 53 +++++++++++++++++++++++++++++++++++-------
1 file changed, 45 insertions(+), 8 deletions(-)
New commits:
commit 2baf77d5e354ce178510db52640c66709a07a231
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Tue Jan 18 10:33:04 2011 -0600
store DNS metadata in the database too
diff --git a/server/mirrormanager/model.py b/server/mirrormanager/model.py
index e18049e..d57c32d 100644
--- a/server/mirrormanager/model.py
+++ b/server/mirrormanager/model.py
@@ -722,10 +722,13 @@ 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):
@@ -744,6 +747,39 @@ class Category(SQLObject):
return c
return None
+class CategoryDNS(SQLObject):
+ class sqlmeta:
+ cacheValues = False
+ category = ForeignKey('Category')
+ soa_master = UnicodeCol()
+ soa_hostmaster = UnicodeCol()
+ soa_serial = BigIntCol()
+ cname_ttl = IntCol()
+ mxs = MultipleJoin('CategoryDnsMx')
+ 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 CategoryDnsMx(SQLObject):
+ class sqlmeta:
+ cacheValues = False
+ category = ForeignKey('CategoryDNS')
+ mx = UnicodeCol()
+ priority = IntCol()
+
+
+class CategoryDnsNS(SQLObject):
+ class sqlmeta:
+ cacheValues = False
+ category = ForeignKey('CategoryDNS')
+ ns = UnicodeCol()
+
def rsyncFilter(categories_requested, since):
"""
@categories_requested: a list of category names
commit 7432771232e1efe0deca92e9622bf585c6533ed2
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Tue Jan 18 10:19:20 2011 -0600
move lookupCategory into Category as staticmethod
diff --git a/server/mirrormanager/model.py b/server/mirrormanager/model.py
index 4783ebc..e18049e 100644
--- a/server/mirrormanager/model.py
+++ b/server/mirrormanager/model.py
@@ -735,13 +735,14 @@ class Category(SQLObject):
result.append(d.name)
return result
-def lookupCategory(s):
- s = s.lower()
- for c in Category.select():
- cname = c.name.lower()
- if cname == s:
- return c
- return None
+ @staticmethod
+ def lookupCategory(s):
+ s = s.lower()
+ for c in Category.select():
+ cname = c.name.lower()
+ if cname == s:
+ return c
+ return None
def rsyncFilter(categories_requested, since):
"""
@@ -778,7 +779,7 @@ def rsyncFilter(categories_requested, since):
return []
categoryList = []
for i in xrange(len(categories_requested)):
- c = lookupCategory(categories_requested[i])
+ c = Category.lookupCategory(categories_requested[i])
if c is None:
continue
categoryList.append(c.id)
13 years, 4 months
Branch 'v1.4' - 2 commits - server/mirrormanager
by Matt Domsch
server/mirrormanager/controllers.py | 7 ++++---
server/mirrormanager/zonecreator.py | 11 +++++++----
2 files changed, 11 insertions(+), 7 deletions(-)
New commits:
commit a1a5e009fec3d35e656bbe9c8844f3daeb2cd3c3
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Tue Jan 18 10:17:57 2011 -0600
fix CategoryController.create
diff --git a/server/mirrormanager/controllers.py b/server/mirrormanager/controllers.py
index b387a84..b636b52 100644
--- a/server/mirrormanager/controllers.py
+++ b/server/mirrormanager/controllers.py
@@ -880,11 +880,12 @@ class CategoryController(SimpleDbObjectController):
@validate(form=category_form)
@error_handler(SimpleDbObjectController.new)
def create(self, **kwargs):
- topdirPath.strip('/')
+ topdir = kwargs['topdirPath']
+ topdir.strip('/')
try:
- d = Directory.byName(kwargs['topdirPath'])
+ d = Directory.byName(topdir)
except SQLObjectNotFound:
- d = Directory(kwargs['topdirPath'])
+ d = Directory(name=topdir)
del kwargs['topdirPath']
kwargs['topdir'] = d
commit 184c7d2a7649de3f71a10aef5b2dc750058ba3a1
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Tue Jan 18 10:17:19 2011 -0600
fix zonecreator to not crash
diff --git a/server/mirrormanager/zonecreator.py b/server/mirrormanager/zonecreator.py
index 3cf195d..4372c83 100644
--- a/server/mirrormanager/zonecreator.py
+++ b/server/mirrormanager/zonecreator.py
@@ -1,6 +1,8 @@
import os
import re
+import errno
import dns.zone
+import dns.name
import dns.rdtypes.ANY.CNAME
from dns.exception import DNSException
from dns.rdataclass import *
@@ -18,20 +20,21 @@ def generateZoneFiles(directory):
for c in Category.select():
if c.GeoDNSDomain is None: continue
- hcs = HostCategory.selectBy(category=c)
- hosts = [ hc.host for hc in hcs if hc.host.dnsCountryHost ]
+ 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)
- z = dns.zone.Zone(domainname)
+ 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)
- rdata = dns.rdtypes.ANY.CNAME.CNAME(IN, CNAME, h.name)
+ 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():
13 years, 4 months
Branch 'v1.4' - 2 commits - server/mirrormanager
by Matt Domsch
server/mirrormanager/dns.py | 49 ------------------------------------
server/mirrormanager/zonecreator.py | 3 +-
2 files changed, 2 insertions(+), 50 deletions(-)
New commits:
commit 43d84188a66a706612e6458672466eb235b5f90c
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Mon Jan 17 23:32:27 2011 -0600
finish deleting dns.py
diff --git a/server/mirrormanager/dns.py b/server/mirrormanager/dns.py
deleted file mode 100644
index 239e18d..0000000
--- a/server/mirrormanager/dns.py
+++ /dev/null
@@ -1,49 +0,0 @@
-import os
-import re
-from mirrormanager.model import Category, HostCategory
-import dns.zone
-from dns.exception import DNSException
-from dns.rdataclass import *
-from dns.rdatatype import *
-
-default_ttl = 3600
-default_output_dir = '/var/lib/mirrormanager/dns'
-
-def domainTemplateToName(domain, country):
- return re.sub(u'CC', country, domain)
-
-def generateZoneFiles(directory):
- zones = {}
-
- for c in Category.select():
- if c.GeoDNSDomain is None: continue
- hcs = HostCategory.selectBy(category=c)
- hosts = [ hc.host for hc in hcs 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)
- z = dns.zone.Zone(domainname)
- zones[h.country] = {}
- zones[h.country]['zone'] = z
- zones[h.country]['name'] = domainname
-
- rdataset = z.find_rdataset('@', rdtype=CNAME, create=True)
- rdata = dns.rdtypes.ANY.CNAME.CNAME(IN, CNAME, h.name)
- 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
- try:
- os.makedirs(output_dir)
- except OSError, e:
- if e.errno != errno.EEXIST:
- raise
- generateZoneFiles(output_dir)
-
-
-__all__ = ['writeZoneFiles']
commit 72754b1a8f1a840bfbd022e05d03791aba0b6962
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Mon Jan 17 23:06:19 2011 -0600
fix import errors in zonecreator
diff --git a/server/mirrormanager/zonecreator.py b/server/mirrormanager/zonecreator.py
index 239e18d..3cf195d 100644
--- a/server/mirrormanager/zonecreator.py
+++ b/server/mirrormanager/zonecreator.py
@@ -1,10 +1,11 @@
import os
import re
-from mirrormanager.model import Category, HostCategory
import dns.zone
+import dns.rdtypes.ANY.CNAME
from dns.exception import DNSException
from dns.rdataclass import *
from dns.rdatatype import *
+from mirrormanager.model import Category, HostCategory
default_ttl = 3600
default_output_dir = '/var/lib/mirrormanager/dns'
13 years, 4 months
Branch 'v1.4' - server/mirrormanager server/refresh_mirrorlist_cache
by Matt Domsch
server/mirrormanager/zonecreator.py | 49 ++++++++++++++++++++++++++++++++++++
server/refresh_mirrorlist_cache | 4 +-
2 files changed, 51 insertions(+), 2 deletions(-)
New commits:
commit 499adb45c22a77b463d7fd448c874f280a2e8e55
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Mon Jan 17 22:34:15 2011 -0600
rename dns.py to avoid conflicts with system libs
diff --git a/server/mirrormanager/zonecreator.py b/server/mirrormanager/zonecreator.py
new file mode 100644
index 0000000..239e18d
--- /dev/null
+++ b/server/mirrormanager/zonecreator.py
@@ -0,0 +1,49 @@
+import os
+import re
+from mirrormanager.model import Category, HostCategory
+import dns.zone
+from dns.exception import DNSException
+from dns.rdataclass import *
+from dns.rdatatype import *
+
+default_ttl = 3600
+default_output_dir = '/var/lib/mirrormanager/dns'
+
+def domainTemplateToName(domain, country):
+ return re.sub(u'CC', country, domain)
+
+def generateZoneFiles(directory):
+ zones = {}
+
+ for c in Category.select():
+ if c.GeoDNSDomain is None: continue
+ hcs = HostCategory.selectBy(category=c)
+ hosts = [ hc.host for hc in hcs 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)
+ z = dns.zone.Zone(domainname)
+ zones[h.country] = {}
+ zones[h.country]['zone'] = z
+ zones[h.country]['name'] = domainname
+
+ rdataset = z.find_rdataset('@', rdtype=CNAME, create=True)
+ rdata = dns.rdtypes.ANY.CNAME.CNAME(IN, CNAME, h.name)
+ 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
+ try:
+ os.makedirs(output_dir)
+ except OSError, e:
+ if e.errno != errno.EEXIST:
+ raise
+ generateZoneFiles(output_dir)
+
+
+__all__ = ['writeZoneFiles']
diff --git a/server/refresh_mirrorlist_cache b/server/refresh_mirrorlist_cache
index 884d69a..06cb5b2 100755
--- a/server/refresh_mirrorlist_cache
+++ b/server/refresh_mirrorlist_cache
@@ -9,7 +9,7 @@ import turbogears
from mirrormanager.model import *
from mirrormanager.mirrorlist import populate_all_caches, dump_caches
from optparse import OptionParser
-import mirrormanager.dns
+import mirrormanager.zonecreator
from turbogears.database import PackageHub
hub = __connection__ = None
@@ -17,7 +17,7 @@ hub = __connection__ = None
def doit():
populate_all_caches()
dump_caches()
- mirrormanager.dns.writeZoneFiles()
+ mirrormanager.zonecreator.writeZoneFiles()
def main():
parser = OptionParser(usage=sys.argv[0] + " [options]")
13 years, 4 months
Branch 'v1.4' - 2 commits - server/mirrormanager
by Matt Domsch
server/mirrormanager/model.py | 1 +
server/mirrormanager/templates/adminview.kid | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
New commits:
commit dfe430e115a2180418d1f4f770edff01d167e203
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Mon Jan 17 22:07:03 2011 -0600
fix adminview Categories [Add] button
diff --git a/server/mirrormanager/templates/adminview.kid b/server/mirrormanager/templates/adminview.kid
index 4f5a506..f75e054 100644
--- a/server/mirrormanager/templates/adminview.kid
+++ b/server/mirrormanager/templates/adminview.kid
@@ -17,7 +17,7 @@ Nothing to see here, move along.
<div id="adminview" py:if="admin_group in tg.identity.groups">
<div id="categories">
-<h3>Categories <a href="${tg.url('/category/new')">[Add]</a></h3>
+<h3>Categories <a href="${tg.url('/category/new')}">[Add]</a></h3>
<ul>
<li py:for="c in categories">
<span py:replace="c.name">Category Name</span>
commit 3911127fd81c1208af4fb5ff0b40753735d01b5d
Author: Matt Domsch <Matt_Domsch(a)dell.com>
Date: Mon Jan 17 22:06:42 2011 -0600
model: use @staticmethod for selectFieldOptions()
diff --git a/server/mirrormanager/model.py b/server/mirrormanager/model.py
index 1fe2b97..4783ebc 100644
--- a/server/mirrormanager/model.py
+++ b/server/mirrormanager/model.py
@@ -629,6 +629,7 @@ class Product(SQLObject):
c.destroySelf()
SQLObject.destroySelf(self)
+ @staticmethod
def selectFieldOptions():
return [(p.id, p.name) for p in Product.select(orderBy='name')]
13 years, 4 months