vbox-ng Build Status Dependency Status

Description

A comfortable way of doing common VirtualBox tasks.

Installation

gem install vbox-ng

Commandline usage

# vbox -h

USAGE:
  vbox [options]                           - list VMs
  vbox [options] <vm_name>                 - show VM params
  vbox [options] <vm_name> <param>=<value> - change VM params (name, cpus, usb, etc)
  vbox [options] <vm_name> <command>       - make some action (start, reset, etc) on VM

COMMANDS:
  start, pause, resume, reset, poweroff, savestate,
  acpipowerbutton, acpisleepbutton, clone, delete, show, snapshots

OPTIONS:
  -g, --[no-]glob                  assume <vm_name> is a wildcard & run on multiple VMs.
                                   All glob(7) patterns are supported plus additional
                                   pattern "{1-20}" - expands to a sequence: 1,2,3,...,19,20
  -n, --dry-run                    do not change anything, just print commands to be invoked
  -v, --verbose                    increase verbosity
  -N, --clones N                   clone: make N clones
  -S, --snapshot MODE              clone: use LAST shapshot or make NEW
      --name NAME                  clone: name for the clone VM
  -H, --headless                   start: start VM in headless mode
  -h, --help                       show this message

EXAMPLES:
  vbox -v                        - list VMs with memory and dir sizes
  vbox "d{1-10}" list            - list only VMs named 'd1','d2','d3',...,'d10'
  vbox "test*" start             - start VMs which name starts with 'test'
  vbox "v[ace]" cpus=2 acpi=on   - set number of cpus & ACPI on VMs named 'va','vc','ve'
  vbox d0                        - list all parameters of VM named 'd0'
  vbox d0 clone -c 10 -S last    - make 10 new linked clones of vm 'd0' using the
                                   latest hdd snapshot, if any
  vbox d0 clone -c 10 -S new     - make ONE new shapshot of VM 'd0' and then make
                                   10 new clones linked to this snapshot
  vbox "tmp?" delete             - try to destroy all VMs which name is 4 letters long
                                   and starts with 'tmp'
  vbox ae340207-f472-4d63-80e7-855fca6808cb
                                 - list all parameters of VM with this GUID
  vbox --no-glob "*wtf?!*" rm    - destroy VM which name is '*wtf?!*'

Ruby examples

Clone first VM

# irb
>> require 'vbox'
=> true
>> vm = VBOX::VM.first
=> #<VBOX::VM:0x000000012c5320 @all_vars={}, @uuid="{ae340207-f472-4d63-80e7-855fca6808cb}", @name="d0">
>> vm2 = vm.clone! :snapshot => :last
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Machine has been successfully cloned as "d1"
[.] old macaddress1=dec0de000000
[.] new macaddress1=dec0de000001
=> #<VBOX::VM:0x00000001315820 @all_vars={}, @uuid="{59d9af2a-4401-4b38-ad74-b5c6c6b45a81}", @name="d1">

Find VM by name and start it

>> vm2 = VBOX::VM.find 'd14'
>> vm2.start!
[.] $DISPLAY is not set, assuming --headless
Waiting for VM "59d9af2a-4401-4b38-ad74-b5c6c6b45a81" to power on...
VM "59d9af2a-4401-4b38-ad74-b5c6c6b45a81" has been successfully started.
=> true

Stop VM and destroy it (delete all its files)

>> vm2 = VBOX::VM.find 'd14'
>> vm2.poweroff!
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
=> true
>> vm2.destroy!
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
=> true
>> vm2 = VBOX::VM.find 'd14'
=> nil

Calculate total disk space occupied by all VMs

>> VBOX::VM.all.map(&:dir_size).inject(&:+)
=> 20271

Show all VMs sorted by directory size in reverse order

>> VBOX::VM.all.sort_by(&:dir_size).reverse.each{ |vm| printf "%5d %s\n", vm.dir_size, vm.name }
 9175 xp
 5336 rwthCTF2012 vulnbox final
 2962 ubuntu 12.04.1
 2184 d0
  109 u2
   87 u1