Synchronize Proxmox Virtual Environment (PVE) information to a NetBox instance https://pypi.org/project/netbox-pve-sync/
Find a file
Aloïs Micard 0c82c4ecf8
All checks were successful
CI / ci (push) Successful in 33s
Allow to configure NetBox cluster ID
Closes: #5
2025-02-19 17:42:02 +01:00
.forgejo/workflows Clean-up module 2025-02-19 13:41:57 +01:00
netbox_pve_sync Allow to configure NetBox cluster ID 2025-02-19 17:42:02 +01:00
.gitignore Clean-up module 2025-02-19 13:41:57 +01:00
LICENSE.txt Clean-up module 2025-02-19 13:41:57 +01:00
pyproject.toml Clean-up module 2025-02-19 13:41:57 +01:00
README.md Clean-up module 2025-02-19 13:41:57 +01:00
requirements.txt Clean-up module 2025-02-19 13:41:57 +01:00

netbox-pve-sync

Synchronize Proxmox Virtual Environment (PVE) information to a NetBox instance. This allows automatic tracking of Virtual Machines, disks, IP addresses/prefixes, MAC addresses, VLANs, ...

How does it work?

This script work by pulling VMs information from the PVE API and create/update/delete resources on NetBox.

Installation

Configuration

On NetBox

You'll need to create a dedicated user (ex: netbox-pve-sync) on your NetBox instance and then create a write API token.

The following env variables will need to be set:

  • NB_API_URL: The URL to your NetBox instance. (ex: https://netbox.example.org)
  • NB_API_TOKEN: The token created previously. (ex: f74cb99cf552b7005fd1a616b53efba2ce0c9656)

You'll also need to perform a minimal configuration on NetBox:

  • Create the physical nodes hosting the cluster. (The name should match the one on Proxmox, so that the script can correctly link the VMs to the physical host)
  • Create the cluster.
  • Add the following Custom Fields:
Name Object types Label Type
autostart Virtual Machine Autostart Boolean
backup Virtual Disk Backup Boolean
dns_name Prefix DNS Name Text

On the PVE API

You'll need to create a dedicated user (ex: netsync) on your PVE cluster and then create an API token.

The user needs to have access to the VM.Monitor, Pool.Audit, VM.Audit permissions.

The following env variables will need to be set:

  • PVE_API_HOST: The DNS/IP to your PVE instance. (ex: 10.10.0.10)
  • PVE_API_USER: The username of the account created previously. (ex: netsync@pve)
  • PVE_API_TOKEN: The name of the API token created previously. (ex: test-token)
  • PVE_API_SECRET: The API token created previously (ex: 4d46dc0a-6363-47a2-98df-d5cdfefa33d2)

Executing the script

You can then execute the script using the following command:

PVE_API_HOST=xx PVE_API_USER=xx PVE_API_TOKEN=xx PVE_API_SECRET=xx NB_API_URL=xx NB_API_TOKEN=xx python3 -m netbox_pve_sync