harry’s memorandum

おれおれメモ

VirtualBoxのAPIで楽しく仮想化ライフ (2)

続きです。
http://dharry.hatenablog.com/entry/20120828/1346096024

VirtualBoxには VBoxManage というCLIがあるので、これを使うと色々遊べたりします。
例えば、VMの一覧表示や起動停止といった一般的な操作だけではなく、VMの中のコマンドを実行するようなえげつないこともできます。

$ VBoxManage list          (VM一覧取得)
$ VBoxManage showinfo      (VMの情報取得)
$ VBoxManage controlvm     (VMを起動停止)
$ VBoxManage guestcontrol  (VMを起動)

WindowsXPのVMを起動してXenCenterを起動するようなシェルスクリプトは数分でできたりします。私はUbuntuからXenCenterを使うために、こんなシェルスクリプトでXenCenterをシームレスモードで起動して活用しています。

まずはVMの一覧を取得。

$ VBoxManage list vms
"windowsxpps3" {0f264a29-2e96-4fd5-8870-6df96fe334fe}
"debian6" {18f307e9-173e-42d4-b3bd-39665af9b176}
"ubuntu1204" {edba9b7a-c28b-4469-9256-566c6e27641a}


UUIDを指定してVMを起動して guestcontrol サブコマンドでXenCenterを起動します。

#!/bin/bash

uuid=0f264a29-2e96-4fd5-8870-6df96fe334fe
username=myuser
password=mypassword
image="C:\\Program Files\\Citrix\\XenCenter\\XenCenter.exe"

state=`VBoxManage showvminfo ${uuid} | awk '{ if($1 ~/^State:/) { print $2 } }'`

if [ ${state} !=  "running" ]; then
  echo "vm: ${$uuid} not running."
  exit 1
fi

VBoxManage --nologo guestcontrol ${uuid} execute \
   --image "${image}" \
   --username ${username} \
   --password ${password} \
   --wait-stdout

echo "Succeeded: run ${image}"

exit 0