diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index de7ba0eb6..fbba3503c 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -231,6 +231,12 @@ class Cable(PrimaryModel): def get_status_color(self): return LinkStatusChoices.colors.get(self.status) + def get_trace_url(self): + for cabletermination in self.terminations.all(): + if cabletermination.termination_type.model in ['interface', 'rearport', 'frontport', 'consoleport', 'consoleserverport', 'powerport', 'poweroutlet']: + return reverse(f'dcim:{cabletermination.termination_type.model}_trace', kwargs={'pk': cabletermination.termination.pk}) + return '' + class CableTermination(ChangeLoggedModel): """ diff --git a/netbox/dcim/tables/cables.py b/netbox/dcim/tables/cables.py index 0fb2f7d61..330ef4362 100644 --- a/netbox/dcim/tables/cables.py +++ b/netbox/dcim/tables/cables.py @@ -116,6 +116,9 @@ class CableTable(TenancyColumnsMixin, NetBoxTable): tags = columns.TagColumn( url_name='dcim:cable_list' ) + actions = columns.ActionsColumn( + extra_buttons='{% if record.get_trace_url %}{% endif %}' + ) class Meta(NetBoxTable.Meta): model = Cable diff --git a/netbox/templates/dcim/cable.html b/netbox/templates/dcim/cable.html index 535b96977..e79086f43 100644 --- a/netbox/templates/dcim/cable.html +++ b/netbox/templates/dcim/cable.html @@ -20,6 +20,14 @@