diff --git a/README.md b/README.md index 5c3c3e9..4de3bf6 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,8 @@ multiple views yields unpredicted behavior. #### NOTIFY Clients may be notified of zone changes using the NOTIFY mechanism defined in RFC 1996. When enabled, the zone transfer endpoint keeps track of any client that successfully queried the -endpoint and when a zone changes. Once a zone has changed, NetBox informs each client of said -change. +endpoint. Once a zone has changed, NetBox informs each client about the zone changed so that the +client can request a new zone transfer. Note that this feature uses NetBox's background job system to schedule the messages asynchronously. In order to work, you need at least one `rq-worker` service running in the background to handle diff --git a/netbox_dns_bridge/__init__.py b/netbox_dns_bridge/__init__.py index 5276320..cd8e4af 100644 --- a/netbox_dns_bridge/__init__.py +++ b/netbox_dns_bridge/__init__.py @@ -2,7 +2,7 @@ from netbox.plugins import PluginConfig from django.conf import settings from .logger import get_logger -__version__ = "1.5.4" +__version__ = "1.5.6" LOGGER = get_logger(__name__) diff --git a/netbox_dns_bridge/catalog_zone_manager.py b/netbox_dns_bridge/catalog_zone_manager.py index 1a9d305..d5d43cf 100644 --- a/netbox_dns_bridge/catalog_zone_manager.py +++ b/netbox_dns_bridge/catalog_zone_manager.py @@ -3,16 +3,11 @@ import dns.zone import dns.rdatatype import dns.rdataclass from .logger import get_logger -from netbox_dns.models import Zone +from netbox_dns.models import Zone as NBZone from netbox_dns_bridge.models import IntegerKeyValueSetting, CatalogZoneMemberIdentifier from uuid import uuid4 from base64 import b32encode -from django.db import ( - transaction, - close_old_connections, - OperationalError, - RelatedObjectDoesNotExist -) +from django.db import transaction, close_old_connections, OperationalError LOGGER = get_logger(__name__) @@ -20,7 +15,7 @@ LOGGER = get_logger(__name__) def increment_soa_serial() -> int: with transaction.atomic(): try: - soa_serial_obj = ( + soa_serial_obj, _ = ( IntegerKeyValueSetting.objects.select_for_update().get_or_create( key="catalog-zone-soa-serial", defaults={"value": 1}, @@ -58,7 +53,7 @@ def create_zone(name, view_name) -> dns.zone.Zone: try: # get zones from netbox - nb_zones = Zone.objects.filter( + nb_zones = NBZone.objects.filter( view__name=view_name, active=True ).select_related("catz_identifier") @@ -71,9 +66,9 @@ def create_zone(name, view_name) -> dns.zone.Zone: # Create PTR record try: catz_identifier = nb_zone.catz_identifier - except RelatedObjectDoesNotExist: - catz_identifier = nb_zone.catz_identifier.create( - name=_generate_member_identifier() + except NBZone.catz_identifier.RelatedObjectDoesNotExist: + catz_identifier = CatalogZoneMemberIdentifier.objects.create( + zone=nb_zone, name=_generate_member_identifier() ) p_name = catz_identifier.name @@ -129,7 +124,7 @@ def _generate_member_identifier() -> str: return b32encode(uuid4().bytes)[0:26].lower().decode("UTF-8") -def update_member_identifier(zone: Zone) -> None: +def update_member_identifier(zone: NBZone) -> None: try: CatalogZoneMemberIdentifier.objects.update_or_create( zone=zone, @@ -142,9 +137,10 @@ def update_member_identifier(zone: Zone) -> None: def _create_soa_rdataset() -> dns.rdataset: try: - serial = IntegerKeyValueSetting.objects.get_or_create( + serial_obj, _ = IntegerKeyValueSetting.objects.get_or_create( key="catalog-zone-soa-serial", defaults={"value": 1} - ).value + ) + serial = serial_obj.value # SOA Record components ttl = 0