modified: netbox_dns_bridge/__init__.py
modified: netbox_dns_bridge/catalog_zone_manager.py modified: netbox_dns_bridge/dns_server.py modified: netbox_dns_bridge/logger.py new file: netbox_dns_bridge/migrations/0002_alter_integerkeyvaluesetting_options_and_more.py modified: netbox_dns_bridge/models.py new file: netbox_dns_bridge/notify_handler.py modified: netbox_dns_bridge/request_handler.py modified: netbox_dns_bridge/signals/__init__.py new file: netbox_dns_bridge/signals/netbox_dns_zones.py deleted: netbox_dns_bridge/signals/transfer_endpoint.py modified: netbox_dns_bridge/utils.py Implement notify mechanism
This commit is contained in:
1 parent
a4036c285c
commit
3eef3b4d7b
12 files changed
+227
-114
No files matched your search
@@ -1 +1 @@
|
||||
from . import transfer_endpoint
|
||||
from . import netbox_dns_zones
|
||||
@@ -0,0 +1,43 @@
|
||||
from django.db.models.signals import pre_save, post_save
|
||||
from django.dispatch import receiver
|
||||
from django.db import transaction
|
||||
from netbox.context import current_request
|
||||
from netbox_dns.models import Zone
|
||||
from netbox_dns_bridge import catalog_zone_manager as catzm
|
||||
from netbox_dns_bridge import notify_handler
|
||||
|
||||
|
||||
@receiver(pre_save, sender=Zone)
|
||||
def zone_pre_save(sender, instance, **kwargs):
|
||||
zone = instance
|
||||
if zone.pk:
|
||||
try:
|
||||
zone._old_name = sender.objects.only("name").get(pk=zone.pk).name
|
||||
except sender.DoesNotExist:
|
||||
zone._old_name = None
|
||||
else:
|
||||
zone._old_name = None
|
||||
|
||||
|
||||
@receiver(post_save, sender=Zone)
|
||||
def zone_post_save(sender, instance, created, **kwargs):
|
||||
zone = instance
|
||||
request = current_request.get()
|
||||
handled_zones = getattr(request, "_handled_zones", set())
|
||||
if zone.pk in handled_zones:
|
||||
return
|
||||
handled_zones.add(zone.pk)
|
||||
request._handled_zones = handled_zones
|
||||
|
||||
def _on_commit():
|
||||
catzm.increment_soa_serial()
|
||||
notify_handler.schedule(zone)
|
||||
|
||||
transaction.on_commit(_on_commit)
|
||||
|
||||
if created:
|
||||
catzm.update_member_identifier(zone)
|
||||
else:
|
||||
old_name = getattr(zone, "_old_name", None)
|
||||
if old_name != zone.name:
|
||||
catzm.update_member_identifier(zone)
|
||||
@@ -1,37 +0,0 @@
|
||||
from django.db.models.signals import pre_save, post_save
|
||||
from django.dispatch import receiver
|
||||
from netbox_dns.models import Zone
|
||||
from . import catalog_zone_manager as catzm
|
||||
|
||||
|
||||
@receiver(pre_save, sender=Zone)
|
||||
def zone_pre_save(sender, instance, **kwargs):
|
||||
"""
|
||||
Cache the old name so post_save can see if it changed.
|
||||
"""
|
||||
if instance.pk:
|
||||
try:
|
||||
instance._old_name = sender.objects.only("name").get(pk=instance.pk).name
|
||||
except sender.DoesNotExist:
|
||||
instance._old_name = None
|
||||
else:
|
||||
instance._old_name = None
|
||||
|
||||
|
||||
@receiver(post_save, sender=Zone)
|
||||
def sync_catalog_zone_identifier(sender, instance, created, **kwargs):
|
||||
"""
|
||||
Ensure CatalogZoneMemberIdentifier exists for each Zone
|
||||
and keep its identifier in sync.
|
||||
"""
|
||||
if created:
|
||||
# Create the related object on Zone creation
|
||||
catzm.update_member_identifier(instance)
|
||||
else:
|
||||
old_name = getattr(instance, "_old_name", None)
|
||||
|
||||
# If the name did not change, do nothing
|
||||
if old_name == instance.name:
|
||||
return
|
||||
|
||||
catzm.update_member_identifier(instance)
|
||||
Reference in new issue
Block a user