netbox-nso-plugin
NetBox 4.6 plugin that integrates NetBox with Cisco NSO via the nso-adapter REST API — a bidirectional sync: device state is imported into NetBox, and operator-accepted values become intent that is applied back to the device through NSO (reconcile-mode commits).
Features
- Mark NetBox devices as NSO-managed and choose the managed scopes (interfaces, routing, VLANs/L2, SNMP, logging, …) per device.
- Device NSO tab: counts-first category summaries with lazy row expansion, a merged per-interface table (enabled / description / IPs / MTU / switchport), pagination + search, and inline editing of operator-owned values.
- Read mirrors for: interface attributes/IPs/MTU, VLAN database, switchport, SVI/IRB,
dot1q subinterfaces, L2 services (epipe/vpls SAPs), LACP/LAG, IS-IS (incl. levels,
segment-routing, Flex-Algo), OSPF, BGP (peers/AFs/templates), route policies,
redistribution, static routes, BFD, SNMP (secret-safe), logging hosts — materialised
into native NetBox / netbox-routing objects with
NSO*Statestatus overlays and clobber-safe 3-way merge. - Accept → Apply write path: Accept promotes a value to NetBox-owned intent; one
device Apply commits all pending scopes via the NSO
*-reconcilerservices, with a two-panel preview (intent summary + native device diff). Greenfield writes for operator-created routes, VLANs, policies, SVIs, subinterfaces and more. - Drift handling: value-aware drift display, plus intent split-brain detection (orphaned and partial) with one-click re-sync of the adapter intent mirror — never touches the device.
- Adapter actions from the tab: Sync, Detect drift, Test connection, Apply, with job polling.
- Device onboarding NetBox → NSO (create node, fetch host keys, sync-from) from the NSO Devices dashboard.
- Exposes
NSODeviceManagementat/api/plugins/nso/device-management/for the adapter's self-healing reconcile path.
Requirements
- NetBox ≥ 4.6.0
- Python ≥ 3.12
Installation
pip install netbox-nso-plugin
Add to PLUGINS in configuration.py:
PLUGINS = ["netbox_nso_plugin"]
PLUGINS_CONFIG = {
"netbox_nso_plugin": {
"adapter_url": "https://nso-adapter.example.net",
"adapter_token": "<bearer token>",
}
}
Run migrations:
python manage.py migrate netbox_nso_plugin
Development
See .devcontainer/ for the Docker-based development environment.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netbox_nso_plugin-0.2.0.tar.gz.
File metadata
- Download URL: netbox_nso_plugin-0.2.0.tar.gz
- Upload date:
- Size: 974.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d223df01a6ac1be05c4e25b848cece6c3b4aea1ecc7d92113b873963dcbf0857
|
|
| MD5 |
d6e029d870e44a20e9026ed6ad52ad9c
|
|
| BLAKE2b-256 |
e1188ca627e0522037d925dc759fb432d4bac8ad74535130c5281ec57d1f1731
|
Provenance
The following attestation bundles were made for netbox_nso_plugin-0.2.0.tar.gz:
Publisher:
release.yaml on marcinpsk/netbox-nso-plugin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_nso_plugin-0.2.0.tar.gz -
Subject digest:
d223df01a6ac1be05c4e25b848cece6c3b4aea1ecc7d92113b873963dcbf0857 - Sigstore transparency entry: 2411583421
- Sigstore integration time:
-
Permalink:
marcinpsk/netbox-nso-plugin@56279035862ff3bc3d40adec97bfd36eb7581123 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/marcinpsk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@56279035862ff3bc3d40adec97bfd36eb7581123 -
Trigger Event:
push
-
Statement type:
File details
Details for the file netbox_nso_plugin-0.2.0-py3-none-any.whl.
File metadata
- Download URL: netbox_nso_plugin-0.2.0-py3-none-any.whl
- Upload date:
- Size: 1.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2948eb3cef1aaccd5022db8b16fce2a4e6e645b83558a5cdd1eb11058cd4054
|
|
| MD5 |
db181e9084f7f5f6ba49425a4f10098f
|
|
| BLAKE2b-256 |
b2d5a0ae8360339a0a24aadd5f5395fff7feebc447bf2027eca380c17f58d5cd
|
Provenance
The following attestation bundles were made for netbox_nso_plugin-0.2.0-py3-none-any.whl:
Publisher:
release.yaml on marcinpsk/netbox-nso-plugin
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_nso_plugin-0.2.0-py3-none-any.whl -
Subject digest:
b2948eb3cef1aaccd5022db8b16fce2a4e6e645b83558a5cdd1eb11058cd4054 - Sigstore transparency entry: 2411583491
- Sigstore integration time:
-
Permalink:
marcinpsk/netbox-nso-plugin@56279035862ff3bc3d40adec97bfd36eb7581123 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/marcinpsk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@56279035862ff3bc3d40adec97bfd36eb7581123 -
Trigger Event:
push
-
Statement type: