Skip to main content

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

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, and vBond) 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 existing is 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:

  1. NetBox Site custom field SdwanSiteId equals vManage site-id.
  2. Site names match after replacing _ and - with spaces, collapsing whitespace, and comparing case-insensitively.
  3. 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

  1. Open Plugins → vManage Sync → Settings.
  2. Enter the vManage base URL, username, password, SSL settings, and save.
  3. Open Device vManage Config and click Discover from vManage.
  4. Review automatic Site matches and correct unmatched devices manually.
  5. Enable only the Edge devices intended for import.
  6. Open an Edge row, select Preview sync, inspect the snapshot, and apply it.
  7. 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

NetBox vManage Sync animated demo

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_check
  • GET /dataservice/client/token
  • GET /dataservice/device
  • GET /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.0 and 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 interfaces skips 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-ip address becomes primary IPv4 when assigned to the device.
  • Preferred primary IPv4 interface can select an interface such as Loopback1000; when it is absent or has no usable address, primary IPv4 falls back to system-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.py coordinates Preview and Apply.
  • interfaces.py handles interfaces, MAC addresses, and admin-status filtering.
  • addresses.py handles IP assignments and primary IP selection.
  • fhrp.py handles VRRP groups, memberships, and VIPs.
  • sites.py manages the SdwanSiteId written during Apply.
  • tags.py propagates tags selected in Settings.
  • result.py stores 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)

Source distribution for netbox-vmanage-sync 0.1.2
File Size Uploaded
netbox_vmanage_sync-0.1.2.tar.gz 42.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for netbox-vmanage-sync 0.1.2
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

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