Merge pull request #24 from dmitriev-e/fix/catalog-zone-get-or-create
Fix/catalog zone get or create
This commit is contained in:
3 files changed
+14
-18
No files matched your search
@@ -74,8 +74,8 @@ multiple views yields unpredicted behavior.
|
|||||||
#### NOTIFY
|
#### NOTIFY
|
||||||
Clients may be notified of zone changes using the NOTIFY mechanism defined in RFC 1996.
|
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
|
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
|
endpoint. Once a zone has changed, NetBox informs each client about the zone changed so that the
|
||||||
change.
|
client can request a new zone transfer.
|
||||||
|
|
||||||
Note that this feature uses NetBox's background job system to schedule the messages asynchronously.
|
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
|
In order to work, you need at least one `rq-worker` service running in the background to handle
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from netbox.plugins import PluginConfig
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from .logger import get_logger
|
from .logger import get_logger
|
||||||
|
|
||||||
__version__ = "1.5.4"
|
__version__ = "1.5.6"
|
||||||
|
|
||||||
LOGGER = get_logger(__name__)
|
LOGGER = get_logger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -3,16 +3,11 @@ import dns.zone
|
|||||||
import dns.rdatatype
|
import dns.rdatatype
|
||||||
import dns.rdataclass
|
import dns.rdataclass
|
||||||
from .logger import get_logger
|
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 netbox_dns_bridge.models import IntegerKeyValueSetting, CatalogZoneMemberIdentifier
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
from base64 import b32encode
|
from base64 import b32encode
|
||||||
from django.db import (
|
from django.db import transaction, close_old_connections, OperationalError
|
||||||
transaction,
|
|
||||||
close_old_connections,
|
|
||||||
OperationalError,
|
|
||||||
RelatedObjectDoesNotExist
|
|
||||||
)
|
|
||||||
|
|
||||||
LOGGER = get_logger(__name__)
|
LOGGER = get_logger(__name__)
|
||||||
|
|
||||||
@@ -20,7 +15,7 @@ LOGGER = get_logger(__name__)
|
|||||||
def increment_soa_serial() -> int:
|
def increment_soa_serial() -> int:
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
try:
|
try:
|
||||||
soa_serial_obj = (
|
soa_serial_obj, _ = (
|
||||||
IntegerKeyValueSetting.objects.select_for_update().get_or_create(
|
IntegerKeyValueSetting.objects.select_for_update().get_or_create(
|
||||||
key="catalog-zone-soa-serial",
|
key="catalog-zone-soa-serial",
|
||||||
defaults={"value": 1},
|
defaults={"value": 1},
|
||||||
@@ -58,7 +53,7 @@ def create_zone(name, view_name) -> dns.zone.Zone:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
# get zones from netbox
|
# get zones from netbox
|
||||||
nb_zones = Zone.objects.filter(
|
nb_zones = NBZone.objects.filter(
|
||||||
view__name=view_name, active=True
|
view__name=view_name, active=True
|
||||||
).select_related("catz_identifier")
|
).select_related("catz_identifier")
|
||||||
|
|
||||||
@@ -71,9 +66,9 @@ def create_zone(name, view_name) -> dns.zone.Zone:
|
|||||||
# Create PTR record
|
# Create PTR record
|
||||||
try:
|
try:
|
||||||
catz_identifier = nb_zone.catz_identifier
|
catz_identifier = nb_zone.catz_identifier
|
||||||
except RelatedObjectDoesNotExist:
|
except NBZone.catz_identifier.RelatedObjectDoesNotExist:
|
||||||
catz_identifier = nb_zone.catz_identifier.create(
|
catz_identifier = CatalogZoneMemberIdentifier.objects.create(
|
||||||
name=_generate_member_identifier()
|
zone=nb_zone, name=_generate_member_identifier()
|
||||||
)
|
)
|
||||||
|
|
||||||
p_name = catz_identifier.name
|
p_name = catz_identifier.name
|
||||||
@@ -129,7 +124,7 @@ def _generate_member_identifier() -> str:
|
|||||||
return b32encode(uuid4().bytes)[0:26].lower().decode("UTF-8")
|
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:
|
try:
|
||||||
CatalogZoneMemberIdentifier.objects.update_or_create(
|
CatalogZoneMemberIdentifier.objects.update_or_create(
|
||||||
zone=zone,
|
zone=zone,
|
||||||
@@ -142,9 +137,10 @@ def update_member_identifier(zone: Zone) -> None:
|
|||||||
|
|
||||||
def _create_soa_rdataset() -> dns.rdataset:
|
def _create_soa_rdataset() -> dns.rdataset:
|
||||||
try:
|
try:
|
||||||
serial = IntegerKeyValueSetting.objects.get_or_create(
|
serial_obj, _ = IntegerKeyValueSetting.objects.get_or_create(
|
||||||
key="catalog-zone-soa-serial", defaults={"value": 1}
|
key="catalog-zone-soa-serial", defaults={"value": 1}
|
||||||
).value
|
)
|
||||||
|
serial = serial_obj.value
|
||||||
|
|
||||||
# SOA Record components
|
# SOA Record components
|
||||||
ttl = 0
|
ttl = 0
|
||||||
|
|||||||
Reference in new issue
Block a user