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?"
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.
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.
- 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
POSTa down/up event byservice_id, and NetBox stamps the time it received it rather than trusting a caller-supplied timestamp - Filter and search by service ID, description, tenant, status, dates, dependencies, bandwidth/CIR range, SLA uptime, decommission reason, and incident event type/severity
- 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 includeid, lifecycle fields, and dependencies; query-string filtering works the same as the UI) - File attachments and native image attachments
- Open Business Services in the plugin menu.
- Create a service — ID and type is all you need to start.
- On the detail page, hit Assign on each technical card to attach inventory.
- Fill in lifecycle dates as the order, install, or disconnect actually happen.
- Drop contracts/PDFs under Attachments; photos go on the Images tab.
- NetBox 4.4+
- Python 3.10+
Install the package:
pip install netbox-servicesOr 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_servicesThe UI lives at /plugins/services/. The API lives at /api/plugins/services/.
MIT
