Upgrade models to full NetboxModel to allow UI/API interaction:
modified: netbox_dns_bridge/models.py deleted: netbox_dns_bridge/migrations/0003_catalogzone_and_per_zone_identifier.py new file: netbox_dns_bridge/migrations/0003_full_netbox_models.py This assumes the migration starts at v1.5.8. Adjust model access and function calls to match new models: modified: netbox_dns_bridge/signals/netbox_dns_zones.py modified: netbox_dns_bridge/management/commands/dns_transfer_endpoint/catalog_zone_manager.py modified: netbox_dns_bridge/management/commands/dns_transfer_endpoint/request_handler.py Update UI elements and permission interactions: modified: netbox_dns_bridge/filtersets.py modified: netbox_dns_bridge/forms.py modified: netbox_dns_bridge/jobs/notify.py modified: netbox_dns_bridge/navigation.py modified: netbox_dns_bridge/tables.py deleted: netbox_dns_bridge/templates/netbox_dns_bridge/catalog_zone_members.html new file: netbox_dns_bridge/templates/netbox_dns_bridge/catalogzone.html new file: netbox_dns_bridge/templates/netbox_dns_bridge/catalogzonemember.html deleted: netbox_dns_bridge/templates/netbox_dns_bridge/notify_overview.html new file: netbox_dns_bridge/templates/netbox_dns_bridge/seentransferclient.html modified: netbox_dns_bridge/urls.py modified: netbox_dns_bridge/views.py
This commit is contained in:
1 parent
a3f53767e4
commit
a3bc64df62
18 files changed
+596
-352
No files matched your search
+13
-13
@@ -4,7 +4,7 @@ import dns.rdatatype
|
||||
import dns.rdataclass
|
||||
from netbox_dns_bridge.utils import get_logger
|
||||
from netbox_dns.models import Zone as NBZone, View as NBView
|
||||
from netbox_dns_bridge.models import CatalogZone, CatalogZoneMemberIdentifier
|
||||
from netbox_dns_bridge.models import CatalogZone, CatalogZoneMember
|
||||
from netbox_dns_bridge.jobs import notify
|
||||
from uuid import uuid4
|
||||
from base64 import b32encode
|
||||
@@ -63,7 +63,7 @@ def create_zone(name, view_name) -> dns.zone.Zone:
|
||||
# get zones from netbox
|
||||
nb_zones = NBZone.objects.filter(
|
||||
view__name=view_name, active=True
|
||||
).select_related("catz_identifier")
|
||||
).select_related("catalog_zone_member")
|
||||
|
||||
ptr_base = dns.name.from_text("zones", origin)
|
||||
|
||||
@@ -73,21 +73,21 @@ def create_zone(name, view_name) -> dns.zone.Zone:
|
||||
|
||||
# Create PTR record
|
||||
try:
|
||||
catz_identifier = nb_zone.catz_identifier
|
||||
except NBZone.catz_identifier.RelatedObjectDoesNotExist:
|
||||
member = nb_zone.catalog_zone_member
|
||||
except NBZone.catalog_zone_member.RelatedObjectDoesNotExist:
|
||||
catalog_zone = _get_or_create_catalog_zone(nb_zone.view)
|
||||
catz_identifier = CatalogZoneMemberIdentifier.objects.create(
|
||||
member = CatalogZoneMember.objects.create(
|
||||
zone=nb_zone,
|
||||
name=_generate_member_identifier(),
|
||||
name=_generate_member_name(),
|
||||
catalog_zone=catalog_zone,
|
||||
)
|
||||
|
||||
p_name = catz_identifier.name
|
||||
p_name = member.name
|
||||
|
||||
ptr_name = dns.name.from_text(p_name, ptr_base)
|
||||
if not ptr_name.is_subdomain(origin):
|
||||
raise ValueError(
|
||||
f"Catalog zone member identifier {ptr_name.to_text()} not a subdomain"
|
||||
f"Catalog zone member {ptr_name.to_text()} not a subdomain"
|
||||
)
|
||||
rdata = dns.rdata.from_text(
|
||||
dns.rdataclass.IN, dns.rdatatype.PTR, qname.to_text()
|
||||
@@ -132,7 +132,7 @@ def create_zone(name, view_name) -> dns.zone.Zone:
|
||||
return None
|
||||
|
||||
|
||||
def _generate_member_identifier() -> str:
|
||||
def _generate_member_name() -> str:
|
||||
return b32encode(uuid4().bytes)[0:26].lower().decode("UTF-8")
|
||||
|
||||
|
||||
@@ -143,18 +143,18 @@ def _get_or_create_catalog_zone(view: NBView) -> CatalogZone:
|
||||
return catalog_zone
|
||||
|
||||
|
||||
def update_member_identifier(zone: NBZone) -> None:
|
||||
def update_member(zone: NBZone) -> None:
|
||||
try:
|
||||
catalog_zone = _get_or_create_catalog_zone(zone.view)
|
||||
CatalogZoneMemberIdentifier.objects.update_or_create(
|
||||
CatalogZoneMember.objects.update_or_create(
|
||||
zone=zone,
|
||||
defaults={
|
||||
"name": _generate_member_identifier(),
|
||||
"name": _generate_member_name(),
|
||||
"catalog_zone": catalog_zone,
|
||||
},
|
||||
)
|
||||
except OperationalError as e:
|
||||
LOGGER.error(f"ERROR: Failed to update Catalog Zone member identifier: {e}")
|
||||
LOGGER.error(f"ERROR: Failed to update Catalog Zone member: {e}")
|
||||
close_old_connections()
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ from django.db import close_old_connections, OperationalError
|
||||
from django.conf import settings
|
||||
from netbox_dns.models import Zone, View
|
||||
from . import catalog_zone_manager as catzm
|
||||
from netbox_dns_bridge.models import SeenTransferClients
|
||||
from netbox_dns_bridge.models import SeenTransferClient
|
||||
from netbox_dns_bridge.utils import build_dns_zone, get_logger
|
||||
|
||||
LOGGER = get_logger(__name__)
|
||||
@@ -77,7 +77,7 @@ class DNSBaseRequestHandler(socketserver.BaseRequestHandler):
|
||||
def _track_seen_client(self, source_ip: str, view: View) -> None:
|
||||
if SETTINGS.get("notify_clients", False):
|
||||
try:
|
||||
SeenTransferClients.objects.update_or_create(
|
||||
SeenTransferClient.objects.update_or_create(
|
||||
source_ip=source_ip,
|
||||
view=view,
|
||||
defaults={"last_seen": timezone.now()},
|
||||
|
||||
Reference in new issue
Block a user