mirror of
https://github.com/netbox-community/netbox.git
synced 2025-12-20 12:22:23 -06:00
Reference WirelessLink on both attached Interfaces
This commit is contained in:
@@ -3,3 +3,6 @@ from django.apps import AppConfig
|
||||
|
||||
class WirelessConfig(AppConfig):
|
||||
name = 'wireless'
|
||||
|
||||
def ready(self):
|
||||
import wireless.signals
|
||||
|
||||
@@ -37,13 +37,15 @@ class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm):
|
||||
queryset=Interface.objects.all(),
|
||||
query_params={
|
||||
'kind': 'wireless'
|
||||
}
|
||||
},
|
||||
label='Interface A'
|
||||
)
|
||||
interface_b = DynamicModelChoiceField(
|
||||
queryset=Interface.objects.all(),
|
||||
query_params={
|
||||
'kind': 'wireless'
|
||||
}
|
||||
},
|
||||
label='Interface B'
|
||||
)
|
||||
tags = DynamicModelMultipleChoiceField(
|
||||
queryset=Tag.objects.all(),
|
||||
|
||||
58
netbox/wireless/signals.py
Normal file
58
netbox/wireless/signals.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import logging
|
||||
|
||||
from django.db.models.signals import post_save, post_delete
|
||||
from django.dispatch import receiver
|
||||
|
||||
from dcim.models import Interface
|
||||
from .models import WirelessLink
|
||||
|
||||
|
||||
#
|
||||
# Wireless links
|
||||
#
|
||||
|
||||
@receiver(post_save, sender=WirelessLink)
|
||||
def update_connected_interfaces(instance, 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}")
|
||||
return
|
||||
|
||||
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.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.save()
|
||||
|
||||
|
||||
@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:
|
||||
logger.debug(f"Nullifying interface A for wireless link {instance}")
|
||||
Interface.objects.filter(pk=instance.interface_a.pk).update(
|
||||
wireless_link=None,
|
||||
_cable_peer_type=None,
|
||||
_cable_peer_id=None
|
||||
)
|
||||
if instance.interface_b is not None:
|
||||
logger.debug(f"Nullifying interface B for wireless link {instance}")
|
||||
Interface.objects.filter(pk=instance.interface_b.pk).update(
|
||||
wireless_link=None,
|
||||
_cable_peer_type=None,
|
||||
_cable_peer_id=None
|
||||
)
|
||||
Reference in New Issue
Block a user