libvirt
libvirt / KVM integration
What it does
The Virtualization Agent connects to libvirt (qemu:///system by default), discovers VMs and TAP/bridge interfaces, and reports them to the Manager (POST /api/v1/virtualization/vm-data on heartbeat/discovery). Operators list VMs via /api/v1/virtualization/vms.
Edition
SHARED. Hosting Agents keep virtualization.enabled: false.
Prerequisites
- KVM/libvirt on the Agent host
- Agent unit capabilities including
CAP_NET_ADMIN/CAP_SYS_ADMINas shipped virtualization.enabled: true- Manager admin JWT to read inventory
Required permissions / credentials
- Permission to open
virtualization.libvirt.uri(typically UNIX/var/run/libvirt/libvirt-sock) - Root Agent (virt unit User=root)
- No Zwall-specific libvirt password in YAML (URI may include one — treat as secret)
Configuration
Agent YAML virtualization.*: enabled, platform (kvm), libvirt.uri, libvirt.read_only, discovery.interval / cache_ttl, events.enabled, events.auto_apply_rules. Also agent.vm_bridge_name, agent.interfaces.
Setup
- Confirm
virsh list --allworks as root on the host. - Set
virtualization.enabled: trueand the bridge name you actually use (exampleviifbr0is not mandatory). - Restart
zwall-agent.service. GET /api/v1/virtualization/vmsas admin.
Verification
- Agent heartbeat includes
vmswhen inventory is healthy GET /api/v1/virtualization/interfacesnon-empty on a host with TAP devicesPOST /api/v1/virtualization/discoveryrefreshes
Expected signals / results
VM start events can trigger rule apply when auto_apply_rules is true on enforcement Agents. Isolation APIs operate on this inventory.
Failure modes
Scroll sideways to see the full table. Use the arrow keys when focused.
| Symptom | Meaning |
|---|---|
| 503 Virtualization service not initialized | Manager virt service nil |
| empty VM list | Agent not reporting / libvirt down |
| 404 VM not found | stale id |
Troubleshooting
systemctl status libvirtd- Socket permissions
- Wrong
vm_bridge_name - Hosting profile will not attach XDP drop programs
Security considerations
libvirt access is host-root equivalent. Read-only URI reduces accidental VM control but inventory still exposes MAC/IP. Do not publish VM names as public telemetry.
Limitations
- KVM/libvirt is the documented path;
proxmox/xenstrings are not certified products - Not a VMware/Hyper-V integration
- No published VM scale