
A API do VirtualBox permite integrar o hipervisor a inventários, ferramentas de automação e painéis próprios. Antes de escrever código, vale entender o papel do serviço SOAP, como os objetos são identificados e por que autenticação, sessões e segurança fazem parte da integração.
Esta é a parte 1: os fundamentos da API, com foco no acesso remoto pelo web service. Na parte 2, implementamos um cliente em Go para listar máquinas virtuais.
API, VBoxManage e painel web não são a mesma coisa
O VBoxManage oferece administração por linha de comando. O web service expõe interfaces do VirtualBox por SOAP, permitindo chamadas HTTP com XML estruturado. Um painel como o phpVirtualBox fica acima dessa integração.
O serviço vboxwebsrv recebe chamadas SOAP. Ele não deve ser confundido com uma API REST que recebe JSON. Uma aplicação pode oferecer REST aos seus próprios consumidores e traduzir essas solicitações em chamadas SOAP no backend.
Cliente → SOAP/HTTP → vboxwebsrv → API do VirtualBox → VMs
↓
Saída definida pela aplicação
O SDK e o contrato WSDL
O WSDL descreve operações, parâmetros, namespaces e respostas do web service. É esse contrato que orienta a implementação do cliente; nomes de métodos e campos não devem ser deduzidos de uma API REST imaginada.
As operações e seus parâmetros foram conferidos no WSDL incluído no SDK oficial 7.2.0, usado como referência documental da linha 7.2. Isso não é recomendação para instalar um patch antigo: use uma versão mantida do VirtualBox e confira o SDK correspondente ao seu ambiente.
Preparar o serviço com acesso restrito
Você precisa de VirtualBox com vboxwebsrv disponível no host e autenticação do serviço configurada. O executável do serviço pertence ao pacote do VirtualBox; baixar o SDK sozinho não instala o servidor. A referência oficial do SDK descreve suas opções e autenticação.
No host de laboratório, execute como o usuário responsável pelo ambiente, não como root. Se o serviço ainda não estiver ativo, um início em primeiro plano e somente no loopback é:
vboxwebsrv --host 127.0.0.1 --port 18083
Não desabilite a autenticação para fazer o exemplo funcionar. O usuário e a senha usados no login SOAP devem corresponder ao mecanismo de autenticação configurado no serviço, que não é necessariamente idêntico em todas as instalações.
O web service usa HTTP sem criptografia por padrão e normalmente se vincula ao localhost. Para acesso entre máquinas, utilize TLS configurado corretamente ou um túnel protegido; não publique a porta diretamente na internet. A Oracle também orienta executar o serviço como usuário comum. Guia de segurança.
Uma opção de laboratório é abrir este túnel no computador em que o cliente será executado:
ssh -N -L 18083:127.0.0.1:18083 usuario@host-virtualbox
Substitua usuário e host. O cliente continuará usando http://127.0.0.1:18083/, mas o transporte entre computadores ficará dentro do SSH. Se a porta local já estiver ocupada, escolha outra e ajuste VBOX_URL.
Entender referências, UUIDs e sessões
Uma referência SOAP é um identificador de objeto utilizado pelo serviço durante a sessão; não é necessariamente o UUID da VM. Um fluxo de inventário somente leitura é:
| Operação | Uso no cliente |
|---|---|
IWebsessionManager_logon |
Autenticar e obter a referência raiz. |
IVirtualBox_getMachines |
Consultar as referências das máquinas. |
IMachine_getId |
Obter o UUID. |
IMachine_getName |
Obter o nome. |
IMachine_getState |
Obter o estado. |
IWebsessionManager_logoff |
Encerrar a sessão. |
Não persista referências SOAP como se fossem IDs permanentes. Para relacionar dados em um inventário, use o UUID retornado. Para a próxima execução, abra uma nova sessão e obtenha referências válidas novamente.
E para iniciar VMs, criar snapshots ou alterar configurações?
Esse é o próximo nível de integração, não uma simples troca do nome do método. Operações de escrita precisam respeitar estados, bloqueios, sessões de máquina e acompanhamento de progresso definidos pela API. O login do web service e uma sessão usada para bloquear uma máquina não devem ser tratados como o mesmo conceito.
Minha recomendação é implementar cada operação separadamente, com autorização, confirmação quando destrutiva, testes e reconciliação após falha. Uma conta capaz de consultar também pode ter outros poderes no servidor; o fato de um cliente só consultar não reduz os privilégios da credencial.
Para um painel com Echo e Vue, mantenha este adaptador separado dos handlers HTTP. Não permita que o navegador escolha livremente endpoint, método SOAP e argumentos. Defina serviços explícitos, como listar máquinas, e controle destinos e permissões no backend.
Da teoria para uma integração testável
Comece com uma operação pequena: autenticar, obter as máquinas, consultar seus atributos e encerrar a sessão. Valide o contrato, trate falhas SOAP e evite registrar credenciais. Só depois acrescente comandos que alteram o estado das VMs.
Na parte 2: API do VirtualBox em Go, você encontra os arquivos completos do cliente, saída JSON, timeouts e testes automatizados. Para conhecer um painel que usa essa integração, veja também o artigo sobre phpVirtualBox.