diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 062734355..2a1376be3 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -219,6 +219,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(models.Model): """ diff --git a/netbox/dcim/tables/cables.py b/netbox/dcim/tables/cables.py index 6e9d49719..3bce1ac47 100644 --- a/netbox/dcim/tables/cables.py +++ b/netbox/dcim/tables/cables.py @@ -115,6 +115,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 bd0f27106..7e18584e1 100644 --- a/netbox/templates/dcim/cable.html +++ b/netbox/templates/dcim/cable.html @@ -19,6 +19,14 @@ Status {% badge object.get_status_display bg_color=object.get_status_color %} + {% if object.get_trace_url %} + + Trace + + + + + {% endif %} Tenant