NetBox vManage Sync
NetBox vManage Sync is a NetBox plugin for discovering Cisco Catalyst SD-WAN Edge devices from Cisco vManage / Catalyst SD-WAN Manager and synchronizing their inventory into NetBox.
The plugin reads from vManage and writes controlled changes to NetBox: devices,
interfaces, IP addresses, MAC addresses, primary IPs, and VRRP/FHRP objects.
Access to the vManage API is read-only: the plugin retrieves inventory and
operational data but never changes vManage configuration. The authentication
POST only establishes a session; all inventory requests use GET.
Discovery is safe by default: controllers are ignored, discovered Edge devices are
disabled until explicitly enabled, and NetBox writes are add-only unless
Update existing is enabled.
Contents
- What It Does
- Safety Model
- Site Matching
- Installation
- First Run
- Screenshots
- vManage API Endpoints
- Data Rules
- Development
- Acknowledgements
What It Does
NetBox vManage Sync helps keep NetBox aligned with Cisco SD-WAN Edge inventory.
- Discovers Edge devices from vManage.
- Maps discovered devices to NetBox Sites.
- Previews changes before applying them.
- Creates or updates NetBox Devices, Interfaces, IP addresses, MAC addresses, primary IP assignments, and FHRP/VRRP objects.
- Records Sync Runs with source snapshots, counters, warnings, and created objects.
- Supports reverting objects created by a selected Apply run.
- Runs manual single-device syncs and bulk sync jobs through NetBox workers.
Safety Model
- vManage is used as a read-only data source; the plugin never pushes configuration changes to it.
- Controllers (
vManage,vSmart, andvBond) are never imported. - Discovered Edge devices are disabled by default, so hubs require an explicit enable.
- The plugin never deletes objects during discovery or sync.
- Revert deletes only objects recorded as created by a selected apply run.
- Existing devices are skipped while
Update existingis disabled. - Passwords and session tokens are never written to plugin logs.
Site matching
The plugin preserves a manual Site selection first. Otherwise it tries, in order:
- NetBox Site custom field
SdwanSiteIdequals vManagesite-id. - Site names match after replacing
_and-with spaces, collapsing whitespace, and comparing case-insensitively. - The uniquely nearest Site is within the configured GPS limit (default 1 km).
Ambiguous matches remain unassigned and must be selected in Device vManage Config.
Installation
Install the plugin into the NetBox Python environment:
source /opt/netbox/venv/bin/activate
pip install netbox-vmanage-sync
Enable the plugin in the NetBox configuration:
PLUGINS = [
"netbox_vmanage_sync",
]
Then migrate and restart NetBox and its worker:
cd /opt/netbox/netbox
python manage.py migrate netbox_vmanage_sync
sudo systemctl restart netbox netbox-rq
Docker
For containerized NetBox deployments, install the plugin into your NetBox image
and mount a NetBox configuration file that enables it, for example
configuration/plugins.py:
PLUGINS = [
"netbox_vmanage_sync",
]
Default Configuration
These defaults can be overridden in PLUGINS_CONFIG:
PLUGINS_CONFIG = {
"netbox_vmanage_sync": {
"ignored_interface_names": [
"nvi0",
"vmanage_system",
"null0",
"appnav-compress",
],
"ignored_interface_patterns": [
r"virtualportgroup\d+",
r"loopback655\d{2}",
r"service-engine.*",
],
"default_platform_name": "Cisco SD-WAN",
"default_platform_slug": "sd-wan-cisco",
"sdwan_site_id_field": "SdwanSiteId",
"controller_types": ["vmanage", "vsmart", "vbond", "vedge-vbond"],
"edge_types": ["vedge", "cedge"],
},
}
First run
- Open Plugins → vManage Sync → Settings.
- Enter the vManage base URL, username, password, SSL settings, and save.
- Open Device vManage Config and click Discover from vManage.
- Review automatic Site matches and correct unmatched devices manually.
- Enable only the Edge devices intended for import.
- Open an Edge row, select Preview sync, inspect the snapshot, and apply it.
- After validating several devices, use Sync and Apply all enabled devices on the device list. Confirm the eligible count and follow the queued NetBox job.
Screenshots
Individual screenshots and reusable absolute links are available in
docs/images/README.md.
vManage API Endpoints
The client uses the same session flow as the site-creator project:
POST /j_security_checkGET /dataservice/client/tokenGET /dataservice/deviceGET /dataservice/device/interface?deviceId=<system-ip>GET /dataservice/device/vrrp?deviceId=<system-ip>
Data rules
- IPv4 netmasks returned separately by vManage are converted to CIDR prefixes.
0.0.0.0and zero MAC addresses are ignored.- A physical interface wins when vManage repeats the same address on
Tunnel0. - IPv6 without an explicit prefix is reported and skipped rather than guessed.
Ignore disabled interfacesskips interfaces whose vManage Admin Status is down, together with their IP addresses, MAC addresses, and FHRP memberships.- Interfaces with an all-zero MAC or matching the configured ignored interface rules are removed before Preview and are not stored in Sync Run snapshots. See Default Configuration for the editable defaults.
- The vManage
system-ipaddress becomes primary IPv4 when assigned to the device. Preferred primary IPv4 interfacecan select an interface such asLoopback1000; when it is absent or has no usable address, primary IPv4 falls back tosystem-ip.- The first assigned global IPv6 address becomes primary IPv6.
- VRRP data creates a NetBox FHRP group, interface assignment, priority, and VIP.
- Tags selected in vManage Sync Settings are added to every tag-capable object created or synchronized by Apply. Existing tags on those objects are preserved.
Development
The public netbox_vmanage_sync.engine module is a compatibility facade. The
implementation is split by responsibility under netbox_vmanage_sync.sync:
orchestrator.pycoordinates Preview and Apply.interfaces.pyhandles interfaces, MAC addresses, and admin-status filtering.addresses.pyhandles IP assignments and primary IP selection.fhrp.pyhandles VRRP groups, memberships, and VIPs.sites.pymanages theSdwanSiteIdwritten during Apply.tags.pypropagates tags selected in Settings.result.pystores counters, warnings, changes, and synchronized objects.
Run local checks before submitting changes:
python3 -m compileall netbox_vmanage_sync
pytest -q
git diff --check
Acknowledgements
Development of this plugin was assisted by OpenAI Codex.
Metadata
Release files for netbox-vmanage-sync 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| netbox_vmanage_sync-0.1.2.tar.gz | 42.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| netbox_vmanage_sync-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 96.1 kB
Release files / netbox_vmanage_sync-0.1.2.tar.gz
| Download URL | netbox_vmanage_sync-0.1.2.tar.gz |
|---|---|
| Size | 42.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
68fb704c9f5e6050ecbb0db0923a09063916e7bfdc331129ddfe83a8bda897e9
|
|
BLAKE2b-256 checksum How to use checksums |
7e1e5909216870b04d984f3f986c73d9bdbbf1e4506dd684491eef39b3afc9f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2026.
Transparency logRelease files / netbox_vmanage_sync-0.1.2-py3-none-any.whl
| Download URL | netbox_vmanage_sync-0.1.2-py3-none-any.whl |
|---|---|
| Size | 54.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b60fafa5827feacf96377a71c2e8d95eee0b65cdc7a20c4a88849159ff272a28
|
|
BLAKE2b-256 checksum How to use checksums |
7cc332f48ab0c98dc76af13d7771099f3533d824e1d3d4b846d87b8dad8942d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 29, 2026.
Transparency log