Просмотр исходного кода

Tweak tracing logic to ensure consistent behavior

Jeremy Stretch 6 лет назад
Родитель
Сommit
f1236e9bf7
1 измененных файлов с 7 добавлено и 2 удалено
  1. 7 2
      netbox/dcim/models/device_components.py

+ 7 - 2
netbox/dcim/models/device_components.py

@@ -108,14 +108,19 @@ class CableTermination(models.Model):
             # Map a front port to its corresponding rear port
             # Map a front port to its corresponding rear port
             if isinstance(termination, FrontPort):
             if isinstance(termination, FrontPort):
                 position_stack.append(termination.rear_port_position)
                 position_stack.append(termination.rear_port_position)
-                return termination.rear_port
+                # Retrieve the corresponding RearPort from database to ensure we have an up-to-date instance
+                peer_port = RearPort.objects.get(pk=termination.rear_port.pk)
+                return peer_port
 
 
             # Map a rear port/position to its corresponding front port
             # Map a rear port/position to its corresponding front port
             elif isinstance(termination, RearPort):
             elif isinstance(termination, RearPort):
 
 
                 # Can't map to a FrontPort without a position
                 # Can't map to a FrontPort without a position
                 if not position_stack:
                 if not position_stack:
-                    return None
+                    # TODO: This behavior is broken. We need a mechanism by which to return all FrontPorts mapped
+                    # to a given RearPort so that we can update end-to-end paths when a cable is created/deleted.
+                    # For now, we're maintaining the current behavior of tracing only to the first FrontPort.
+                    position_stack.append(1)
 
 
                 position = position_stack.pop()
                 position = position_stack.pop()