added ipv6 support in models
This commit is contained in:
1 parent
080acaaec3
commit
ef6e8e9cf6
3 files changed
+54
-7
No files matched your search
+9
-5
@@ -1,13 +1,18 @@
|
||||
from mdb.models import *
|
||||
from django.contrib import admin
|
||||
|
||||
class Ip6AddressInline(admin.TabularInline):
|
||||
model = Ip6Address
|
||||
extra = 0
|
||||
|
||||
class InterfaceInline(admin.TabularInline):
|
||||
inlines = [Ip6AddressInline]
|
||||
model = Interface
|
||||
extra = 0
|
||||
|
||||
class HostAdmin(admin.ModelAdmin):
|
||||
inlines = [InterfaceInline]
|
||||
list_display = ['hostname', 'brand', 'owner', 'host_type', 'location', 'serial_number', 'in_domain', 'created_date']
|
||||
list_display = ['hostname', 'brand', 'owner', 'host_type', 'location', 'serial_number', 'in_domain', 'created_date', 'ipv6_enabled']
|
||||
readonly_fields = ['kerberos_principal_name', 'kerberos_principal_created_date',
|
||||
'kerberos_principal_created']
|
||||
fieldsets = (
|
||||
@@ -20,13 +25,10 @@ class HostAdmin(admin.ModelAdmin):
|
||||
}),
|
||||
('Domain and Kerberos Information', {
|
||||
'description' : 'If this host is a member of the LDAP domain, you need to tick the request kerberos principal checkbox. A principal will then be created for the host.',
|
||||
# 'classes' : [ 'collapse' ],
|
||||
'classes' : [ 'collapse' ],
|
||||
'fields' : ( 'request_kerberos_principal', 'kerberos_principal_created',
|
||||
('kerberos_principal_name', 'kerberos_principal_created_date'))
|
||||
}),
|
||||
# ('Operating System and Architecture', {
|
||||
# 'fields' : ('virtual' )
|
||||
# })
|
||||
)
|
||||
|
||||
class Ip4AddressInline(admin.TabularInline):
|
||||
@@ -69,6 +71,8 @@ class HostTypeAdmin(admin.ModelAdmin):
|
||||
admin.site.register(Domain, DomainAdmin)
|
||||
admin.site.register(Host, HostAdmin)
|
||||
admin.site.register(Ip4Subnet, SubnetAdmin)
|
||||
admin.site.register(Ip6Subnet)
|
||||
admin.site.register(Ip6Address)
|
||||
admin.site.register(Nameserver)
|
||||
admin.site.register(MailExchange)
|
||||
admin.site.register(OperatingSystem)
|
||||
|
||||
+44
-1
@@ -194,6 +194,27 @@ class DhcpConfig(models.Model):
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
class Ip6Subnet(models.Model):
|
||||
name = models.CharField(max_length=255)
|
||||
network = models.CharField(max_length=255)
|
||||
netmask = models.IntegerField(default=64)
|
||||
created_date = models.DateTimeField(auto_now_add=True)
|
||||
domain_name = models.CharField(max_length=255, editable=False)
|
||||
domain_nameservers = models.ManyToManyField(Nameserver)
|
||||
domain_soa = models.CharField(max_length=255)
|
||||
domain_ttl = models.IntegerField(default=60)
|
||||
domain_serial = models.IntegerField(default=1)
|
||||
domain_active_serial = models.IntegerField(default=0, editable=False)
|
||||
domain_refresh = models.IntegerField(default=28800)
|
||||
domain_retry = models.IntegerField(default=7200)
|
||||
domain_expire = models.IntegerField(default=604800)
|
||||
domain_minimum_ttl = models.IntegerField(default=86400)
|
||||
domain_admin = models.EmailField()
|
||||
domain_filename = models.CharField(max_length=256)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.network + " (" + self.name + ")"
|
||||
|
||||
class Ip4Subnet(models.Model):
|
||||
|
||||
name = models.CharField(max_length=256)
|
||||
@@ -316,6 +337,7 @@ class Ip4Address(models.Model):
|
||||
|
||||
assigned_to_host.short_description = "Assigned to Host"
|
||||
|
||||
|
||||
class HostType(models.Model):
|
||||
host_type = models.CharField(max_length=64)
|
||||
description = models.CharField(max_length=1024)
|
||||
@@ -370,6 +392,12 @@ class Host(models.Model):
|
||||
|
||||
in_domain.short_description = "in domains"
|
||||
|
||||
def ipv6_enabled(self):
|
||||
for interface in self.interface_set.all():
|
||||
if interface.ipv6_enabled():
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_ip_addresses(self):
|
||||
addresses = []
|
||||
for interface in self.interface_set.all():
|
||||
@@ -395,7 +423,22 @@ class Interface(models.Model):
|
||||
domain = models.ForeignKey(Domain)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.macaddr
|
||||
return "%s (%s on %s)" % (self.macaddr, self.name, self.host.hostname)
|
||||
|
||||
def ipv6_enabled(self):
|
||||
return self.ip6address_set.count() > 0;
|
||||
|
||||
class Ip6Address(models.Model):
|
||||
subnet = models.ForeignKey(Ip6Subnet)
|
||||
address = models.CharField(max_length=64)
|
||||
interface = models.ForeignKey(Interface)
|
||||
|
||||
def full_address(self):
|
||||
return self.subnet.network + self.address
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s (%s on %s)" % (self.full_address(), self.interface.name, self.interface.host.hostname)
|
||||
|
||||
|
||||
@receiver(post_save, sender=Ip4Subnet)
|
||||
def create_ips_for_subnet(sender, instance, created, **kwargs):
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ DATABASES = {
|
||||
'NAME': 'dns_mdb', # Or path to database file if using sqlite3.
|
||||
'USER': 'dns_mdb', # Not used with sqlite3.
|
||||
'PASSWORD': 'dns_mdb', # Not used with sqlite3.
|
||||
'HOST': 'snes', # Set to empty string for localhost. Not used with sqlite3.
|
||||
'HOST': 'hel', # Set to empty string for localhost. Not used with sqlite3.
|
||||
'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user