Move list server zones into an attribute of the server model
This commit is contained in:
parent
1588d58d5f
commit
a512d82ffd
|
@ -2,19 +2,50 @@ from django.db import models
|
||||||
|
|
||||||
import dns.query
|
import dns.query
|
||||||
import dns.zone
|
import dns.zone
|
||||||
|
import urllib2
|
||||||
|
from BeautifulSoup import BeautifulStoneSoup as BS
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
TSIG_ALGORITHMS = (('hmac-md5', 'MD5'),('hmac-sha1', 'SHA1'),('hmac-224', 'SHA224'),('hmac-sha256', 'SHA256'),('hmac-sha384', 'SHA384'),('hmac-sha512', 'SHA512'))
|
TSIG_ALGORITHMS = (('hmac-md5', 'MD5'),('hmac-sha1', 'SHA1'),('hmac-224', 'SHA224'),('hmac-sha256', 'SHA256'),('hmac-sha384', 'SHA384'),('hmac-sha512', 'SHA512'))
|
||||||
|
|
||||||
class BindServer(models.Model):
|
class BindServer(models.Model):
|
||||||
hostname = models.CharField(max_length=100)
|
hostname = models.CharField(max_length=100)
|
||||||
|
statistics_port = models.IntegerField()
|
||||||
|
control_port = models.IntegerField()
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.hostname
|
return self.hostname
|
||||||
|
|
||||||
|
def list_zones(self):
|
||||||
|
""" Take a DNS server, and list the DNS zones it provides resolution for. """
|
||||||
|
# I should take the dns_hostname here, get the object from the DB,
|
||||||
|
# and use the status port attribute for the urllib2 query.
|
||||||
|
myreq = urllib2.Request("http://%s:%s" % (self.hostname, self.statistics_port))
|
||||||
|
try:
|
||||||
|
http_request = urllib2.urlopen(myreq)
|
||||||
|
except urllib2.URLError, err_reason: # Error retrieving zone list.
|
||||||
|
return { 'errors' : err_reason, 'error_context' : "Trying to retrieve zone list from %s" % dns_hostname }
|
||||||
|
|
||||||
|
return_array = []
|
||||||
|
xmloutput = http_request.read()
|
||||||
|
mysoup = BS(xmloutput)
|
||||||
|
zones = mysoup.findAll('zone')
|
||||||
|
for current_zone in zones: # Interate over found zones
|
||||||
|
zone_name = current_zone.find('name').contents[0]
|
||||||
|
try: # Is this zone of 'IN' type?
|
||||||
|
in_zone = re.search(r"(.*)\/IN", zone_name).group(1)
|
||||||
|
return_array.append(in_zone)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return return_array
|
||||||
|
|
||||||
|
|
||||||
class Key(models.Model):
|
class Key(models.Model):
|
||||||
name = models.CharField(max_length=50)
|
name = models.CharField(max_length=50)
|
||||||
data = models.CharField(max_length=150)
|
data = models.CharField(max_length=150)
|
||||||
algorithm = models.CharField(max_length=12, choices=TSIG_ALGORITHMS)
|
algorithm = models.CharField(max_length=200, choices=TSIG_ALGORITHMS)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
Loading…
Reference in New Issue