Sha256: 8ac491ae383550d1cfe970a2a04e1b2500ce09c29f7884192f6785bbb70fef2a

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

module VBOX
  class VM
    attr_accessor :name, :uuid, :memory_size, :dir_size, :state, :all_vars

    def initialize
      @all_vars = {}
    end

    %w'start pause resume reset poweroff savestate acpipowerbutton acpisleepbutton destroy'.each do |action|
      define_method "#{action}!" do
        VBOX.api.send( action, uuid || name )
      end
    end

    def clone! params
      raise "argument must be a Hash" unless params.is_a?(Hash)
      raise "no :snapshot key" unless params[:snapshot]
      r = VBOX.api.clone self.name, params
      case r
      when Array
        if r.first.is_a?(VM)
          r
        else
          r.map{ |name| VM.find(name) }
        end
      when String
        VM.find(r)
      when nil
        nil
      else
        r
      end
    end

    def dir_size
      @dir_size ||=
        begin
          VBOX.api.get_vm_details(self) unless @all_vars['CfgFile']
          return nil unless v=@all_vars['CfgFile']
          dir = File.dirname(v.tr('"',''))
          `du -sm "#{dir}"`.split("\t").first.tr("M","").to_i
        end
    end

    class << self
      def all
        VBOX.api.list_vms
      end

      def first
        all.first
      end

      def find name_or_uuid
        VBOX.api.get_vm_details name_or_uuid
      end

      alias :[] :find
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vbox-ng-0.1.3 lib/vbox/vm.rb
vbox-ng-0.1.2 lib/vbox/vm.rb