Skip to content

netbox-osp v0.2.0 — inter-rack fibre infrastructure

Choose a tag to compare

@iamjohnnymac iamjohnnymac released this 14 May 00:02

The "inter-rack" release. Five PRs adding MPO/MTP trunks with breakouts, one-click harness deploy, a cassette device-type catalogue, and an end-to-end visual core tracer.

What's new

Trunk + breakouts (#10 + #11)

  • FibreTrunk model captures a multi-fibre rack-to-rack physical trunk (MPO/MTP 12/24/72-fibre, Ribbon 144-fibre, loose-tube)
  • TrunkBreakout through-table bridges to NetBox's native dcim.Cable, so "24F MTP → 12F to rack A + 12F to rack B" is one cohesive entity instead of two disconnected cables
  • Fibre-range non-overlap + parent-fibre-count overflow enforced in clean() (field-keyed errors)
  • fibres_used / fibres_remaining / fibres_utilization_pct computed properties
  • REST + GraphQL surface; admin list / detail / edit / delete / bulk-edit / bulk-import; CSV import keyed by trunk_cid + cable_label
  • "Import from cables" wizard at /plugins/osp/trunks/<id>/import-cables/ — atomic bind of unbound dcim.Cables to fibre ranges

MTP harness one-click deploy (#12)

  • One form at /plugins/osp/trunks/deploy-harness/ atomically creates: FibreTrunk + N cassette dcim.Devices + N dcim.Cables + N TrunkBreakout rows
  • Two-step preview/confirm flow with django.core.signing.dumps state token (base64-encoded, HTML-safe)
  • Replaces ~30 individual NetBox object writes with one form

Cassette catalogue (#13)

  • Five DeviceType JSON templates: mpo-12f-lc-cassette, mpo-24f-lc-cassette, mpo-12f-mpo-cassette, lgx-lc-12f-panel, ru1-lc-24f-panel
  • python manage.py load_osp_cassettes seeds them idempotently
  • Same JSON shape as netbox-community/devicetype-library (works with the upstream loader too)

Visual core tracer (#14)

  • Click "Trace this core" on any Strand / dcim.FrontPort / dcim.Interface detail page → end-to-end dagre-d3 graph
  • Every hop (interface, patch cord, cassette pass-through, trunk fibre, splice, OSP strand) with inline per-hop loss
  • Summary band above the graph shows total dB used against the strand's parent FibreLink budget, banded ok / warn / fail
  • JSON endpoint at GET /api/plugins/osp/cores/<strand_id>/trace/ for external tooling
  • dagre-d3 vendored (offline-first, matches the rest of the plugin)

Compatibility

NetBox 4.6.x · Python 3.12 / 3.13 · Postgres 17 · Redis 7. PostGIS still not required.

Install / upgrade

pip install -U netbox-osp
python manage.py migrate
python manage.py collectstatic --no-input
# Optional: seed the cassette catalogue
python manage.py load_osp_cassettes

Links