From d962420de71cc92410ab8226bcd32f65d63f6db4 Mon Sep 17 00:00:00 2001 From: Sander Steffann Date: Wed, 15 Apr 2020 01:09:13 +0200 Subject: [PATCH] Make TTL configurable --- README.md | 8 ++++++-- netbox_ddns/admin.py | 4 ++-- netbox_ddns/background_tasks.py | 4 ++-- netbox_ddns/migrations/0002_add_ttl.py | 25 +++++++++++++++++++++++++ netbox_ddns/models.py | 6 ++++++ 5 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 netbox_ddns/migrations/0002_add_ttl.py diff --git a/README.md b/README.md index 4da2f25..37395c1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ -# vCenter integration plugin for NetBox +# Dynamic DNS Connector for NetBox -This plugin shows live data from vCenter clusters in NetBox, making it easier for administrators to make sure that reality reflects what is documented in NetBox. +This plugin lets you define DNS servers that support [RFC3007 Dynamic DNS Updates](https://tools.ietf.org/html/rfc3007). For each server you specify which domains and reverse DNS domains it is responsible for, and after that NetBox will automatically send DNS Updates to those servers whenever you change the DNS name of an IP Address in NetBox. + +Updates are sent from the worker process in the background. You can see their progress either by configuring Django logging or by looking at the Background Tasks in the NetBox admin back-end. + +For now all configuration is done in the NetBox admin back-end. A later version will provide a nicer user interface. ## Compatibility diff --git a/netbox_ddns/admin.py b/netbox_ddns/admin.py index fa7f133..14bf2c3 100644 --- a/netbox_ddns/admin.py +++ b/netbox_ddns/admin.py @@ -51,7 +51,7 @@ class ServerAdmin(admin.ModelAdmin): @admin.register(Zone, site=admin_site) class ZoneAdmin(admin.ModelAdmin): - list_display = ('name', 'server') + list_display = ('name', 'ttl', 'server') actions = [ 'update_all_records' ] @@ -83,7 +83,7 @@ class ZoneAdmin(admin.ModelAdmin): @admin.register(ReverseZone, site=admin_site) class ReverseZoneAdmin(admin.ModelAdmin): - list_display = ('prefix', 'name', 'server') + list_display = ('prefix', 'name', 'ttl', 'server') list_filter = [IPFamilyFilter] actions = [ 'update_all_records' diff --git a/netbox_ddns/background_tasks.py b/netbox_ddns/background_tasks.py index 36b302c..7cd7a64 100644 --- a/netbox_ddns/background_tasks.py +++ b/netbox_ddns/background_tasks.py @@ -135,7 +135,7 @@ def update_dns(old_address: IPAddress = None, new_address: IPAddress = None, update = zone.server.create_update(zone.name) update.add( new_dns_name + '.', - 300, + zone.ttl, 'a' if new_address.version == 4 else 'aaaa', str(new_address) ) @@ -160,7 +160,7 @@ def update_dns(old_address: IPAddress = None, new_address: IPAddress = None, update = zone.server.create_update(zone.name) update.add( record_name + '.', - 300, + zone.ttl, 'ptr', new_dns_name + '.' ) diff --git a/netbox_ddns/migrations/0002_add_ttl.py b/netbox_ddns/migrations/0002_add_ttl.py new file mode 100644 index 0000000..ef4827e --- /dev/null +++ b/netbox_ddns/migrations/0002_add_ttl.py @@ -0,0 +1,25 @@ +# Generated by Django 3.0.5 on 2020-04-14 23:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('netbox_ddns', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='reversezone', + name='ttl', + field=models.PositiveIntegerField(default=3600), + preserve_default=False, + ), + migrations.AddField( + model_name='zone', + name='ttl', + field=models.PositiveIntegerField(default=3600), + preserve_default=False, + ), + ] diff --git a/netbox_ddns/models.py b/netbox_ddns/models.py index ad992e2..d947f20 100644 --- a/netbox_ddns/models.py +++ b/netbox_ddns/models.py @@ -89,6 +89,9 @@ class Zone(models.Model): validators=[HostnameValidator()], unique=True, ) + ttl = models.PositiveIntegerField( + verbose_name=_('TTL'), + ) server = models.ForeignKey( to=Server, verbose_name=_('DDNS Server'), @@ -122,6 +125,9 @@ class ReverseZone(models.Model): blank=True, help_text=_("RFC 2317 style reverse DNS, required when the prefix doesn't map to a reverse zone"), ) + ttl = models.PositiveIntegerField( + verbose_name=_('TTL'), + ) server = models.ForeignKey( to=Server, verbose_name=_('DDNS Server'),