From ef6e8e9cf611561d83b90c932663cb16469eca90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Martin=20Sl=C3=A5en?= Date: Sun, 8 May 2011 21:43:35 +0200 Subject: [PATCH] added ipv6 support in models --- mdb/admin.py | 14 +++++++++----- mdb/models.py | 45 ++++++++++++++++++++++++++++++++++++++++++++- settings.py | 2 +- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/mdb/admin.py b/mdb/admin.py index 33eb74e..d2e2a24 100644 --- a/mdb/admin.py +++ b/mdb/admin.py @@ -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) diff --git a/mdb/models.py b/mdb/models.py index c01996b..ad6b59f 100644 --- a/mdb/models.py +++ b/mdb/models.py @@ -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): diff --git a/settings.py b/settings.py index f3ad3a3..fdfdf17 100644 --- a/settings.py +++ b/settings.py @@ -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. } }