Script Bash para aguardar o encerramento do Virtualbox VM?

6

O Virtualbox tem a capacidade de emitir um comando para uma VM em execução:

vboxmanage controlvm NameOfRunningVM acpipowerbutton

No entanto, este comando retorna imediatamente, o que resulta em desligamento não-gracioso para minha situação.

A situação: Eu planejo usar isso em um script /etc/init.d. Isso permitiria o desligamento normal de todas as VMs em execução. Atualmente, quando emito o comando vboxmanage controlvm NameOfRunningVM acpipowerbutton , o desligamento é interrompido porque o comando não espera que a VM seja desligada.

Eu preciso de um script Bash que tome como entrada o nome da máquina Virtualbox e um tempo limite em segundos, em seguida, aguarda a VM retornar ao estado "poweroff" ou o tempo limite ocorre?

Não sei qual é a melhor maneira de fazer isso.

Eu estava pensando em verificar o estado da VM com o seguinte comando:

[user@machine ~]$ vboxmanage list runningvms
"VirtualMachineName" {65c93f1f-4508-4119-b07d-ce9e89b23b8e}

O script bash talvez estivesse pesquisando uma lista de VMs em execução. Quando o nome da máquina deixar de ser listado, a VM será considerada concluída.

    
por Trevor Boyd Smith 07.02.2013 / 16:48

1 resposta

12

Usando o polling, isso pode ser feito assim:

#!/bin/bash
MACHINE=$1
echo "Waiting for machine $MACHINE to poweroff..."

until $(VBoxManage showvminfo --machinereadable $MACHINE | grep -q ^VMState=.poweroff.)
do
  sleep 1
done
    
por 12.02.2013 / 12:50