
La API de VirtualBox permite integrar el hipervisor en inventarios, herramientas de automatización y paneles propios. Antes de escribir código, conviene comprender el papel del servicio SOAP, cómo se identifican los objetos y por qué la autenticación, las sesiones y la seguridad forman parte de la integración.
Esta es la parte 1: los fundamentos de la API, con foco en el acceso remoto mediante el servicio web. En la parte 2, implementamos un cliente en Go para listar máquinas virtuales.
API, VBoxManage y panel web no son lo mismo
O VBoxManage ofrece administración mediante línea de comandos. El servicio web expone interfaces de VirtualBox mediante SOAP, permitiendo llamadas HTTP con XML estructurado. Un panel como el phpVirtualBox se sitúa por encima de esa integración.
El servicio vboxwebsrv recibe llamadas SOAP. No debe confundirse con una API REST que recibe JSON. Una aplicación puede ofrecer REST a sus propios consumidores y traducir esas solicitudes en llamadas SOAP en el backend.
Cliente → SOAP/HTTP → vboxwebsrv → API do VirtualBox → VMs
↓
Saída definida pela aplicação
El SDK y el contrato WSDL
El WSDL describe operaciones, parámetros, espacios de nombres y respuestas del servicio web. Es ese contrato el que guía la implementación del cliente; los nombres de métodos y campos no deben deducirse de una API REST imaginada.
Las operaciones y sus parámetros se han revisado en el WSDL incluido en el SDK oficial 7.2.0, utilizado como referencia documental de la línea 7.2. Esto no es una recomendación para instalar un parche antiguo: usa una versión mantenida de VirtualBox y consulta el SDK correspondiente a tu entorno.
Preparar el servicio con acceso restringido
Necesitas VirtualBox con vboxwebsrv disponible en el host y autenticación del servicio configurada. El ejecutable del servicio pertenece al paquete de VirtualBox; descargar solo el SDK no instala el servidor. La referencia oficial del SDK describe sus opciones y autenticación.
En el host de laboratorio, ejecútalo como el usuario responsable del entorno, no como root. Si el servicio aún no está activo, un inicio en primer plano y solo en loopback es:
vboxwebsrv --host 127.0.0.1 --port 18083
No deshabilites la autenticación para que el ejemplo funcione. El usuario y la contraseña usados en el inicio de sesión SOAP deben coincidir con el mecanismo de autenticación configurado en el servicio, que no es necesariamente idéntico en todas las instalaciones.
El servicio web utiliza HTTP sin cifrado por defecto y normalmente se vincula al localhost. Para acceso entre máquinas, utiliza TLS configurado correctamente o un túnel protegido; no publiques el puerto directamente en internet. Oracle también recomienda ejecutar el servicio como un usuario normal. Guía de seguridad.
Una opción de laboratorio es abrir este túnel en el equipo en el que se ejecutará el cliente:
ssh -N -L 18083:127.0.0.1:18083 usuario@host-virtualbox
Sustituye usuario y host. El cliente seguirá usando http://127.0.0.1:18083/, pero el transporte entre equipos permanecerá dentro de SSH. Si el puerto local ya está ocupado, elige otro y ajústalo VBOX_URL.
Entender referencias, UUIDs y sesiones
Una referencia SOAP es un identificador de objeto utilizado por el servicio durante la sesión; no es necesariamente el UUID de la VM. Un flujo de inventario de solo lectura es:
| Operación | Uso en el cliente |
|---|---|
IWebsessionManager_logon |
Autenticar y obtener la referencia raíz. |
IVirtualBox_getMachines |
Consultar las referencias de las máquinas. |
IMachine_getId |
Obtener el UUID. |
IMachine_getName |
Obtener el nombre. |
IMachine_getState |
Obtener el estado. |
IWebsessionManager_logoff |
Cerrar la sesión. |
No persistas referencias SOAP como si fueran ID permanentes. Para relacionar datos en un inventario, utiliza el UUID devuelto. Para la próxima ejecución, abre una nueva sesión y obtén referencias válidas de nuevo.
¿Y para iniciar VMs, crear instantáneas o cambiar la configuración?
Este es el siguiente nivel de integración, no un simple cambio del nombre del método. Las operaciones de escritura deben respetar estados, bloqueos, sesiones de máquina y seguimiento de progreso definidos por la API. El inicio de sesión del servicio web y una sesión utilizada para bloquear una máquina no deben tratarse como el mismo concepto.
Mi recomendación es implementar cada operación por separado, con autorización, confirmación cuando sea destructiva, pruebas y reconciliación tras un fallo. Una cuenta capaz de consultar también puede tener otros poderes en el servidor; el hecho de que un cliente solo consulte no reduce los privilegios de la credencial.
Para un panel con Echo y Vue, mantenga este adaptador separado de los handlers HTTP. No permita que el navegador elija libremente endpoint, método SOAP y argumentos. Defina servicios explícitos, como listar máquinas, y controle destinos y permisos en el backend.
De la teoría a una integración verificable
Comience con una operación pequeña: autenticar, obtener las máquinas, consultar sus atributos y cerrar la sesión. Valide el contrato, gestione los fallos SOAP y evite registrar credenciales. Solo después añada comandos que modifiquen el estado de las VMs.
En la parte 2: API de VirtualBox en Go, encontrarás los archivos completos del cliente, la salida JSON, los timeouts y las pruebas automatizadas. Para conocer un panel que utiliza esta integración, consulta también el artículo sobre phpVirtualBox.