mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-27 10:58:37 -06:00
Fix problem with serials
Make them auto-update only on export if changes and not on every modification in the (reverse) zone
This commit is contained in:
parent
1443bfde46
commit
f462d0c6ee
25
netbox/dns/migrations/0005_auto_20160728_0854.py
Normal file
25
netbox/dns/migrations/0005_auto_20160728_0854.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.7 on 2016-07-28 08:54
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('dns', '0004_auto_20160722_0820'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='zone',
|
||||||
|
name='bind_changed',
|
||||||
|
field=models.BooleanField(default=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='zone',
|
||||||
|
name='soa_serial',
|
||||||
|
field=models.CharField(max_length=10),
|
||||||
|
),
|
||||||
|
]
|
@ -20,7 +20,10 @@ class Zone(CreatedUpdatedModel):
|
|||||||
ttl = models.PositiveIntegerField()
|
ttl = models.PositiveIntegerField()
|
||||||
soa_name = models.CharField(max_length=100)
|
soa_name = models.CharField(max_length=100)
|
||||||
soa_contact = models.CharField(max_length=100)
|
soa_contact = models.CharField(max_length=100)
|
||||||
soa_serial = models.CharField(max_length=100)
|
|
||||||
|
soa_serial = models.CharField(max_length=10)
|
||||||
|
bind_changed = models.BooleanField(default=True)
|
||||||
|
|
||||||
soa_refresh = models.PositiveIntegerField()
|
soa_refresh = models.PositiveIntegerField()
|
||||||
soa_retry = models.PositiveIntegerField()
|
soa_retry = models.PositiveIntegerField()
|
||||||
soa_expire = models.PositiveIntegerField()
|
soa_expire = models.PositiveIntegerField()
|
||||||
@ -37,26 +40,34 @@ class Zone(CreatedUpdatedModel):
|
|||||||
return reverse('dns:zone', args=[self.pk])
|
return reverse('dns:zone', args=[self.pk])
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
self.update_serial()
|
self.bind_changed = True
|
||||||
super(Zone, self).save(*args, **kwargs)
|
super(Zone, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_bind_changed(self, value):
|
||||||
|
self.bind_changed = value
|
||||||
|
super(Zone, self).save()
|
||||||
|
|
||||||
def update_serial(self):
|
def update_serial(self):
|
||||||
"""
|
"""
|
||||||
Each time a record or the zone is modified, the serial is incremented.
|
Each time a record or the zone is modified, the serial is incremented.
|
||||||
"""
|
"""
|
||||||
current_date = time.strftime('%Y%m%d',time.localtime())
|
current_date = time.strftime('%Y%m%d',time.localtime())
|
||||||
if not self.soa_serial:
|
if not self.soa_serial:
|
||||||
self.soa_serial = current_date+'1'
|
self.soa_serial = current_date+'01'
|
||||||
else:
|
else:
|
||||||
serial_date = self.soa_serial[:8]
|
serial_date = self.soa_serial[:8]
|
||||||
serial_num = self.soa_serial[8:]
|
serial_num = self.soa_serial[8:]
|
||||||
|
|
||||||
if serial_date!=current_date:
|
if serial_date!=current_date:
|
||||||
self.soa_serial = current_date+'1'
|
self.soa_serial = current_date+'01'
|
||||||
else:
|
else:
|
||||||
serial_num = int(serial_num)
|
serial_num = int(serial_num)
|
||||||
serial_num += 1
|
serial_num += 1
|
||||||
self.soa_serial = current_date + str(serial_num)
|
if serial_num<10:
|
||||||
|
self.soa_serial = current_date + '0' + str(serial_num)
|
||||||
|
else:
|
||||||
|
self.soa_serial = current_date + str(serial_num)
|
||||||
|
self.set_bind_changed(False)
|
||||||
|
|
||||||
|
|
||||||
def to_csv(self):
|
def to_csv(self):
|
||||||
@ -74,6 +85,8 @@ class Zone(CreatedUpdatedModel):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def to_bind(self,records):
|
def to_bind(self,records):
|
||||||
|
if self.bind_changed:
|
||||||
|
self.update_serial()
|
||||||
bind_records = ''
|
bind_records = ''
|
||||||
for r in records:
|
for r in records:
|
||||||
bind_records += r.to_bind()+'\n'
|
bind_records += r.to_bind()+'\n'
|
||||||
|
@ -91,7 +91,7 @@ class ZoneBulkEditView(PermissionRequiredMixin, BulkEditView):
|
|||||||
|
|
||||||
zlist = self.cls.objects.filter(pk__in=pk_list)
|
zlist = self.cls.objects.filter(pk__in=pk_list)
|
||||||
for z in zlist:
|
for z in zlist:
|
||||||
z.save()
|
z.set_bind_changed(True)
|
||||||
return zlist.update(**fields_to_update)
|
return zlist.update(**fields_to_update)
|
||||||
|
|
||||||
|
|
||||||
|
25
netbox/ipam/migrations/0009_auto_20160728_0854.py
Normal file
25
netbox/ipam/migrations/0009_auto_20160728_0854.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.7 on 2016-07-28 08:54
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('ipam', '0008_auto_20160727_1307'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='prefix',
|
||||||
|
name='bind_changed',
|
||||||
|
field=models.BooleanField(default=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='prefix',
|
||||||
|
name='soa_serial',
|
||||||
|
field=models.CharField(blank=True, max_length=10),
|
||||||
|
),
|
||||||
|
]
|
@ -244,7 +244,10 @@ class Prefix(CreatedUpdatedModel):
|
|||||||
ttl = models.PositiveIntegerField(blank=True, null=True)
|
ttl = models.PositiveIntegerField(blank=True, null=True)
|
||||||
soa_name = models.CharField(max_length=100, blank=True)
|
soa_name = models.CharField(max_length=100, blank=True)
|
||||||
soa_contact = models.CharField(max_length=100, blank=True)
|
soa_contact = models.CharField(max_length=100, blank=True)
|
||||||
soa_serial = models.CharField(max_length=100, blank=True)
|
|
||||||
|
soa_serial = models.CharField(max_length=10, blank=True)
|
||||||
|
bind_changed = models.BooleanField(default=True)
|
||||||
|
|
||||||
soa_refresh = models.PositiveIntegerField(blank=True, null=True)
|
soa_refresh = models.PositiveIntegerField(blank=True, null=True)
|
||||||
soa_retry = models.PositiveIntegerField(blank=True, null=True)
|
soa_retry = models.PositiveIntegerField(blank=True, null=True)
|
||||||
soa_expire = models.PositiveIntegerField(blank=True, null=True)
|
soa_expire = models.PositiveIntegerField(blank=True, null=True)
|
||||||
@ -272,7 +275,7 @@ class Prefix(CreatedUpdatedModel):
|
|||||||
"instead.")
|
"instead.")
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
self.update_serial()
|
self.bind_changed = True
|
||||||
if self.prefix:
|
if self.prefix:
|
||||||
# Clear host bits from prefix
|
# Clear host bits from prefix
|
||||||
self.prefix = self.prefix.cidr
|
self.prefix = self.prefix.cidr
|
||||||
@ -280,23 +283,31 @@ class Prefix(CreatedUpdatedModel):
|
|||||||
self.family = self.prefix.version
|
self.family = self.prefix.version
|
||||||
super(Prefix, self).save(*args, **kwargs)
|
super(Prefix, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
def set_bind_changed(self, value):
|
||||||
|
self.bind_changed = value
|
||||||
|
super(Prefix, self).save()
|
||||||
|
|
||||||
def update_serial(self):
|
def update_serial(self):
|
||||||
"""
|
"""
|
||||||
Each time a record or the zone is modified, the serial is incremented.
|
Each time a record or the zone is modified, the serial is incremented.
|
||||||
"""
|
"""
|
||||||
current_date = time.strftime('%Y%m%d',time.localtime())
|
current_date = time.strftime('%Y%m%d',time.localtime())
|
||||||
if not self.soa_serial:
|
if not self.soa_serial:
|
||||||
self.soa_serial = current_date+'1'
|
self.soa_serial = current_date+'01'
|
||||||
else:
|
else:
|
||||||
serial_date = self.soa_serial[:8]
|
serial_date = self.soa_serial[:8]
|
||||||
serial_num = self.soa_serial[8:]
|
serial_num = self.soa_serial[8:]
|
||||||
|
|
||||||
if serial_date!=current_date:
|
if serial_date!=current_date:
|
||||||
self.soa_serial = current_date+'1'
|
self.soa_serial = current_date+'01'
|
||||||
else:
|
else:
|
||||||
serial_num = int(serial_num)
|
serial_num = int(serial_num)
|
||||||
serial_num += 1
|
serial_num += 1
|
||||||
self.soa_serial = current_date + str(serial_num)
|
if serial_num < 10:
|
||||||
|
self.soa_serial = current_date + '0' + str(serial_num)
|
||||||
|
else:
|
||||||
|
self.soa_serial = current_date + str(serial_num)
|
||||||
|
self.set_bind_changed(False)
|
||||||
|
|
||||||
def to_csv(self):
|
def to_csv(self):
|
||||||
return ','.join([
|
return ','.join([
|
||||||
@ -331,6 +342,8 @@ class Prefix(CreatedUpdatedModel):
|
|||||||
return STATUS_CHOICE_CLASSES[self.status]
|
return STATUS_CHOICE_CLASSES[self.status]
|
||||||
|
|
||||||
def to_bind(self,ipaddresses):
|
def to_bind(self,ipaddresses):
|
||||||
|
if self.bind_changed:
|
||||||
|
self.update_serial()
|
||||||
|
|
||||||
zones = {}
|
zones = {}
|
||||||
|
|
||||||
|
@ -360,7 +360,7 @@ class PrefixBulkEditView(PermissionRequiredMixin, BulkEditView):
|
|||||||
|
|
||||||
plist = self.cls.objects.filter(pk__in=pk_list)
|
plist = self.cls.objects.filter(pk__in=pk_list)
|
||||||
for p in plist:
|
for p in plist:
|
||||||
p.save()
|
p.set_bind_changed(True)
|
||||||
return plist.update(**fields_to_update)
|
return plist.update(**fields_to_update)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user