Fixes #7761: Extend cable tracing across bridged interfaces

This commit is contained in:
jeremystretch 2021-11-11 14:45:10 -05:00
parent 83b2102705
commit 834f68e6e4
2 changed files with 16 additions and 7 deletions

View File

@ -3,6 +3,7 @@
### Enhancements ### Enhancements
* [#7619](https://github.com/netbox-community/netbox/issues/7619) - Permit custom validation rules to be defined as plain data or dotted path to class * [#7619](https://github.com/netbox-community/netbox/issues/7619) - Permit custom validation rules to be defined as plain data or dotted path to class
* [#7761](https://github.com/netbox-community/netbox/issues/7761) - Extend cable tracing across bridged interfaces
* [#7769](https://github.com/netbox-community/netbox/issues/7769) - Enable assignment of IP addresses to an existing FHRP group * [#7769](https://github.com/netbox-community/netbox/issues/7769) - Enable assignment of IP addresses to an existing FHRP group
* [#7775](https://github.com/netbox-community/netbox/issues/7775) - Enable dynamic config for `CHANGELOG_RETENTION`, `CUSTOM_VALIDATORS`, and `GRAPHQL_ENABLED` * [#7775](https://github.com/netbox-community/netbox/issues/7775) - Enable dynamic config for `CHANGELOG_RETENTION`, `CUSTOM_VALIDATORS`, and `GRAPHQL_ENABLED`

View File

@ -189,15 +189,23 @@ class PathEndpoint(models.Model):
abstract = True abstract = True
def trace(self): def trace(self):
if self._path is None: origin = self
return [] path = []
# Construct the complete path # Construct the complete path
path = [self, *self._path.get_path()] while origin is not None:
if origin._path is None:
return path
path.extend([origin, *origin._path.get_path()])
while (len(path) + 1) % 3: while (len(path) + 1) % 3:
# Pad to ensure we have complete three-tuples (e.g. for paths that end at a non-connected FrontPort) # Pad to ensure we have complete three-tuples (e.g. for paths that end at a non-connected FrontPort)
path.append(None) path.append(None)
path.append(self._path.destination) path.append(origin._path.destination)
# Check for bridge interface to continue the trace
origin = getattr(origin._path.destination, 'bridge', None)
# Return the path as a list of three-tuples (A termination, cable, B termination) # Return the path as a list of three-tuples (A termination, cable, B termination)
return list(zip(*[iter(path)] * 3)) return list(zip(*[iter(path)] * 3))