NetBox vCenter Server Plugin
A NetBox plugin for viewing and importing VMs from VMware vCenter servers.
Features
- Multi-vCenter Support - Connect to multiple vCenter servers (cached separately)
- VM Dashboard - View all VMs from vCenter with power state, vCPUs, memory, and disk
- VM Import - Import VMs from vCenter into NetBox with one click
- Comparison View - Compare vCenter VMs with NetBox to find differences
- Manual Cache Control - Data persists until you click Refresh
- MFA/2FA Support - Works with environments requiring multi-factor authentication
Requirements
- NetBox 4.0 or higher
- Python 3.10+
- VMware vSphere 7.0+ (tested with vSphere 8.0.3)
Installation
From PyPI (recommended)
pip install netbox-vcenter-server
From Source
git clone https://github.com/sieteunoseis/netbox-vcenter-server.git
cd netbox-vcenter-server
pip install -e .
Docker Installation
Add to your NetBox Docker requirements file:
# requirements-extra.txt
netbox-vcenter-server
Configuration
Add the plugin to your NetBox configuration:
# configuration.py or plugins.py
PLUGINS = [
'netbox_vcenter',
]
PLUGINS_CONFIG = {
'netbox_vcenter': {
# Required: List of vCenter servers to choose from
'vcenter_servers': [
'vc-server1.example.com',
'vc-server2.example.com',
],
# Optional: saved credentials per server, to skip the manual login form.
# Intended for a dedicated read-only service account that does not require
# MFA - servers without an entry here still show the manual login form
# (e.g. for MFA-enabled accounts).
'vcenter_credentials': {
'vc-server1.example.com': {
'username': 'svc-netbox@vsphere.local',
'password': 'changeme',
},
},
# Connection settings
'timeout': 60, # Timeout for vCenter connections (seconds)
'verify_ssl': False, # SSL verification (False for self-signed certs)
# MFA/2FA settings (optional)
'mfa_enabled': True, # Show MFA warning in UI
'mfa_label': 'MFA', # Label shown in UI (e.g., "Duo", "2FA", "MFA")
'mfa_message': 'Check your authenticator after clicking Connect & Sync.',
# Name matching for duplicate detection
# Options: "exact" (full name), "hostname" (strip domain), "regex"
'name_match_mode': 'hostname',
'name_match_pattern': r'^([^.]+)', # Used with "regex" mode
# Import settings
'normalize_imported_name': True, # "WebServer01.example.com" -> "webserver01"
'default_tag': '', # Tag slug to apply (e.g., "vcenter-sync")
'default_role': '', # Role slug (e.g., "server")
'default_platform': '', # Platform slug (e.g., "vmware")
'default_vrf': '', # VRF name to scope IP dedup/creation (e.g., "management")
'default_tenant': '', # Tenant slug applied to IP addresses created during import
}
}
All of a VM's network adapters are synced, not just the primary one: each
becomes a NetBox VMInterface named to match vSphere's own adapter number
(vSphere's "Network Adapter 1" becomes NetBox interface eth1), with its
MAC address, connected/enabled state, and IP addresses attached. IP lookups
reuse an existing IPAM record for the address whenever one already exists
(regardless of its prefix length), instead of creating a duplicate /32.
When a new record does need to be created, its prefix length is derived
from the most specific containing NetBox Prefix. Set default_vrf if you
use VRFs, so lookups and new records stay scoped to the correct one; set
default_tenant to tag newly created IP addresses with a tenant.
Per-interface MTU is not synced yet (vSphere reports this at the
vSwitch/portgroup level, not directly on the adapter).
Each of a VM's hard disks is also synced as a NetBox VirtualDisk (name and
size). Disks and interfaces removed from a VM in vCenter are left in place
in NetBox rather than deleted.
Usage
Syncing VMs from vCenter
- Navigate to Plugins > vCenter Dashboard
- Select a vCenter server from the dropdown
- Enter your username and password
- Click Connect & Sync
- If MFA is enabled, approve the authentication prompt
- VMs will be fetched and cached (data persists until you click Refresh)
Importing VMs to NetBox
- From the VM list, check the boxes next to VMs you want to import
- Click Import Selected to NetBox
- Select the target NetBox cluster
- Click Import
- VMs are created in NetBox with vCPUs, memory, disk, and status
Comparing vCenter with NetBox
- Navigate to Plugins > Compare with NetBox
- Select a vCenter server
- View:
- Only in vCenter - VMs that can be imported
- Only in NetBox - VMs not found in vCenter (orphaned?)
- Spec Differences - VMs with mismatched vCPUs, memory, or disk
Screenshots
Coming soon
Troubleshooting
Connection errors
- Verify vCenter hostname is reachable from the NetBox server
- Check that credentials are correct (use
domain\usernameformat) - For self-signed certificates, set
verify_ssl: False - If using MFA/2FA, ensure you approve the authentication prompt promptly
Authentication issues
- Use format
DOMAIN\usernameorusername@domain - Ensure the account has at least read-only access to vCenter
Development
Setup
git clone https://github.com/sieteunoseis/netbox-vcenter-server.git
cd netbox-vcenter-server
pip install -e ".[dev]"
Code Style
black netbox_vcenter/
isort netbox_vcenter/
flake8 netbox_vcenter/
Changelog
See CHANGELOG.md for release history.
Support
If you find this plugin helpful, consider supporting development:
License
Apache License 2.0 - See LICENSE for details.
Author
sieteunoseis (@sieteunoseis)
Release files for netbox-vcenter-server 0.6.1
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_vcenter_server-0.6.1.tar.gz | 33.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| netbox_vcenter_server-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 67.8 kB
Release files / netbox_vcenter_server-0.6.1.tar.gz
| Download URL | netbox_vcenter_server-0.6.1.tar.gz |
|---|---|
| Size | 33.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
da5f35c430049e64267c6686ba0e0685e4449267dde2c0a7a9487cc74946ed80
|
|
BLAKE2b-256 checksum How to use checksums |
1988b549602d4d1fc50535b351f6c7de18d90d18a1af8ed44d932202c766809a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.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 Sep 3, 2026.
Transparency logRelease files / netbox_vcenter_server-0.6.1-py3-none-any.whl
| Download URL | netbox_vcenter_server-0.6.1-py3-none-any.whl |
|---|---|
| Size | 34.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
544c3f18899bf5448c6d6c50ae59d3aa6a0e6ad74a23b5fc69a38ee3394961d6
|
|
BLAKE2b-256 checksum How to use checksums |
2473a55be5a942c69c2cdce1027d86c33b9a9a5b8d0d1ea962b3f983281ec069
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.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 Sep 3, 2026.
Transparency log