Skip to content

Instantly share code, notes, and snippets.

@DanSheps
Created September 20, 2022 14:04
Show Gist options
  • Save DanSheps/a72b1e9f40dd9d92e48d05bdc3e6d44f to your computer and use it in GitHub Desktop.
Save DanSheps/a72b1e9f40dd9d92e48d05bdc3e6d44f to your computer and use it in GitHub Desktop.
from dcim.models import *
from extras.scripts import ObjectVar, Script
class OSPPatchFrontPorts(Script):
name = "Outside Plant - Patch Front Ports"
description = "Patch all front ports through"
site = ObjectVar(
model=Site,
required=False,
)
device = ObjectVar(
model=Device,
required=True,
query_params={
'site_id': '$site'
}
)
def run(self, data, commit):
device = data.get('device')
ports = device.frontports.filter(name__contains="-A-")
for port in ports:
prefix = port.name[:-5]
number = port.name[-2:]
peer_name = f'{prefix}-B-{number}'
try:
peer = device.frontports.get(name=peer_name)
port.snapshot()
peer.snapshot()
if not port.cable and not peer.cable:
self.log_info(f'Creating cable from {port} to {peer}')
cable = Cable(label=f'{prefix}-{number}', type='smf-os2',
a_terminations=[port], b_terminations=[peer], status='connected', length=0,
length_unit='m', color=port.color)
cable.save()
except FrontPort.DoesNotExist as e:
self.log_failure(f'Peer port: {peer_name} does not exist')
# raise AbortTransaction()
continue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment