Skip to content

Instantly share code, notes, and snippets.

@candlerb
Created June 23, 2019 15:41
Show Gist options
  • Save candlerb/8030d266e1e85b12906c2e614bc223c2 to your computer and use it in GitHub Desktop.
Save candlerb/8030d266e1e85b12906c2e614bc223c2 to your computer and use it in GitHub Desktop.
Netbox report to highlight cables between sites and cables between racks (apart from rearport to rearport)
from extras.reports import Report
from dcim.models import Cable, RearPort
from dcim.constants import *
from circuits.models import CircuitTermination
CABLE_TYPES_OK_BETWEEN_RACKS = {
CABLE_TYPE_DAC_PASSIVE,
}
class CheckCableLocality(Report):
description = "Warn on cables between racks, error on cables between sites"
def test_cable_endpoints(self):
for cable in Cable.objects.prefetch_related('termination_a','termination_b').all():
if isinstance(cable.termination_a, CircuitTermination) or isinstance(cable.termination_b, CircuitTermination):
continue
if cable.termination_a.device.site != cable.termination_b.device.site:
self.log_failure(cable, "Endpoints in different sites: {} ({}) and {} ({})".format(
cable.termination_a.device, cable.termination_a.device.site,
cable.termination_b.device, cable.termination_b.device.site,
))
continue
if isinstance(cable.termination_a, RearPort) and isinstance(cable.termination_b, RearPort):
self.log_success(cable)
continue
if cable.termination_a.device.rack != cable.termination_b.device.rack and cable.type not in CABLE_TYPES_OK_BETWEEN_RACKS:
self.log_warning(cable, "Endpoints in different racks: {} ({}) and {} ({})".format(
cable.termination_a.device, cable.termination_a.device.rack,
cable.termination_b.device, cable.termination_b.device.rack,
))
continue
self.log_success(cable)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment