Merge pull request #24 from dmitriev-e/fix/catalog-zone-get-or-create

Fix/catalog zone get or create
This commit is contained in:
Sven Luethi authored and GitHub committed 2026-07-16 09:07:45 +02:00
commit f80318707d
3 files changed
+14 -18

No files matched your search

+2 -2
View File
@@ -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
+1 -1
View File
@@ -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__)
+11 -15
View File
@@ -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