52 lines
1.7 KiB
Markdown
52 lines
1.7 KiB
Markdown
# Proxmox Config File Parsing for Inventory Mapping
|
|
|
|
## LXC Containers (`/etc/pve/lxc/<CTID>.conf`)
|
|
|
|
Key fields to extract:
|
|
- `hostname: <name>` — container hostname
|
|
- `memory: <MB>` — RAM allocation
|
|
- `cores: <N>` — CPU cores
|
|
- `net0: ... ip=<IP>` or `ip=dhcp` — network config (may be multiple net lines)
|
|
|
|
### Static IP parsing
|
|
```bash
|
|
grep -E '^net[0-9]+:' /etc/pve/lxc/135.conf | grep 'ip='
|
|
# → net0: ... ip=10.0.30.102/24,...
|
|
```
|
|
|
|
### DHCP mapping
|
|
DHCP-assigned CTs do not show an IP in the config. Match by:
|
|
- Hostname from config → runtime `hostname` collected via SSH
|
|
- MAC address (`hwaddr=`) from config → ARP table lookup
|
|
- Or query Proxmox API: `pvesh get /nodes/<node>/lxc/<vmid>/config`
|
|
|
|
## QEMU VMs (`/etc/pve/qemu-server/<VMID>.conf`)
|
|
|
|
- `name: <name>` — VM name
|
|
- `net0: ... bridge=vmbr0,tag=<VLAN>` — network (usually DHCP, no static IP in config)
|
|
|
|
VM IPs are typically assigned by DHCP. To discover:
|
|
```bash
|
|
# From Proxmox node
|
|
arp -a | grep <MAC>
|
|
# Or via API
|
|
pvesh get /nodes/<node>/qemu/<vmid>/agent/network-get-interfaces
|
|
```
|
|
|
|
## Cross-referencing SSH inventory with Proxmox configs
|
|
|
|
1. Collect all CT configs → map `CTID → hostname → config_ip`
|
|
2. Collect all VM configs → map `VMID → name → VLAN`
|
|
3. For each accessible SSH host:
|
|
- Match `hostname` against CT/VM hostname
|
|
- If match found → assign CT/VM ID
|
|
- If no match → mark as "unknown CT/VM or bare metal"
|
|
4. Flag CTs/VMs in range that were NOT accessible (potential gap in scan)
|
|
|
|
## Proxmox API alternative
|
|
|
|
If SSH to Proxmox node is available but direct file parsing is messy:
|
|
```bash
|
|
pvesh get /cluster/resources --output-format json | jq '.[] | select(.type=="lxc" or .type=="qemu") | {id, name, status, node}'
|
|
```
|