Skip to main content

NetBox Services Plugin

Upload Python Package PyPI version

A NetBox plugin for service providers who need a service-centric inventory on top of DCIM/IPAM.

It adds a Service object: a unique ID, a type, a tenant, a lifecycle, and links out to whatever DCIM/IPAM/VPN objects actually deliver it — the PE/CE devices, interfaces, prefixes, VRFs, whatever makes up the Cogent DIA circuit NW-123456 or the customer's L3VPN. It's the page you open when someone asks "what does this customer's product actually run on?"

What a Service is

Each Service has:

Area Fields
Identity Unique service_id, type (L2VPN, L3VPN, DIA, IP Transit, CDN, Voice), description, status, tenant
Capacity Bandwidth and CIR (Mbps), SLA uptime target
Lifecycle Order date, planned activation, installed, contract start/end, requested disconnect, decommissioned, decommission reason
Delivery Devices, interfaces, cables, VLANs, prefixes, IP addresses, VRFs, ASNs, route targets, L2VPNs, tunnels, VMs
Dependencies Other services this one depends on, and the services that depend on it in turn
Incidents Down/up events reported against the service, typically pushed by an external NMS
Files PDF/other files (ServiceAttachment) plus NetBox image attachments (photos) on the Images tab

Status reuses NetBox circuit statuses so services line up with how circuits are already tracked.

Why not just tags?

A tag is a label; a Service is a record. Tagging a prefix dia doesn't tell you which customer it's for, when it was ordered, or which interface hands it off — a Service does.

Say you're onboarding DIA NW-123456 for a tenant. With a Service you'd:

  • Point at the PE/CE devices and the exact interfaces
  • Attach the WAN prefixes, VRF, and ASN
  • Log the order / install / contract dates
  • Keep the signed PDF and site photos right next to the inventory

The detail page is laid out for that: technical inventory on the left, lifecycle and paperwork on the right.

Features

  • CRUD for business services from Business Services in the nav
  • Relate/unrelate DCIM, IPAM, VPN, and virtualization objects from the service detail view
  • Service-to-service dependencies (e.g. a CDN service riding over an L2L circuit), with direct and indirect cycle detection, visible on the detail page and the list view
  • Bandwidth/CIR and an SLA uptime target per service, plus a decommission reason for churn tracking
  • Incident history per service: an external NMS can POST a down/degraded/up/other event by service_id, and NetBox stamps the time it received it rather than trusting a caller-supplied timestamp. Incidents can also be logged by hand from the service detail page
  • MTTR and uptime %, derived from that incident history and shown against the service's own sla_uptime_percent (Meeting SLA / Below SLA). Excludes degraded events by default — only a full down counts against SLA — but that's a toggle (?include_degraded=1), not a fixed rule
  • Filter and search by service ID, description, tenant, status, dates, dependencies, bandwidth/CIR range, SLA uptime, decommission reason, and incident event type/severity
  • A Contracts page: already-expired contracts, plus quick picks for what's expiring this week/month/quarter or by an arbitrary date, all excluding services already decommissioned
  • Impact Search: pick a device, interface, cable, VLAN, prefix, IP address, VRF, ASN, route target, L2VPN, tunnel, or VM, and see every service that would be affected if it were removed — both the services that reference it directly and, through depends_on, the services that depend on those in turn
  • Bulk delete from the list view
  • Changelog, tags, and custom fields (NetBoxModel)
  • REST API under /api/plugins/services/ (list/detail include id, lifecycle fields, and dependencies; query-string filtering works the same as the UI). Technical inventory fields (devices, interfaces, cables, VLANs, prefixes, IP addresses, VRFs, ASNs, route targets, L2VPNs, tunnels, VMs) and depends_on are writable via the API as well as the UI's Assign buttons — set them in the creating POST or a later PATCH
  • CSV export from the list view (Export button) and JSON export via the REST API (?format=json), both respecting whatever filters are currently applied
  • File attachments and native image attachments

Usage

  1. Open Business Services in the plugin menu.
  2. Create a service — ID and type is all you need to start.
  3. On the detail page, hit Assign on each technical card to attach inventory.
  4. Fill in lifecycle dates as the order, install, or disconnect actually happen.
  5. Drop contracts/PDFs under Attachments; photos go on the Images tab.

See examples/ for a worked tutorial per service type (L2VPN, L3VPN, DIA, IP Transit, CDN, Voice), each with the API payload to create it and the UI steps to attach its inventory.

Plugin screenshot

Requirements

  • NetBox 4.4+
  • Python 3.10+

Installation

Install the package:

pip install netbox-services

Or clone this repo next to your NetBox plugins and install it in editable mode if you want to hack on it.

Enable it in configuration.py:

PLUGINS = [
    'netbox_services',
]

Apply migrations and restart NetBox:

python manage.py migrate netbox_services

The UI lives at /plugins/services/. The API lives at /api/plugins/services/.

License

MIT

Metadata

Release files for netbox-services 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for netbox-services 0.9.0
File Size Uploaded Provenance Actions
netbox_services-0.9.0.tar.gz 25.2 kB Without provenance Details for netbox_services-0.9.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for netbox-services 0.9.0
File Interpreter ABI Platform Actions
netbox_services-0.9.0-py3-none-any.whl Python 3 none any Details for netbox_services-0.9.0-py3-none-any.whl

Total release size: 55.6 kB

Release files / netbox_services-0.9.0.tar.gz

Download URL netbox_services-0.9.0.tar.gz
Size 25.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a999290be93e5f3e8d4e313d08d578d0e87cc1f97c0a37e788ab968e42a3805e
BLAKE2b-256 checksum
How to use checksums
9e4ebe2b6e33bf5ae981b34d440e31ec9abc24987f9e78b0d96d91f7359a7458
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / netbox_services-0.9.0-py3-none-any.whl

Download URL netbox_services-0.9.0-py3-none-any.whl
Size 30.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2b63b59338dad719338eeb0c83e0c724182fc297c218e09246e0341c5a7d750b
BLAKE2b-256 checksum
How to use checksums
60978a1928c8596a6afc70e6a9043ea9a29dfd3b4cca55817e5c392e6c498be3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Security for netbox-services 0.9.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page