module LoomExt::CoreMods::VM::Virtualbox::Actions

Public Instance Methods

check_exists(vm) click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 11
def check_exists(vm)
  loom.test "vboxmanage showvminfo #{vm}".split
end
check_running(vm) click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 15
def check_running(vm)
  loom.test "vboxmanage list runningvms".split, :pipe_to => [
    "grep \"#{vm}\"".split
  ]
end
clone(src_vm, dst_vm, options: :link, snapshot: nil, take_snapshot: true) click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 47
def clone(src_vm, dst_vm, options: :link, snapshot: nil, take_snapshot: true)
  raise DuplicateVMImport, "VM already exists => #{dst_vm}" if check_exists(dst_vm)
  raise UnknownVM, src_vm unless check_exists(src_vm)

  cmd = ["vboxmanage clonevm #{src_vm}"]
  cmd << "--snapshot #{snapshot}" if snapshot
  cmd << "--options #{options}" if options
  cmd << "--name #{dst_vm}"
  cmd << "--register"
  cmd = cmd.join " "

  loom << cmd.split

  if take_snapshot
    snapshot dst_vm, action: :take, snapshot_name: "#{dst_vm}:clone"
  end
end
down(vm) click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 73
def down(vm)
  if check_running(vm)
    loom << "vboxmanage controlvm #{vm} acpipowerbutton".split
  else
    Loom.log.warn "VM #{vm} not running, nothing to do"
  end
end
import(ova_file, vm, disk, take_snapshot: true) click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 35
def import(ova_file, vm, disk, take_snapshot: true)
  raise DuplicateVMImport, vm if check_exists(vm)

  loom << "vboxmanage import #{ova_file} \
      --vsys 0 --vmname #{vm} \
      --vsys 0 --unit 12 --disk '#{disk}'".split

  if take_snapshot
    snapshot vm, action: :take, snapshot_name: "#{vm}:import"
  end
end
list() click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 21
def list
  loom << "vboxmanage list vms".split
end
snapshot(vm, action: :take, snapshot_name: nil) click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 25
def snapshot(vm, action: :take, snapshot_name: nil)
  raise UnknownVM, vm unless check_exists(vm)

  cmd = ["vboxmanage snapshot #{vm} #{action}"]
  cmd <<  snapshot_name if snapshot_name
  cmd = cmd.join " "

  loom << cmd.split
end
up(vm) click to toggle source
# File lib/loomext/coremods/vm/vbox.rb, line 65
def up(vm)
  unless check_running(vm)
    loom << "vboxmanage startvm #{vm} --type headless".split
  else
    Loom.log.warn "VM #{vm} already running, nothing to do"
  end
end