mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-15 11:42:52 -06:00
Rebuild CablePaths when a CircuitTermination is modified
This commit is contained in:
parent
5e4432b9ad
commit
b77c228853
@ -1,7 +1,8 @@
|
|||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_delete, post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from dcim.signals import rebuild_paths
|
||||||
from .models import Circuit, CircuitTermination
|
from .models import Circuit, CircuitTermination
|
||||||
|
|
||||||
|
|
||||||
@ -15,3 +16,14 @@ def update_circuit(instance, **kwargs):
|
|||||||
f'termination_{instance.term_side.lower()}': instance.pk,
|
f'termination_{instance.term_side.lower()}': instance.pk,
|
||||||
}
|
}
|
||||||
Circuit.objects.filter(pk=instance.circuit_id).update(**fields)
|
Circuit.objects.filter(pk=instance.circuit_id).update(**fields)
|
||||||
|
|
||||||
|
|
||||||
|
@receiver((post_save, post_delete), sender=CircuitTermination)
|
||||||
|
def rebuild_cablepaths(instance, raw=False, **kwargs):
|
||||||
|
"""
|
||||||
|
Rebuild any CablePaths which traverse the peer CircuitTermination.
|
||||||
|
"""
|
||||||
|
if not raw:
|
||||||
|
peer_termination = instance.get_peer_termination()
|
||||||
|
if peer_termination:
|
||||||
|
rebuild_paths(peer_termination)
|
||||||
|
@ -819,15 +819,35 @@ class CablePathTestCase(TestCase):
|
|||||||
interface1 = Interface.objects.create(device=self.device, name='Interface 1')
|
interface1 = Interface.objects.create(device=self.device, name='Interface 1')
|
||||||
interface2 = Interface.objects.create(device=self.device, name='Interface 2')
|
interface2 = Interface.objects.create(device=self.device, name='Interface 2')
|
||||||
circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A')
|
circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A')
|
||||||
circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='Z')
|
|
||||||
|
|
||||||
# Create cables
|
# Create cable 1
|
||||||
cable1 = Cable(termination_a=interface1, termination_b=circuittermination1)
|
cable1 = Cable(termination_a=interface1, termination_b=circuittermination1)
|
||||||
cable1.save()
|
cable1.save()
|
||||||
|
|
||||||
|
# Check for partial path from interface1
|
||||||
|
self.assertPathExists(
|
||||||
|
origin=interface1,
|
||||||
|
destination=None,
|
||||||
|
path=(cable1, circuittermination1),
|
||||||
|
is_active=False
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create CT2
|
||||||
|
circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='Z')
|
||||||
|
|
||||||
|
# Check for partial path to site
|
||||||
|
self.assertPathExists(
|
||||||
|
origin=interface1,
|
||||||
|
destination=self.site,
|
||||||
|
path=(cable1, circuittermination1, circuittermination2),
|
||||||
|
is_active=True
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create cable 2
|
||||||
cable2 = Cable(termination_a=circuittermination2, termination_b=interface2)
|
cable2 = Cable(termination_a=circuittermination2, termination_b=interface2)
|
||||||
cable2.save()
|
cable2.save()
|
||||||
|
|
||||||
# Check for paths
|
# Check for complete path in each direction
|
||||||
self.assertPathExists(
|
self.assertPathExists(
|
||||||
origin=interface1,
|
origin=interface1,
|
||||||
destination=interface2,
|
destination=interface2,
|
||||||
|
Loading…
Reference in New Issue
Block a user