|
@@ -3,7 +3,8 @@ import logging
|
|
|
from django.db.models.signals import post_save, post_delete
|
|
from django.db.models.signals import post_save, post_delete
|
|
|
from django.dispatch import receiver
|
|
from django.dispatch import receiver
|
|
|
|
|
|
|
|
-from dcim.models import Interface
|
|
|
|
|
|
|
+from dcim.models import CablePath, Interface
|
|
|
|
|
+from dcim.utils import create_cablepath
|
|
|
from .models import WirelessLink
|
|
from .models import WirelessLink
|
|
|
|
|
|
|
|
|
|
|
|
@@ -12,11 +13,10 @@ from .models import WirelessLink
|
|
|
#
|
|
#
|
|
|
|
|
|
|
|
@receiver(post_save, sender=WirelessLink)
|
|
@receiver(post_save, sender=WirelessLink)
|
|
|
-def update_connected_interfaces(instance, raw=False, **kwargs):
|
|
|
|
|
|
|
+def update_connected_interfaces(instance, created, raw=False, **kwargs):
|
|
|
"""
|
|
"""
|
|
|
When a WirelessLink is saved, save a reference to it on each connected interface.
|
|
When a WirelessLink is saved, save a reference to it on each connected interface.
|
|
|
"""
|
|
"""
|
|
|
- print('update_connected_interfaces')
|
|
|
|
|
logger = logging.getLogger('netbox.wireless.wirelesslink')
|
|
logger = logging.getLogger('netbox.wireless.wirelesslink')
|
|
|
if raw:
|
|
if raw:
|
|
|
logger.debug(f"Skipping endpoint updates for imported wireless link {instance}")
|
|
logger.debug(f"Skipping endpoint updates for imported wireless link {instance}")
|
|
@@ -25,21 +25,25 @@ def update_connected_interfaces(instance, raw=False, **kwargs):
|
|
|
if instance.interface_a.wireless_link != instance:
|
|
if instance.interface_a.wireless_link != instance:
|
|
|
logger.debug(f"Updating interface A for wireless link {instance}")
|
|
logger.debug(f"Updating interface A for wireless link {instance}")
|
|
|
instance.interface_a.wireless_link = instance
|
|
instance.interface_a.wireless_link = instance
|
|
|
- # instance.interface_a._cable_peer = instance.interface_b # TODO: Rename _cable_peer field
|
|
|
|
|
|
|
+ instance.interface_a._cable_peer = instance.interface_b # TODO: Rename _cable_peer field
|
|
|
instance.interface_a.save()
|
|
instance.interface_a.save()
|
|
|
if instance.interface_b.cable != instance:
|
|
if instance.interface_b.cable != instance:
|
|
|
logger.debug(f"Updating interface B for wireless link {instance}")
|
|
logger.debug(f"Updating interface B for wireless link {instance}")
|
|
|
instance.interface_b.wireless_link = instance
|
|
instance.interface_b.wireless_link = instance
|
|
|
- # instance.interface_b._cable_peer = instance.interface_a
|
|
|
|
|
|
|
+ instance.interface_b._cable_peer = instance.interface_a
|
|
|
instance.interface_b.save()
|
|
instance.interface_b.save()
|
|
|
|
|
|
|
|
|
|
+ # Create/update cable paths
|
|
|
|
|
+ if created:
|
|
|
|
|
+ for interface in (instance.interface_a, instance.interface_b):
|
|
|
|
|
+ create_cablepath(interface)
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@receiver(post_delete, sender=WirelessLink)
|
|
@receiver(post_delete, sender=WirelessLink)
|
|
|
def nullify_connected_interfaces(instance, **kwargs):
|
|
def nullify_connected_interfaces(instance, **kwargs):
|
|
|
"""
|
|
"""
|
|
|
When a WirelessLink is deleted, update its two connected Interfaces
|
|
When a WirelessLink is deleted, update its two connected Interfaces
|
|
|
"""
|
|
"""
|
|
|
- print('nullify_connected_interfaces')
|
|
|
|
|
logger = logging.getLogger('netbox.wireless.wirelesslink')
|
|
logger = logging.getLogger('netbox.wireless.wirelesslink')
|
|
|
|
|
|
|
|
if instance.interface_a is not None:
|
|
if instance.interface_a is not None:
|
|
@@ -56,3 +60,8 @@ def nullify_connected_interfaces(instance, **kwargs):
|
|
|
_cable_peer_type=None,
|
|
_cable_peer_type=None,
|
|
|
_cable_peer_id=None
|
|
_cable_peer_id=None
|
|
|
)
|
|
)
|
|
|
|
|
+
|
|
|
|
|
+ # Delete and retrace any dependent cable paths
|
|
|
|
|
+ for cablepath in CablePath.objects.filter(path__contains=instance):
|
|
|
|
|
+ print(f'Deleting cable path {cablepath.pk}')
|
|
|
|
|
+ cablepath.delete()
|