Skip to content

celeroncool/proxmox-to-netbox

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proxmox to Netbox sync scripts

This repository contains scripts for synchronizing VMs and LXCs data from Proxmox VE to NetBox Virtual Machines.

proxmox_export.py generates a JSON file proxmox_vms.json containing Proxmox VE VMs and LXCs.

netbox_import.py proxmox_vms.json imports data from the JSON file into NetBox. Existing Virtual Machines in NetBox will be updated.

Setup

Virtual Environment (Optional)

Create and activate a virtual environment:

python -m venv venv
source venv/bin/activate  # On Windows, use: venv\Scripts\activate

Install Dependencies

Install required packages:

pip install -r requirements.txt

Credentials

Proxmox

Requires a API key with read permissions to /vms and /nodes paths.

  1. Create new account under Datacenter -> Permissions -> Users -> Add.
  2. Select "Proxmox VE authentication" as realm
  3. Create new API token for user.
  4. Assign role "PVEAuditor" for API key and user/group under paths "/nodes" and "/vms" under Datacenter -> Permissions -> Add.

Netbox

Requires write permissions to create and update data. Create a new user, assign correct permissions and add new API key.

Environment Configuration

Create a .env file from the example:

cp example.env .env

Edit the .env file with your configuration values.

Running the Application

Ensure that you created a Device in NetBox for the Proxmox node.

Run the proxmox_export.py script:

python ./proxmox_export.py

Check the output file proxmox_vms.json.

Run the netbox_import.py script:

python ./netbox_import.py proxmox_vms.json

Imported data

[
  {
    "name": "nextcloud", // vm/lxc name from proxmox for creating Virtual Machine in NetBox
    "type": "qemu", // Virtualization type, maps to "platform" in netbox
    "ostype": null, // null for VM, ostype for LXC. Will create a Platform in NetBox if not exists
    "vcpu": 2, // cpu count
    "ram_mb": "16384", // memory in MB
    "disks": [ // all virtual machine disks
      {
        "name": "scsi0",
        "size_gb": 40,
        "description": "local-zfs:vm-600-disk-1,cache=writethrough,discard=on,iothread=1,size=40G,ssd=1"
      }
    ],
    "interfaces": [ // interface names starting with br-/lo/Loopback/veth/docker_/tun are ignored
      {
        "name": "ens18", // interface name inside VM/LXC. Will create a interface in NetBox if not exists and link to VM
        "mac": "bc:24:11:37:a6:6a", // mac address. Will create a mac address in NetBox if not exists and link to interface and it IP addresses
        "ip_addresses": [
          {
            "ip": "192.168.42.25",
            "prefix": 25
          },
          {
            "ip": "dead:b33f:a1a1:fa04:be24:11ff:fe11:a563", // ignores link-local addresses
            "prefix": 64
          }
        ]
      }
    ],
    "host": "pve-01" // Proxmox node name, used for linking Virtual Machine to Device in NetBox
  },
  {
    "name": "jellyfin",
    "type": "lxc",
    "ostype": "ubuntu",
    "vcpu": 2,
    "ram_mb": 2048,
    "disks": [
      {
        "name": "rootfs",
        "size_gb": 20,
        "description": "local-zfs:subvol-109-disk-0,size=20G"
      }
    ],
    "interfaces": [
      {
        "name": "eth0",
        "mac": "bc:24:11:3c:e2:6c",
        "ip_addresses": [] // Only includes IP addresses if set manually in config.
      },
      {
        "name": "enp0s18",
        "mac": "02:49:15:03:3c:e4",
        "ip_addresses": [
          {
            "ip": "192.168.10.22",
            "prefix": 24
          }
        ]
      }
    ],
    "host": "pve-01"
  }
]

License

MIT

About

Scripts for synchronising VMs and LXCs data from Proxmox VE to NetBox Virtual Machines

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%