1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Record wireless links as part of cable path

This commit is contained in:
jeremystretch
2021-10-13 13:28:14 -04:00
parent 445e16f668
commit 138af27bf7
5 changed files with 59 additions and 38 deletions

View File

@ -3,7 +3,8 @@ import logging
from django.db.models.signals import post_save, post_delete
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
@ -12,11 +13,10 @@ from .models import 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.
"""
print('update_connected_interfaces')
logger = logging.getLogger('netbox.wireless.wirelesslink')
if raw:
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:
logger.debug(f"Updating interface A for 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()
if instance.interface_b.cable != instance:
logger.debug(f"Updating interface B for 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()
# Create/update cable paths
if created:
for interface in (instance.interface_a, instance.interface_b):
create_cablepath(interface)
@receiver(post_delete, sender=WirelessLink)
def nullify_connected_interfaces(instance, **kwargs):
"""
When a WirelessLink is deleted, update its two connected Interfaces
"""
print('nullify_connected_interfaces')
logger = logging.getLogger('netbox.wireless.wirelesslink')
if instance.interface_a is not None:
@ -56,3 +60,8 @@ def nullify_connected_interfaces(instance, **kwargs):
_cable_peer_type=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()