Created
June 23, 2019 15:41
-
-
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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