diff --git a/netbox/circuits/models.py b/netbox/circuits/models.py index 2bad69789..a51a7039a 100644 --- a/netbox/circuits/models.py +++ b/netbox/circuits/models.py @@ -303,6 +303,9 @@ class CircuitTermination(CableTermination): # Paths do not end on cable terminations, they continue at the other end of the circuit is_path_endpoint = False + # But they are a possible connected endpoint + is_connected_endpoint = True + class Meta: ordering = ['circuit', 'term_side'] unique_together = ['circuit', 'term_side'] diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 4fa9c37b5..4fb3a9f05 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -86,8 +86,12 @@ class CableTermination(models.Model): object_id_field='termination_b_id' ) + # Whether this class is always an endpoint for cable traces is_path_endpoint = True + # Whether this class can be a connected endpoint + is_connected_endpoint = True + class Meta: abstract = True @@ -895,8 +899,13 @@ class FrontPort(CableTermination, ComponentModel): tags = TaggableManager(through=TaggedItem) csv_headers = ['device', 'name', 'type', 'rear_port', 'rear_port_position', 'description'] + + # Whether this class is always an endpoint for cable traces is_path_endpoint = False + # Whether this class can be a connected endpoint + is_connected_endpoint = False + class Meta: ordering = ('device', '_name') unique_together = ( @@ -963,8 +972,13 @@ class RearPort(CableTermination, ComponentModel): tags = TaggableManager(through=TaggedItem) csv_headers = ['device', 'name', 'type', 'positions', 'description'] + + # Whether this class is always an endpoint for cable traces is_path_endpoint = False + # Whether this class can be a connected endpoint + is_connected_endpoint = False + class Meta: ordering = ('device', '_name') unique_together = ('device', 'name') diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index 7cae1a39c..f5bf43c70 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -63,7 +63,7 @@ def update_connected_endpoints(instance, **kwargs): endpoint_a = path[0][0] endpoint_b = path[-1][2] if not split_ends and not position_stack else None - if getattr(endpoint_a, 'is_path_endpoint', False) and getattr(endpoint_b, 'is_path_endpoint', False): + if getattr(endpoint_a, 'is_connected_endpoint', False) and getattr(endpoint_b, 'is_connected_endpoint', False): logger.debug("Updating path endpoints: {} <---> {}".format(endpoint_a, endpoint_b)) endpoint_a.connected_endpoint = endpoint_b endpoint_a.connection_status = path_status