Discover Cisco Catalyst SD-WAN Edge devices in vManage and sync them into NetBox.
Project description
NetBox vManage Sync
NetBox vManage Sync is a NetBox 4.6 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.
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
- 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
Screenshots used below are stored under docs/images/.
Settings
Discovered Devices
Device Mapping
Sync Preview
Sync Runs
Sync Run Details
NetBox Device Result
Site Mapping Result
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.
Project details
Release history Release notifications | RSS feed
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_vmanage_sync-0.1.0.tar.gz.
File metadata
- Download URL: netbox_vmanage_sync-0.1.0.tar.gz
- Upload date:
- Size: 41.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e7ee35b2f8ce7b18349faa3470e841118af9596db462a3522fad6239db53d9d
|
|
| MD5 |
782744a0dfa5d8a6fc17eeb77c9fb847
|
|
| BLAKE2b-256 |
eafdce5f3776a0886d4a2ff26378889202843ebd8bb874a62dc11ed53fa74b00
|
Provenance
The following attestation bundles were made for netbox_vmanage_sync-0.1.0.tar.gz:
Publisher:
publish.yml on Bleblas2/netbox-vmanage-sync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_vmanage_sync-0.1.0.tar.gz -
Subject digest:
3e7ee35b2f8ce7b18349faa3470e841118af9596db462a3522fad6239db53d9d - Sigstore transparency entry: 2191341142
- Sigstore integration time:
-
Permalink:
Bleblas2/netbox-vmanage-sync@e4240d1684dd8da14f799bfca674da7eea57e477 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Bleblas2
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e4240d1684dd8da14f799bfca674da7eea57e477 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file netbox_vmanage_sync-0.1.0-py3-none-any.whl.
File metadata
- Download URL: netbox_vmanage_sync-0.1.0-py3-none-any.whl
- Upload date:
- Size: 53.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71c8b609823572ae410cc1880c94b255ba949bbca75a7a4d9932a01dfe6ec73a
|
|
| MD5 |
1f42e506a6de0a14f025468787b1aaae
|
|
| BLAKE2b-256 |
88dd76305ba439d3eddb463900138a98966f00ff7711010b86c2cf038f7db09b
|
Provenance
The following attestation bundles were made for netbox_vmanage_sync-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Bleblas2/netbox-vmanage-sync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_vmanage_sync-0.1.0-py3-none-any.whl -
Subject digest:
71c8b609823572ae410cc1880c94b255ba949bbca75a7a4d9932a01dfe6ec73a - Sigstore transparency entry: 2191341169
- Sigstore integration time:
-
Permalink:
Bleblas2/netbox-vmanage-sync@e4240d1684dd8da14f799bfca674da7eea57e477 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Bleblas2
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e4240d1684dd8da14f799bfca674da7eea57e477 -
Trigger Event:
workflow_dispatch
-
Statement type: