virtualbox 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +0 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/virtualbox/abstract_model/attributable.rb +1 -0
- data/lib/virtualbox/abstract_model/validatable.rb +133 -10
- data/lib/virtualbox/abstract_model.rb +3 -3
- data/lib/virtualbox/appliance.rb +5 -2
- data/lib/virtualbox/audio_adapter.rb +11 -3
- data/lib/virtualbox/bios.rb +10 -4
- data/lib/virtualbox/com/abstract_enum.rb +6 -5
- data/lib/virtualbox/com/abstract_implementer.rb +4 -2
- data/lib/virtualbox/com/abstract_interface.rb +6 -4
- data/lib/virtualbox/com/base_interface.rb +38 -0
- data/lib/virtualbox/com/ffi/interface.rb +14 -5
- data/lib/virtualbox/com/ffi/interfaces.rb +36 -32
- data/lib/virtualbox/com/ffi/util.rb +22 -4
- data/lib/virtualbox/com/ffi_interface.rb +39 -8
- data/lib/virtualbox/com/implementer/base.rb +2 -2
- data/lib/virtualbox/com/implementer/ffi.rb +55 -44
- data/lib/virtualbox/com/implementer/mscom.rb +2 -4
- data/lib/virtualbox/com/interface/3.1.x/appliance.rb +22 -0
- data/lib/virtualbox/com/interface/3.1.x/audio_adapter.rb +15 -0
- data/lib/virtualbox/com/interface/3.1.x/audio_controller_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/audio_driver_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/bios_boot_menu_mode.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/bios_settings.rb +21 -0
- data/lib/virtualbox/com/interface/3.1.x/clipboard_mode.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/console.rb +50 -0
- data/lib/virtualbox/com/interface/3.1.x/cpu_property_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/device_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/dhcp_server.rb +22 -0
- data/lib/virtualbox/com/interface/3.1.x/firmware_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/guest_os_type.rb +23 -0
- data/lib/virtualbox/com/interface/3.1.x/host.rb +42 -0
- data/lib/virtualbox/com/interface/3.1.x/host_network_interface.rb +30 -0
- data/lib/virtualbox/com/interface/3.1.x/host_network_interface_medium_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/host_network_interface_status.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/host_network_interface_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/host_usb_device.rb +13 -0
- data/lib/virtualbox/com/interface/3.1.x/host_usb_device_filter.rb +13 -0
- data/lib/virtualbox/com/interface/3.1.x/hw_virt_ex_property_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/machine.rb +105 -0
- data/lib/virtualbox/com/interface/3.1.x/machine_state.rb +14 -0
- data/lib/virtualbox/com/interface/3.1.x/medium.rb +50 -0
- data/lib/virtualbox/com/interface/3.1.x/medium_attachment.rb +18 -0
- data/lib/virtualbox/com/interface/3.1.x/medium_format.rb +18 -0
- data/lib/virtualbox/com/interface/3.1.x/medium_state.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/medium_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/medium_variant.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/network_adapter.rb +30 -0
- data/lib/virtualbox/com/interface/3.1.x/network_adapter_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/network_attachment_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/nsiexception.rb +23 -0
- data/lib/virtualbox/com/interface/3.1.x/nsisupports.rb +15 -0
- data/lib/virtualbox/com/interface/3.1.x/parallel_port.rb +17 -0
- data/lib/virtualbox/com/interface/3.1.x/port_mode.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/progress.rb +63 -0
- data/lib/virtualbox/com/interface/3.1.x/serial_port.rb +19 -0
- data/lib/virtualbox/com/interface/3.1.x/session.rb +18 -0
- data/lib/virtualbox/com/interface/3.1.x/session_state.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/session_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/shared_folder.rb +17 -0
- data/lib/virtualbox/com/interface/3.1.x/snapshot.rb +20 -0
- data/lib/virtualbox/com/interface/3.1.x/storage_bus.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/storage_controller.rb +23 -0
- data/lib/virtualbox/com/interface/3.1.x/storage_controller_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/system_properties.rb +37 -0
- data/lib/virtualbox/com/interface/3.1.x/usb_controller.rb +20 -0
- data/lib/virtualbox/com/interface/3.1.x/usb_device.rb +24 -0
- data/lib/virtualbox/com/interface/3.1.x/usb_device_filter.rb +23 -0
- data/lib/virtualbox/com/interface/3.1.x/usb_device_filter_action.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/usb_device_state.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/virtual_box_error_info.rb +17 -0
- data/lib/virtualbox/com/interface/3.1.x/virtual_system_description.rb +19 -0
- data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_type.rb +14 -0
- data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_value_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/virtualbox.rb +67 -0
- data/lib/virtualbox/com/interface/3.1.x/vrdp_auth_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.1.x/vrdp_server.rb +19 -0
- data/lib/virtualbox/com/interface/3.2.x/appliance.rb +22 -0
- data/lib/virtualbox/com/interface/3.2.x/audio_adapter.rb +15 -0
- data/lib/virtualbox/com/interface/3.2.x/audio_controller_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/audio_driver_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/bios_boot_menu_mode.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/bios_settings.rb +21 -0
- data/lib/virtualbox/com/interface/3.2.x/clipboard_mode.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/console.rb +50 -0
- data/lib/virtualbox/com/interface/3.2.x/cpu_property_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/device_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/dhcp_server.rb +22 -0
- data/lib/virtualbox/com/interface/3.2.x/firmware_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/guest.rb +13 -0
- data/lib/virtualbox/com/interface/3.2.x/guest_os_type.rb +33 -0
- data/lib/virtualbox/com/interface/3.2.x/host.rb +43 -0
- data/lib/virtualbox/com/interface/3.2.x/host_network_interface.rb +30 -0
- data/lib/virtualbox/com/interface/3.2.x/host_network_interface_medium_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/host_network_interface_status.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/host_network_interface_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/host_usb_device.rb +13 -0
- data/lib/virtualbox/com/interface/3.2.x/host_usb_device_filter.rb +13 -0
- data/lib/virtualbox/com/interface/3.2.x/hw_virt_ex_property_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/keyboard_hid_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/machine.rb +118 -0
- data/lib/virtualbox/com/interface/3.2.x/machine_state.rb +14 -0
- data/lib/virtualbox/com/interface/3.2.x/medium.rb +51 -0
- data/lib/virtualbox/com/interface/3.2.x/medium_attachment.rb +18 -0
- data/lib/virtualbox/com/interface/3.2.x/medium_format.rb +18 -0
- data/lib/virtualbox/com/interface/3.2.x/medium_state.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/medium_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/medium_variant.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/nat_alias_mode.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/nat_engine.rb +27 -0
- data/lib/virtualbox/com/interface/3.2.x/nat_protocol.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/network_adapter.rb +34 -0
- data/lib/virtualbox/com/interface/3.2.x/network_adapter_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/network_attachment_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/nsiexception.rb +23 -0
- data/lib/virtualbox/com/interface/3.2.x/nsisupports.rb +15 -0
- data/lib/virtualbox/com/interface/3.2.x/parallel_port.rb +17 -0
- data/lib/virtualbox/com/interface/3.2.x/pointing_hid_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/port_mode.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/progress.rb +63 -0
- data/lib/virtualbox/com/interface/3.2.x/serial_port.rb +19 -0
- data/lib/virtualbox/com/interface/3.2.x/session.rb +18 -0
- data/lib/virtualbox/com/interface/3.2.x/session_state.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/session_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/shared_folder.rb +17 -0
- data/lib/virtualbox/com/interface/3.2.x/snapshot.rb +20 -0
- data/lib/virtualbox/com/interface/3.2.x/storage_bus.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/storage_controller.rb +24 -0
- data/lib/virtualbox/com/interface/3.2.x/storage_controller_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/system_properties.rb +42 -0
- data/lib/virtualbox/com/interface/3.2.x/usb_controller.rb +21 -0
- data/lib/virtualbox/com/interface/3.2.x/usb_device.rb +24 -0
- data/lib/virtualbox/com/interface/3.2.x/usb_device_filter.rb +23 -0
- data/lib/virtualbox/com/interface/3.2.x/usb_device_filter_action.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/usb_device_state.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/virtual_box_error_info.rb +17 -0
- data/lib/virtualbox/com/interface/3.2.x/virtual_system_description.rb +19 -0
- data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_type.rb +14 -0
- data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_value_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/virtualbox.rb +67 -0
- data/lib/virtualbox/com/interface/3.2.x/vrdp_auth_type.rb +11 -0
- data/lib/virtualbox/com/interface/3.2.x/vrdp_server.rb +21 -0
- data/lib/virtualbox/com/mscom_interface.rb +9 -4
- data/lib/virtualbox/com/nil_interface.rb +7 -0
- data/lib/virtualbox/com/util.rb +16 -2
- data/lib/virtualbox/com.rb +1 -1
- data/lib/virtualbox/cpu.rb +61 -0
- data/lib/virtualbox/dhcp_server.rb +89 -0
- data/lib/virtualbox/dvd.rb +2 -2
- data/lib/virtualbox/exceptions.rb +4 -0
- data/lib/virtualbox/ext/platform.rb +2 -2
- data/lib/virtualbox/extra_data.rb +5 -6
- data/lib/virtualbox/forwarded_port.rb +11 -7
- data/lib/virtualbox/global.rb +17 -6
- data/lib/virtualbox/hard_drive.rb +129 -66
- data/lib/virtualbox/host.rb +71 -0
- data/lib/virtualbox/host_network_interface.rb +137 -0
- data/lib/virtualbox/hw_virtualization.rb +12 -6
- data/lib/virtualbox/lib.rb +2 -2
- data/lib/virtualbox/media.rb +2 -2
- data/lib/virtualbox/medium.rb +10 -3
- data/lib/virtualbox/medium_attachment.rb +2 -2
- data/lib/virtualbox/network_adapter.rb +12 -4
- data/lib/virtualbox/proxies/collection.rb +26 -6
- data/lib/virtualbox/shared_folder.rb +22 -15
- data/lib/virtualbox/snapshot.rb +185 -0
- data/lib/virtualbox/storage_controller.rb +3 -3
- data/lib/virtualbox/system_properties.rb +1 -1
- data/lib/virtualbox/usb_controller.rb +8 -4
- data/lib/virtualbox/usb_device_filter.rb +74 -0
- data/lib/virtualbox/version.rb +12 -1
- data/lib/virtualbox/virtual_system_description.rb +4 -4
- data/lib/virtualbox/vm.rb +273 -64
- data/lib/virtualbox/vrdp_server.rb +59 -0
- data/test/test_helper.rb +7 -1
- data/test/virtualbox/abstract_model/attributable_test.rb +8 -0
- data/test/virtualbox/abstract_model/relatable_test.rb +5 -5
- data/test/virtualbox/abstract_model/validatable_test.rb +186 -3
- data/test/virtualbox/abstract_model_test.rb +3 -3
- data/test/virtualbox/appliance_test.rb +8 -1
- data/test/virtualbox/com/abstract_enum_test.rb +1 -0
- data/test/virtualbox/com/abstract_implementer_test.rb +4 -3
- data/test/virtualbox/com/abstract_interface_test.rb +3 -2
- data/test/virtualbox/com/ffi/interface_test.rb +4 -4
- data/test/virtualbox/com/ffi/util_test.rb +23 -1
- data/test/virtualbox/com/implementer/base_test.rb +4 -3
- data/test/virtualbox/com/implementer/ffi_test.rb +18 -10
- data/test/virtualbox/cpu_test.rb +103 -0
- data/test/virtualbox/dhcp_server_test.rb +165 -0
- data/test/virtualbox/extra_data_test.rb +4 -3
- data/test/virtualbox/forwarded_port_test.rb +17 -4
- data/test/virtualbox/hard_drive_test.rb +54 -5
- data/test/virtualbox/host_network_interface_test.rb +254 -0
- data/test/virtualbox/host_test.rb +94 -0
- data/test/virtualbox/network_adapter_test.rb +30 -1
- data/test/virtualbox/proxies/collection_test.rb +63 -21
- data/test/virtualbox/shared_folder_test.rb +16 -13
- data/test/virtualbox/snapshot_test.rb +231 -0
- data/test/virtualbox/storage_controller_test.rb +1 -1
- data/test/virtualbox/usb_controller_test.rb +7 -0
- data/test/virtualbox/usb_device_filter_test.rb +93 -0
- data/test/virtualbox/version_test.rb +13 -1
- data/test/virtualbox/vm_test.rb +245 -11
- data/test/virtualbox/vrdp_server_test.rb +83 -0
- data/virtualbox.gemspec +183 -97
- metadata +182 -96
- data/TODO +0 -9
- data/lib/virtualbox/com/interface/appliance.rb +0 -20
- data/lib/virtualbox/com/interface/audio_adapter.rb +0 -13
- data/lib/virtualbox/com/interface/audio_controller_type.rb +0 -9
- data/lib/virtualbox/com/interface/audio_driver_type.rb +0 -9
- data/lib/virtualbox/com/interface/bios_boot_menu_mode.rb +0 -9
- data/lib/virtualbox/com/interface/bios_settings.rb +0 -19
- data/lib/virtualbox/com/interface/clipboard_mode.rb +0 -9
- data/lib/virtualbox/com/interface/console.rb +0 -48
- data/lib/virtualbox/com/interface/cpu_property_type.rb +0 -9
- data/lib/virtualbox/com/interface/device_type.rb +0 -9
- data/lib/virtualbox/com/interface/dhcp_server.rb +0 -20
- data/lib/virtualbox/com/interface/firmware_type.rb +0 -9
- data/lib/virtualbox/com/interface/guest_os_type.rb +0 -21
- data/lib/virtualbox/com/interface/host.rb +0 -40
- data/lib/virtualbox/com/interface/host_network_interface.rb +0 -28
- data/lib/virtualbox/com/interface/host_network_interface_medium_type.rb +0 -9
- data/lib/virtualbox/com/interface/host_network_interface_status.rb +0 -9
- data/lib/virtualbox/com/interface/host_network_interface_type.rb +0 -9
- data/lib/virtualbox/com/interface/host_usb_device.rb +0 -11
- data/lib/virtualbox/com/interface/host_usb_device_filter.rb +0 -11
- data/lib/virtualbox/com/interface/hw_virt_ex_property_type.rb +0 -9
- data/lib/virtualbox/com/interface/machine.rb +0 -103
- data/lib/virtualbox/com/interface/machine_state.rb +0 -12
- data/lib/virtualbox/com/interface/medium.rb +0 -48
- data/lib/virtualbox/com/interface/medium_attachment.rb +0 -16
- data/lib/virtualbox/com/interface/medium_format.rb +0 -16
- data/lib/virtualbox/com/interface/medium_state.rb +0 -9
- data/lib/virtualbox/com/interface/medium_type.rb +0 -9
- data/lib/virtualbox/com/interface/medium_variant.rb +0 -9
- data/lib/virtualbox/com/interface/network_adapter.rb +0 -28
- data/lib/virtualbox/com/interface/network_adapter_type.rb +0 -9
- data/lib/virtualbox/com/interface/network_attachment_type.rb +0 -9
- data/lib/virtualbox/com/interface/nsiexception.rb +0 -21
- data/lib/virtualbox/com/interface/nsisupports.rb +0 -13
- data/lib/virtualbox/com/interface/parallel_port.rb +0 -15
- data/lib/virtualbox/com/interface/port_mode.rb +0 -9
- data/lib/virtualbox/com/interface/progress.rb +0 -58
- data/lib/virtualbox/com/interface/serial_port.rb +0 -17
- data/lib/virtualbox/com/interface/session.rb +0 -16
- data/lib/virtualbox/com/interface/session_state.rb +0 -9
- data/lib/virtualbox/com/interface/session_type.rb +0 -9
- data/lib/virtualbox/com/interface/shared_folder.rb +0 -15
- data/lib/virtualbox/com/interface/snapshot.rb +0 -18
- data/lib/virtualbox/com/interface/storage_bus.rb +0 -9
- data/lib/virtualbox/com/interface/storage_controller.rb +0 -21
- data/lib/virtualbox/com/interface/storage_controller_type.rb +0 -9
- data/lib/virtualbox/com/interface/system_properties.rb +0 -35
- data/lib/virtualbox/com/interface/usb_controller.rb +0 -18
- data/lib/virtualbox/com/interface/usb_device.rb +0 -22
- data/lib/virtualbox/com/interface/usb_device_filter.rb +0 -21
- data/lib/virtualbox/com/interface/usb_device_filter_action.rb +0 -9
- data/lib/virtualbox/com/interface/usb_device_state.rb +0 -9
- data/lib/virtualbox/com/interface/virtual_box_error_info.rb +0 -15
- data/lib/virtualbox/com/interface/virtual_system_description.rb +0 -17
- data/lib/virtualbox/com/interface/virtual_system_description_type.rb +0 -12
- data/lib/virtualbox/com/interface/virtual_system_description_value_type.rb +0 -9
- data/lib/virtualbox/com/interface/virtualbox.rb +0 -54
- data/lib/virtualbox/com/interface/vrdp_auth_type.rb +0 -9
- data/lib/virtualbox/com/interface/vrdp_server.rb +0 -17
data/lib/virtualbox/vm.rb
CHANGED
|
@@ -16,10 +16,49 @@ module VirtualBox
|
|
|
16
16
|
# objects. This is best shown through example:
|
|
17
17
|
#
|
|
18
18
|
# vm = VirtualBox::VM.find("MyWindowsXP")
|
|
19
|
-
# vm.
|
|
19
|
+
# vm.memory_size = 256
|
|
20
20
|
# vm.name = "WindowsXP"
|
|
21
21
|
# vm.save
|
|
22
22
|
#
|
|
23
|
+
# # Controlling Virtual Machines
|
|
24
|
+
#
|
|
25
|
+
# Virtual machines can be controlled using the basic {#start}, {#stop}, etc.
|
|
26
|
+
# methods. The current state of the VM can also be retrieved via the {#state}
|
|
27
|
+
# method. An example of this use is shown below:
|
|
28
|
+
#
|
|
29
|
+
# if vm.powered_off?
|
|
30
|
+
# vm.start
|
|
31
|
+
# end
|
|
32
|
+
#
|
|
33
|
+
# # Taking a Snapshot
|
|
34
|
+
#
|
|
35
|
+
# Snapshots allow virtual machine states to be saved at a given point in time
|
|
36
|
+
# without having to stop the machine. This state can then be restored later.
|
|
37
|
+
# VirtualBox handles this by creating a differencing image which allows the hard
|
|
38
|
+
# drive to even retain its exact state. Taking a snapshot is extremely simple:
|
|
39
|
+
#
|
|
40
|
+
# vm = VirtualBox::VM.find("MyWindowsXP")
|
|
41
|
+
# vm.take_snapshot("My Snapshot", "A description of my snapshot")
|
|
42
|
+
#
|
|
43
|
+
# # Traversing Snapshots
|
|
44
|
+
#
|
|
45
|
+
# Snapshots are represented by a tree-like structure. There is a root snapshot
|
|
46
|
+
# and that snapshot has many children which may in turn have their own children.
|
|
47
|
+
# The easiest way to traverse this structure is to use the {#root_snapshot}
|
|
48
|
+
# VM method and traverse the structure like any tree structure:
|
|
49
|
+
#
|
|
50
|
+
# vm = VirtualBox::VM.find("MyWindowsXP")
|
|
51
|
+
# p vm.root_snapshot.children.length
|
|
52
|
+
#
|
|
53
|
+
# # Finding Snapshots
|
|
54
|
+
#
|
|
55
|
+
# While traversing the entire snapshot tree can be useful, it is often more
|
|
56
|
+
# useful to be able to simply find a snapshot by name. For this, use the
|
|
57
|
+
# {#find_snapshot} method:
|
|
58
|
+
#
|
|
59
|
+
# vm = VirtualBox::VM.find("MyWindowsXP")
|
|
60
|
+
# p vm.find_snapshot("PreSP3")
|
|
61
|
+
#
|
|
23
62
|
# # Attributes and Relationships
|
|
24
63
|
#
|
|
25
64
|
# Properties of the virtual machine are exposed using standard ruby instance
|
|
@@ -39,40 +78,36 @@ module VirtualBox
|
|
|
39
78
|
# This is copied directly from the class header, but lists all available
|
|
40
79
|
# attributes. If you don't understand what this means, read {Attributable}.
|
|
41
80
|
#
|
|
42
|
-
# attribute :uuid, :readonly => true
|
|
81
|
+
# attribute :uuid, :readonly => true, :property => :id
|
|
43
82
|
# attribute :name
|
|
44
|
-
# attribute :
|
|
45
|
-
# attribute :description
|
|
46
|
-
# attribute :
|
|
47
|
-
# attribute :
|
|
48
|
-
# attribute :
|
|
49
|
-
# attribute :
|
|
50
|
-
# attribute :
|
|
51
|
-
# attribute :
|
|
52
|
-
# attribute :
|
|
53
|
-
# attribute :
|
|
54
|
-
# attribute :
|
|
55
|
-
# attribute :
|
|
56
|
-
# attribute :
|
|
57
|
-
# attribute :
|
|
58
|
-
# attribute :
|
|
59
|
-
# attribute :
|
|
60
|
-
# attribute :
|
|
61
|
-
# attribute :
|
|
62
|
-
# attribute :
|
|
63
|
-
# attribute :
|
|
64
|
-
# attribute :
|
|
65
|
-
# attribute :
|
|
66
|
-
# attribute :
|
|
67
|
-
# attribute :
|
|
68
|
-
# attribute :
|
|
69
|
-
# attribute :
|
|
70
|
-
# attribute :
|
|
71
|
-
# attribute :
|
|
72
|
-
# attribute :vrdpport
|
|
73
|
-
# attribute :vrdpauthtype
|
|
74
|
-
# attribute :vrdpauthtimeout
|
|
75
|
-
# attribute :state, :populate_key => :vmstate, :readonly => true
|
|
83
|
+
# attribute :os_type_id
|
|
84
|
+
# attribute :description
|
|
85
|
+
# attribute :memory_size
|
|
86
|
+
# attribute :memory_balloon_size
|
|
87
|
+
# attribute :vram_size
|
|
88
|
+
# attribute :cpu_count
|
|
89
|
+
# attribute :accelerate_3d_enabled, :boolean => true
|
|
90
|
+
# attribute :accelerate_2d_video_enabled, :boolean => true
|
|
91
|
+
# attribute :clipboard_mode
|
|
92
|
+
# attribute :monitor_count
|
|
93
|
+
# attribute :state, :readonly => true
|
|
94
|
+
# attribute :accessible, :readonly => true, :boolean => true
|
|
95
|
+
# attribute :hardware_version
|
|
96
|
+
# attribute :hardware_uuid
|
|
97
|
+
# attribute :firmware_type
|
|
98
|
+
# attribute :snapshot_folder
|
|
99
|
+
# attribute :settings_file_path, :readonly => true
|
|
100
|
+
# attribute :last_state_change, :readonly => true
|
|
101
|
+
# attribute :state_file_path, :readonly => true
|
|
102
|
+
# attribute :log_folder, :readonly => true
|
|
103
|
+
# attribute :snapshot_count, :readonly => true
|
|
104
|
+
# attribute :current_state_modified, :readonly => true
|
|
105
|
+
# attribute :guest_property_notification_patterns
|
|
106
|
+
# attribute :teleporter_enabled, :boolean => true
|
|
107
|
+
# attribute :teleporter_port
|
|
108
|
+
# attribute :teleporter_address
|
|
109
|
+
# attribute :teleporter_password
|
|
110
|
+
# attribute :interface, :readonly => true, :property => false
|
|
76
111
|
#
|
|
77
112
|
# ## Relationships
|
|
78
113
|
#
|
|
@@ -80,31 +115,39 @@ module VirtualBox
|
|
|
80
115
|
# to other things. The relationships are listed below. If you don't
|
|
81
116
|
# understand this, read {Relatable}.
|
|
82
117
|
#
|
|
83
|
-
# relationship :
|
|
84
|
-
# relationship :
|
|
85
|
-
# relationship :
|
|
86
|
-
# relationship :
|
|
87
|
-
# relationship :
|
|
88
|
-
# relationship :
|
|
118
|
+
# relationship :audio_adapter, :AudioAdapter
|
|
119
|
+
# relationship :bios, :BIOS
|
|
120
|
+
# relationship :hw_virt, :HWVirtualization
|
|
121
|
+
# relationship :cpu, :CPU
|
|
122
|
+
# relationship :vrdp_server, :VRDPServer
|
|
123
|
+
# relationship :storage_controllers, :StorageController, :dependent => :destroy
|
|
124
|
+
# relationship :medium_attachments, :MediumAttachment
|
|
125
|
+
# relationship :shared_folders, :SharedFolder
|
|
126
|
+
# relationship :extra_data, :ExtraData
|
|
127
|
+
# relationship :forwarded_ports, :ForwardedPort
|
|
128
|
+
# relationship :network_adapters, :NetworkAdapter
|
|
129
|
+
# relationship :usb_controller, :USBController
|
|
130
|
+
# relationship :current_snapshot, :Snapshot
|
|
89
131
|
#
|
|
90
132
|
class VM < AbstractModel
|
|
91
133
|
attribute :uuid, :readonly => true, :property => :id
|
|
92
134
|
attribute :name
|
|
93
135
|
attribute :os_type_id
|
|
94
|
-
attribute :description
|
|
136
|
+
attribute :description
|
|
95
137
|
attribute :memory_size
|
|
96
138
|
attribute :memory_balloon_size
|
|
97
139
|
attribute :vram_size
|
|
98
140
|
attribute :cpu_count
|
|
99
|
-
attribute :accelerate_3d_enabled
|
|
100
|
-
attribute :accelerate_2d_video_enabled
|
|
141
|
+
attribute :accelerate_3d_enabled, :boolean => true
|
|
142
|
+
attribute :accelerate_2d_video_enabled, :boolean => true
|
|
101
143
|
attribute :clipboard_mode
|
|
102
144
|
attribute :monitor_count
|
|
103
145
|
attribute :state, :readonly => true
|
|
104
|
-
attribute :accessible, :readonly => true
|
|
146
|
+
attribute :accessible, :readonly => true, :boolean => true
|
|
105
147
|
attribute :hardware_version
|
|
106
148
|
attribute :hardware_uuid
|
|
107
|
-
|
|
149
|
+
# TODO: Removed in 3.2.x, how should we handle this?
|
|
150
|
+
# attribute :statistics_update_interval
|
|
108
151
|
attribute :firmware_type
|
|
109
152
|
attribute :snapshot_folder
|
|
110
153
|
attribute :settings_file_path, :readonly => true
|
|
@@ -114,14 +157,19 @@ module VirtualBox
|
|
|
114
157
|
attribute :snapshot_count, :readonly => true
|
|
115
158
|
attribute :current_state_modified, :readonly => true
|
|
116
159
|
attribute :guest_property_notification_patterns
|
|
117
|
-
attribute :teleporter_enabled
|
|
160
|
+
attribute :teleporter_enabled, :boolean => true
|
|
118
161
|
attribute :teleporter_port
|
|
119
162
|
attribute :teleporter_address
|
|
120
163
|
attribute :teleporter_password
|
|
164
|
+
attribute :boot_order,
|
|
165
|
+
:property_getter => Proc.new { |instance, *args| instance.get_boot_order(*args) },
|
|
166
|
+
:property_setter => Proc.new { |instance, *args| instance.set_boot_order(*args) }
|
|
121
167
|
attribute :interface, :readonly => true, :property => false
|
|
122
168
|
relationship :audio_adapter, :AudioAdapter
|
|
123
169
|
relationship :bios, :BIOS
|
|
124
170
|
relationship :hw_virt, :HWVirtualization
|
|
171
|
+
relationship :cpu, :CPU
|
|
172
|
+
relationship :vrdp_server, :VRDPServer
|
|
125
173
|
relationship :storage_controllers, :StorageController, :dependent => :destroy
|
|
126
174
|
relationship :medium_attachments, :MediumAttachment
|
|
127
175
|
relationship :shared_folders, :SharedFolder
|
|
@@ -129,8 +177,9 @@ module VirtualBox
|
|
|
129
177
|
relationship :forwarded_ports, :ForwardedPort
|
|
130
178
|
relationship :network_adapters, :NetworkAdapter
|
|
131
179
|
relationship :usb_controller, :USBController
|
|
180
|
+
relationship :current_snapshot, :Snapshot
|
|
132
181
|
|
|
133
|
-
class <<self
|
|
182
|
+
class << self
|
|
134
183
|
# Returns an array of all available VMs.
|
|
135
184
|
#
|
|
136
185
|
# @return [Array<VM>]
|
|
@@ -155,7 +204,7 @@ module VirtualBox
|
|
|
155
204
|
# the first virtual machine will be returned, although all will
|
|
156
205
|
# be imported.
|
|
157
206
|
#
|
|
158
|
-
# If a block is given, it will be yielded with the
|
|
207
|
+
# If a block is given, it will be yielded with the progress of the
|
|
159
208
|
# import operation, so that the progress of the import can be
|
|
160
209
|
# tracked.
|
|
161
210
|
#
|
|
@@ -168,6 +217,14 @@ module VirtualBox
|
|
|
168
217
|
end
|
|
169
218
|
|
|
170
219
|
def populate_relationship(caller, machines)
|
|
220
|
+
machines.is_a?(Array) ? populate_array_relationship(caller, machines) : populate_single_relationship(caller, machines)
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def populate_single_relationship(caller, machine)
|
|
224
|
+
new(machine)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def populate_array_relationship(caller, machines)
|
|
171
228
|
result = Proxies::Collection.new(caller)
|
|
172
229
|
|
|
173
230
|
machines.each do |machine|
|
|
@@ -206,6 +263,14 @@ module VirtualBox
|
|
|
206
263
|
existing_record!
|
|
207
264
|
end
|
|
208
265
|
|
|
266
|
+
# Reload the model so that all the attributes and relationships are
|
|
267
|
+
# up to date. This method will automatically discard any changes to
|
|
268
|
+
# the VM and any of its relationships.
|
|
269
|
+
def reload
|
|
270
|
+
initialize_attributes(interface)
|
|
271
|
+
self
|
|
272
|
+
end
|
|
273
|
+
|
|
209
274
|
# State of the virtual machine. Returns the state of the virtual
|
|
210
275
|
# machine. This state will represent the state that was assigned
|
|
211
276
|
# when the VM was found unless `reload` is set to `true`.
|
|
@@ -213,30 +278,101 @@ module VirtualBox
|
|
|
213
278
|
# @param [Boolean] reload If true, will reload the state to current
|
|
214
279
|
# value.
|
|
215
280
|
# @return [String] Virtual machine state.
|
|
216
|
-
def state(
|
|
217
|
-
if
|
|
218
|
-
load_interface_attribute(:state)
|
|
281
|
+
def state(suppress_state_reload=false)
|
|
282
|
+
if !suppress_state_reload
|
|
283
|
+
load_interface_attribute(:state, interface)
|
|
219
284
|
clear_dirty!(:state)
|
|
220
285
|
end
|
|
221
286
|
|
|
222
287
|
read_attribute(:state)
|
|
223
288
|
end
|
|
224
289
|
|
|
290
|
+
# Validates the virtual machine
|
|
291
|
+
def validate
|
|
292
|
+
super
|
|
293
|
+
|
|
294
|
+
validates_presence_of :name, :os_type_id, :memory_size, :vram_size, :cpu_count
|
|
295
|
+
validates_numericality_of :memory_balloon_size, :monitor_count
|
|
296
|
+
validates_inclusion_of :accelerate_3d_enabled, :accelerate_2d_video_enabled, :teleporter_enabled, :in => [true, false]
|
|
297
|
+
|
|
298
|
+
validates_format_of :name, :with => /^[\w\d\s-]+$/, :message => 'must only contain letters, numbers, spaces, underscores, and dashes.'
|
|
299
|
+
|
|
300
|
+
if !errors_on(:name)
|
|
301
|
+
# Only validate the name if the name has no errors already
|
|
302
|
+
vms_of_same_name = self.class.find(name)
|
|
303
|
+
add_error(:name, 'must not be used by another virtual machine.') if vms_of_same_name && vms_of_same_name.uuid != uuid
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
validates_inclusion_of :os_type_id, :in => VirtualBox::Global.global.lib.virtualbox.guest_os_types.collect { |os| os.id }
|
|
307
|
+
|
|
308
|
+
min_guest_ram, max_guest_ram = Global.global.system_properties.min_guest_ram, Global.global.system_properties.max_guest_ram
|
|
309
|
+
validates_inclusion_of :memory_size, :in => (min_guest_ram..max_guest_ram), :message => "must be between #{min_guest_ram} and #{max_guest_ram}."
|
|
310
|
+
validates_inclusion_of :memory_balloon_size, :in => (0..max_guest_ram), :message => "must be between 0 and #{max_guest_ram}."
|
|
311
|
+
|
|
312
|
+
min_guest_vram, max_guest_vram = Global.global.system_properties.min_guest_vram, Global.global.system_properties.max_guest_vram
|
|
313
|
+
validates_inclusion_of :vram_size, :in => (min_guest_vram..max_guest_vram), :message => "must be between #{min_guest_vram} and #{max_guest_vram}."
|
|
314
|
+
|
|
315
|
+
min_guest_cpu_count, max_guest_cpu_count = Global.global.system_properties.min_guest_cpu_count, Global.global.system_properties.max_guest_cpu_count
|
|
316
|
+
validates_inclusion_of :cpu_count, :in => (min_guest_cpu_count..max_guest_cpu_count), :message => "must be between #{min_guest_cpu_count} and #{max_guest_cpu_count}."
|
|
317
|
+
|
|
318
|
+
validates_inclusion_of :clipboard_mode, :in => COM::Util.versioned_interface(:ClipboardMode).map
|
|
319
|
+
validates_inclusion_of :firmware_type, :in => COM::Util.versioned_interface(:FirmwareType).map
|
|
320
|
+
end
|
|
321
|
+
|
|
225
322
|
# Saves the virtual machine if modified. This method saves any modified
|
|
226
323
|
# attributes of the virtual machine. If any related attributes were saved
|
|
227
324
|
# as well (such as storage controllers), those will be saved, too.
|
|
228
325
|
def save
|
|
326
|
+
return false unless valid?
|
|
327
|
+
raise Exceptions::ReadonlyVMStateException.new("VM must not be in saved state to modify.") if saved?
|
|
328
|
+
|
|
229
329
|
with_open_session do |session|
|
|
230
330
|
# Use setters to save the attributes on the locked machine and persist
|
|
231
331
|
# the settings
|
|
232
332
|
machine = session.machine
|
|
233
333
|
|
|
334
|
+
# Save the boot order
|
|
335
|
+
save_interface_attribute(:boot_order, machine)
|
|
336
|
+
|
|
234
337
|
# Save all the attributes and relationships
|
|
235
338
|
save_changed_interface_attributes(machine)
|
|
236
339
|
|
|
237
340
|
# Save relationships, which may open their own sessions if necessary
|
|
238
341
|
save_relationships
|
|
239
342
|
end
|
|
343
|
+
|
|
344
|
+
true
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
# Returns the root snapshot of this virtual machine. This root snapshot
|
|
348
|
+
# can be used to traverse the tree of snapshots.
|
|
349
|
+
#
|
|
350
|
+
# @return [Snapshot]
|
|
351
|
+
def root_snapshot
|
|
352
|
+
return nil if current_snapshot.nil?
|
|
353
|
+
|
|
354
|
+
current = current_snapshot
|
|
355
|
+
current = current.parent while current.parent != nil
|
|
356
|
+
current
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
# Find a snapshot by name or UUID. This allows you to find a snapshot by a given
|
|
360
|
+
# name, rather than having to resort to traversing the entire tree structure
|
|
361
|
+
# manually.
|
|
362
|
+
def find_snapshot(name)
|
|
363
|
+
find_helper = lambda do |name, root|
|
|
364
|
+
return nil if root.nil?
|
|
365
|
+
return root if root.name == name || root.uuid == name
|
|
366
|
+
|
|
367
|
+
root.children.each do |child|
|
|
368
|
+
result = find_helper.call(name, child)
|
|
369
|
+
return result unless result.nil?
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
nil
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
find_helper.call(name, root_snapshot)
|
|
240
376
|
end
|
|
241
377
|
|
|
242
378
|
# Opens a direct session with the machine this VM represents and yields
|
|
@@ -263,12 +399,23 @@ module VirtualBox
|
|
|
263
399
|
|
|
264
400
|
# Close the session
|
|
265
401
|
if close_session
|
|
266
|
-
# Save these settings only if we're closing
|
|
267
|
-
|
|
402
|
+
# Save these settings only if we're closing and only if the state
|
|
403
|
+
# is not saved, since that doesn't allow the machine to be saved.
|
|
404
|
+
session.machine.save_settings if session.machine.state != :saved
|
|
268
405
|
|
|
269
406
|
# Close the session
|
|
270
407
|
session.close
|
|
271
408
|
end
|
|
409
|
+
rescue Exception
|
|
410
|
+
# Close the session so we don't get locked out. We use a rescue block
|
|
411
|
+
# here instead of an "ensure" since we ONLY want this to occur if an
|
|
412
|
+
# exception is raised. Otherwise, we may or may not close the session,
|
|
413
|
+
# depending how deeply nested this call to `with_open_session` is.
|
|
414
|
+
# (see close_session boolean above)
|
|
415
|
+
session.close if session.state == :open
|
|
416
|
+
|
|
417
|
+
# Reraise the exception, we're not actually catching it to handle it
|
|
418
|
+
raise
|
|
272
419
|
end
|
|
273
420
|
|
|
274
421
|
# Exports a virtual machine. The virtual machine will be exported
|
|
@@ -284,18 +431,33 @@ module VirtualBox
|
|
|
284
431
|
# 60 to 90 seconds on my 2.2 GHz 2009 model MacBook Pro.
|
|
285
432
|
#
|
|
286
433
|
# If a block is given to the method, then it will be yielded with the
|
|
287
|
-
#
|
|
434
|
+
# progress of the operation.
|
|
288
435
|
#
|
|
289
436
|
# @param [String] filename The file (not directory) to save the exported
|
|
290
437
|
# OVF file. This directory will also receive the checksum file and
|
|
291
438
|
# virtual disks.
|
|
292
|
-
def export(filename, &block)
|
|
439
|
+
def export(filename, options = {}, &block)
|
|
293
440
|
app = Appliance.new
|
|
294
441
|
app.path = filename
|
|
295
|
-
app.add_machine(self)
|
|
442
|
+
app.add_machine(self, options)
|
|
296
443
|
app.export(&block)
|
|
297
444
|
end
|
|
298
445
|
|
|
446
|
+
# Take a snapshot of the current state of the machine. This method can be
|
|
447
|
+
# called while the VM is running and also while it is powered off. This
|
|
448
|
+
# method will block while the snapshot is being taken.
|
|
449
|
+
#
|
|
450
|
+
# If a block is given to this method, it will yield with a progress
|
|
451
|
+
# object which can be used to get the progress of the operation.
|
|
452
|
+
#
|
|
453
|
+
# @param [String] name Name of the snapshot.
|
|
454
|
+
# @param [String] description Description of the snapshot.
|
|
455
|
+
def take_snapshot(name, description="", &block)
|
|
456
|
+
with_open_session do |session|
|
|
457
|
+
session.console.take_snapshot(name, description).wait(&block)
|
|
458
|
+
end
|
|
459
|
+
end
|
|
460
|
+
|
|
299
461
|
# Starts the virtual machine. The virtual machine can be started in a
|
|
300
462
|
# variety of modes:
|
|
301
463
|
#
|
|
@@ -314,11 +476,10 @@ module VirtualBox
|
|
|
314
476
|
# as well
|
|
315
477
|
session = Lib.lib.session
|
|
316
478
|
interface.parent.open_remote_session(session, uuid, mode.to_s, "").wait_for_completion(-1)
|
|
317
|
-
|
|
318
|
-
# Close our session to release our lock from the machine
|
|
319
|
-
session.close
|
|
320
|
-
|
|
321
479
|
true
|
|
480
|
+
ensure
|
|
481
|
+
# Be sure to close that session!
|
|
482
|
+
session.close if session && session.state == :open
|
|
322
483
|
end
|
|
323
484
|
|
|
324
485
|
# Shuts down the VM by directly calling "acpipowerbutton". Depending on the
|
|
@@ -385,10 +546,10 @@ module VirtualBox
|
|
|
385
546
|
|
|
386
547
|
# Send the proper command, waiting if we have to
|
|
387
548
|
result = session.console.send(command, *args)
|
|
388
|
-
result.wait_for_completion(-1) if result.is_a?(COM::
|
|
389
|
-
|
|
549
|
+
result.wait_for_completion(-1) if result.is_a?(COM::Util.versioned_interface(:Progress))
|
|
550
|
+
ensure
|
|
390
551
|
# Close the session
|
|
391
|
-
session.close
|
|
552
|
+
session.close if session && session.state == :open
|
|
392
553
|
end
|
|
393
554
|
|
|
394
555
|
# Destroys the virtual machine. This method also removes all attached
|
|
@@ -403,6 +564,23 @@ module VirtualBox
|
|
|
403
564
|
# not only unregister attached media, but will also physically
|
|
404
565
|
# remove their respective data.
|
|
405
566
|
def destroy(*args)
|
|
567
|
+
# Destroy all snapshots first (by destroying the root, all children
|
|
568
|
+
# are automatically destroyed)
|
|
569
|
+
if root_snapshot
|
|
570
|
+
destroy_snapshot = lambda do |snapshot|
|
|
571
|
+
return if snapshot.nil?
|
|
572
|
+
|
|
573
|
+
snapshot.children.each { |c| destroy_snapshot.call(c) }
|
|
574
|
+
snapshot.destroy
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
destroy_snapshot.call(root_snapshot)
|
|
578
|
+
|
|
579
|
+
# Reload ourselves before continuing since snapshots do some
|
|
580
|
+
# crazy things.
|
|
581
|
+
reload
|
|
582
|
+
end
|
|
583
|
+
|
|
406
584
|
# Call super first so destroy is propogated through to relationships
|
|
407
585
|
# first
|
|
408
586
|
super
|
|
@@ -412,6 +590,13 @@ module VirtualBox
|
|
|
412
590
|
interface.delete_settings
|
|
413
591
|
end
|
|
414
592
|
|
|
593
|
+
# Returns true if the virtual machine state is starting
|
|
594
|
+
#
|
|
595
|
+
# @return [Boolean] True if virtual machine state is starting
|
|
596
|
+
def starting?
|
|
597
|
+
state == :starting
|
|
598
|
+
end
|
|
599
|
+
|
|
415
600
|
# Returns true if the virtual machine state is running
|
|
416
601
|
#
|
|
417
602
|
# @return [Boolean] True if virtual machine state is running
|
|
@@ -446,5 +631,29 @@ module VirtualBox
|
|
|
446
631
|
def aborted?
|
|
447
632
|
state == :aborted
|
|
448
633
|
end
|
|
634
|
+
|
|
635
|
+
# Loads the boot order for this virtual machine. This method should
|
|
636
|
+
# never be called directly. Instead, use the `boot_order` attribute
|
|
637
|
+
# to read and modify the boot order.
|
|
638
|
+
def get_boot_order(interface, key)
|
|
639
|
+
max_boot = Global.global.system_properties.max_boot_position
|
|
640
|
+
|
|
641
|
+
(1..max_boot).inject([]) do |order, position|
|
|
642
|
+
order << interface.get_boot_order(position)
|
|
643
|
+
order
|
|
644
|
+
end
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
# Sets the boot order for this virtual machine. This method should
|
|
648
|
+
# never be called directly. Instead, modify the `boot_order` array.
|
|
649
|
+
def set_boot_order(interface, key, value)
|
|
650
|
+
max_boot = Global.global.system_properties.max_boot_position
|
|
651
|
+
value = value.dup
|
|
652
|
+
value.concat(Array.new(max_boot - value.size)) if value.size < max_boot
|
|
653
|
+
|
|
654
|
+
(1..max_boot).each do |position|
|
|
655
|
+
interface.set_boot_order(position, value[position - 1])
|
|
656
|
+
end
|
|
657
|
+
end
|
|
449
658
|
end
|
|
450
|
-
end
|
|
659
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module VirtualBox
|
|
2
|
+
# Represents the VRDP Server settings of a {VM}.
|
|
3
|
+
class VRDPServer < AbstractModel
|
|
4
|
+
attribute :parent, :readonly => true, :property => false
|
|
5
|
+
attribute :enabled, :boolean => true
|
|
6
|
+
attribute :ports
|
|
7
|
+
attribute :net_address
|
|
8
|
+
attribute :auth_type
|
|
9
|
+
attribute :auth_timeout
|
|
10
|
+
attribute :allow_multi_connection, :boolean => true
|
|
11
|
+
attribute :reuse_single_connection, :boolean => true
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
# Populates a relationship with another model.
|
|
15
|
+
#
|
|
16
|
+
# **This method typically won't be used except internally.**
|
|
17
|
+
#
|
|
18
|
+
# @return [VRDPServer]
|
|
19
|
+
def populate_relationship(caller, imachine)
|
|
20
|
+
data = new(caller, imachine.vrdp_server)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Saves the relationship.
|
|
24
|
+
#
|
|
25
|
+
# **This method typically won't be used except internally.**
|
|
26
|
+
def save_relationship(caller, instance)
|
|
27
|
+
instance.save
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def initialize(parent, vrdp_settings)
|
|
32
|
+
write_attribute(:parent, parent)
|
|
33
|
+
|
|
34
|
+
# Load the attributes and mark the whole thing as existing
|
|
35
|
+
load_interface_attributes(vrdp_settings)
|
|
36
|
+
clear_dirty!
|
|
37
|
+
existing_record!
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def validate
|
|
41
|
+
super
|
|
42
|
+
|
|
43
|
+
validates_inclusion_of :enabled, :allow_multi_connection, :reuse_single_connection, :in => [true, false]
|
|
44
|
+
validates_format_of :ports, :with => /^[\d\s\-\.]+$/, :message => "must only contain numbers, spaces, dashes or periods."
|
|
45
|
+
validates_format_of :net_address, :with => /^[\w\d\-\.]+$/, :message => "must only contain latters, numbers, dashes or periods."
|
|
46
|
+
validates_inclusion_of :auth_type, :in => COM::Util.versioned_interface(:VRDPAuthType).map
|
|
47
|
+
validates_numericality_of :auth_timeout
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def save
|
|
51
|
+
parent.with_open_session do |session|
|
|
52
|
+
machine = session.machine
|
|
53
|
+
|
|
54
|
+
# Save them
|
|
55
|
+
save_changed_interface_attributes(machine.vrdp_server)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
data/test/test_helper.rb
CHANGED
|
@@ -18,4 +18,10 @@ require File.join(File.dirname(__FILE__), '..', 'lib', 'virtualbox')
|
|
|
18
18
|
|
|
19
19
|
# Data
|
|
20
20
|
class Test::Unit::TestCase
|
|
21
|
-
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Initialize the FFI stuff. This is typically done dynamically when
|
|
24
|
+
# FFI is initialized (on non-windows machines). Since the tests test
|
|
25
|
+
# the FFI classes, we force initialize a specific version here. It
|
|
26
|
+
# doesn't matter what version, since no actual FFI calls are made.
|
|
27
|
+
VirtualBox::COM::FFI.setup("3.1.x") unless defined?(VirtualBox::COM::FFI::Version_3_1_X)
|
|
@@ -8,6 +8,7 @@ class AttributableTest < Test::Unit::TestCase
|
|
|
8
8
|
class AttributeModel < EmptyAttributeModel
|
|
9
9
|
attribute :foo
|
|
10
10
|
attribute :bar
|
|
11
|
+
attribute :boolean_bar, :boolean => true
|
|
11
12
|
|
|
12
13
|
def initialize
|
|
13
14
|
super
|
|
@@ -211,6 +212,13 @@ class AttributableTest < Test::Unit::TestCase
|
|
|
211
212
|
assert atts.has_key?(:bar)
|
|
212
213
|
end
|
|
213
214
|
|
|
215
|
+
should "be able to access boolean values with a '?'" do
|
|
216
|
+
@model.boolean_bar = true
|
|
217
|
+
assert @model.boolean_bar?
|
|
218
|
+
@model.boolean_bar = false
|
|
219
|
+
assert !@model.boolean_bar?
|
|
220
|
+
end
|
|
221
|
+
|
|
214
222
|
should "be able to write defined attributes" do
|
|
215
223
|
assert_nothing_raised {
|
|
216
224
|
@model.foo = @check_string
|
|
@@ -17,8 +17,8 @@ class RelatableTest < Test::Unit::TestCase
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
class RelatableModel < EmptyRelatableModel
|
|
20
|
-
relationship :foos, Relatee
|
|
21
|
-
relationship :bars, BarRelatee
|
|
20
|
+
relationship :foos, RelatableTest::Relatee
|
|
21
|
+
relationship :bars, RelatableTest::BarRelatee
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
setup do
|
|
@@ -246,8 +246,8 @@ class RelatableTest < Test::Unit::TestCase
|
|
|
246
246
|
|
|
247
247
|
context "determining the class of relationships" do
|
|
248
248
|
class ClassRelatableModel < EmptyRelatableModel
|
|
249
|
-
relationship :foo, Relatee
|
|
250
|
-
relationship :bar, "RelatableTest::
|
|
249
|
+
relationship :foo, RelatableTest::Relatee
|
|
250
|
+
relationship :bar, "RelatableTest::BarRelatee"
|
|
251
251
|
end
|
|
252
252
|
|
|
253
253
|
setup do
|
|
@@ -259,7 +259,7 @@ class RelatableTest < Test::Unit::TestCase
|
|
|
259
259
|
end
|
|
260
260
|
|
|
261
261
|
should "turn string into class" do
|
|
262
|
-
assert_equal
|
|
262
|
+
assert_equal BarRelatee, @model.relationship_class(:bar)
|
|
263
263
|
end
|
|
264
264
|
end
|
|
265
265
|
|