velir_virtualbox 0.8.4
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/.gitignore +8 -0
- data/.yardopts +3 -0
- data/Gemfile +16 -0
- data/LICENSE +19 -0
- data/Rakefile +37 -0
- data/Readme.md +70 -0
- data/docs/GettingStarted.md +196 -0
- data/docs/WhatsNew.md +12 -0
- data/features/README.md +33 -0
- data/features/global.feature +19 -0
- data/features/global_extra_data.feature +27 -0
- data/features/step_definitions/abstract_model_steps.rb +39 -0
- data/features/step_definitions/extra_data_steps.rb +36 -0
- data/features/step_definitions/global_steps.rb +29 -0
- data/features/step_definitions/nat_engine_steps.rb +76 -0
- data/features/step_definitions/network_adapter_steps.rb +38 -0
- data/features/step_definitions/shared_folder_steps.rb +76 -0
- data/features/step_definitions/snapshot_steps.rb +74 -0
- data/features/step_definitions/storage_controller_steps.rb +16 -0
- data/features/step_definitions/virtualbox_steps.rb +17 -0
- data/features/step_definitions/vm_steps.rb +50 -0
- data/features/support/env.rb +61 -0
- data/features/support/helpers.rb +38 -0
- data/features/support/hooks.rb +30 -0
- data/features/support/ordered_hash.rb +49 -0
- data/features/support/vboxmanage.rb +191 -0
- data/features/version.feature +16 -0
- data/features/vm.feature +13 -0
- data/features/vm_bios.feature +29 -0
- data/features/vm_cpu.feature +29 -0
- data/features/vm_extra_data.feature +35 -0
- data/features/vm_hw_virt.feature +29 -0
- data/features/vm_nat_engine.feature +57 -0
- data/features/vm_network_adapters.feature +27 -0
- data/features/vm_shared_folders.feature +42 -0
- data/features/vm_snapshots.feature +29 -0
- data/features/vm_storage_controllers.feature +11 -0
- data/lib/virtualbox.rb +11 -0
- data/lib/virtualbox/abstract_model.rb +281 -0
- data/lib/virtualbox/abstract_model/attributable.rb +290 -0
- data/lib/virtualbox/abstract_model/dirty.rb +177 -0
- data/lib/virtualbox/abstract_model/interface_attributes.rb +98 -0
- data/lib/virtualbox/abstract_model/relatable.rb +332 -0
- data/lib/virtualbox/abstract_model/validatable.rb +167 -0
- data/lib/virtualbox/abstract_model/version_matcher.rb +35 -0
- data/lib/virtualbox/appliance.rb +62 -0
- data/lib/virtualbox/audio_adapter.rb +52 -0
- data/lib/virtualbox/bios.rb +50 -0
- data/lib/virtualbox/com.rb +23 -0
- data/lib/virtualbox/com/abstract_enum.rb +43 -0
- data/lib/virtualbox/com/abstract_implementer.rb +45 -0
- data/lib/virtualbox/com/abstract_interface.rb +167 -0
- data/lib/virtualbox/com/base_interface.rb +38 -0
- data/lib/virtualbox/com/ffi/interface.rb +150 -0
- data/lib/virtualbox/com/ffi/interfaces.rb +63 -0
- data/lib/virtualbox/com/ffi/util.rb +121 -0
- data/lib/virtualbox/com/ffi/vboxxpcomc.rb +31 -0
- data/lib/virtualbox/com/ffi_interface.rb +96 -0
- data/lib/virtualbox/com/implementer/base.rb +59 -0
- data/lib/virtualbox/com/implementer/ffi.rb +381 -0
- data/lib/virtualbox/com/implementer/mscom.rb +189 -0
- data/lib/virtualbox/com/implementer/nil.rb +10 -0
- data/lib/virtualbox/com/interface/3.1.x/access_mode.rb +11 -0
- 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/access_mode.rb +11 -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/interface/4.0.x/access_mode.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/appliance.rb +23 -0
- data/lib/virtualbox/com/interface/4.0.x/audio_adapter.rb +15 -0
- data/lib/virtualbox/com/interface/4.0.x/audio_controller_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/audio_driver_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/auth_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/bios_boot_menu_mode.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/bios_settings.rb +21 -0
- data/lib/virtualbox/com/interface/4.0.x/cleanup_mode.rb +12 -0
- data/lib/virtualbox/com/interface/4.0.x/clipboard_mode.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/console.rb +50 -0
- data/lib/virtualbox/com/interface/4.0.x/cpu_property_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/device_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/dhcp_server.rb +22 -0
- data/lib/virtualbox/com/interface/4.0.x/event_source.rb +13 -0
- data/lib/virtualbox/com/interface/4.0.x/fault_tolerance_state.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/firmware_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/guest.rb +13 -0
- data/lib/virtualbox/com/interface/4.0.x/guest_os_type.rb +33 -0
- data/lib/virtualbox/com/interface/4.0.x/host.rb +43 -0
- data/lib/virtualbox/com/interface/4.0.x/host_network_interface.rb +30 -0
- data/lib/virtualbox/com/interface/4.0.x/host_network_interface_medium_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/host_network_interface_status.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/host_network_interface_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/host_usb_device.rb +13 -0
- data/lib/virtualbox/com/interface/4.0.x/host_usb_device_filter.rb +13 -0
- data/lib/virtualbox/com/interface/4.0.x/hw_virt_ex_property_type.rb +12 -0
- data/lib/virtualbox/com/interface/4.0.x/keyboard_hid_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/lock_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/machine.rb +132 -0
- data/lib/virtualbox/com/interface/4.0.x/machine_state.rb +14 -0
- data/lib/virtualbox/com/interface/4.0.x/medium.rb +53 -0
- data/lib/virtualbox/com/interface/4.0.x/medium_attachment.rb +18 -0
- data/lib/virtualbox/com/interface/4.0.x/medium_format.rb +18 -0
- data/lib/virtualbox/com/interface/4.0.x/medium_state.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/medium_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/medium_variant.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/nat_alias_mode.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/nat_engine.rb +27 -0
- data/lib/virtualbox/com/interface/4.0.x/nat_protocol.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/network_adapter.rb +35 -0
- data/lib/virtualbox/com/interface/4.0.x/network_adapter_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/network_attachment_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/nsiexception.rb +23 -0
- data/lib/virtualbox/com/interface/4.0.x/nsisupports.rb +15 -0
- data/lib/virtualbox/com/interface/4.0.x/parallel_port.rb +17 -0
- data/lib/virtualbox/com/interface/4.0.x/pointing_hid_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/port_mode.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/progress.rb +64 -0
- data/lib/virtualbox/com/interface/4.0.x/serial_port.rb +19 -0
- data/lib/virtualbox/com/interface/4.0.x/session.rb +18 -0
- data/lib/virtualbox/com/interface/4.0.x/session_state.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/session_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/shared_folder.rb +17 -0
- data/lib/virtualbox/com/interface/4.0.x/snapshot.rb +20 -0
- data/lib/virtualbox/com/interface/4.0.x/storage_bus.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/storage_controller.rb +24 -0
- data/lib/virtualbox/com/interface/4.0.x/storage_controller_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/system_properties.rb +42 -0
- data/lib/virtualbox/com/interface/4.0.x/usb_controller.rb +21 -0
- data/lib/virtualbox/com/interface/4.0.x/usb_device.rb +24 -0
- data/lib/virtualbox/com/interface/4.0.x/usb_device_filter.rb +23 -0
- data/lib/virtualbox/com/interface/4.0.x/usb_device_filter_action.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/usb_device_state.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/virtual_box_error_info.rb +17 -0
- data/lib/virtualbox/com/interface/4.0.x/virtual_system_description.rb +19 -0
- data/lib/virtualbox/com/interface/4.0.x/virtual_system_description_type.rb +14 -0
- data/lib/virtualbox/com/interface/4.0.x/virtual_system_description_value_type.rb +11 -0
- data/lib/virtualbox/com/interface/4.0.x/virtualbox.rb +50 -0
- data/lib/virtualbox/com/interface/4.0.x/vrde_server.rb +23 -0
- data/lib/virtualbox/com/mscom_interface.rb +44 -0
- data/lib/virtualbox/com/nil_interface.rb +7 -0
- data/lib/virtualbox/com/util.rb +32 -0
- data/lib/virtualbox/cpu.rb +61 -0
- data/lib/virtualbox/dhcp_server.rb +89 -0
- data/lib/virtualbox/dvd.rb +27 -0
- data/lib/virtualbox/exceptions.rb +39 -0
- data/lib/virtualbox/ext/byte_normalizer.rb +17 -0
- data/lib/virtualbox/ext/glob_loader.rb +35 -0
- data/lib/virtualbox/ext/logger.rb +38 -0
- data/lib/virtualbox/ext/platform.rb +31 -0
- data/lib/virtualbox/ext/subclass_listing.rb +24 -0
- data/lib/virtualbox/extra_data.rb +127 -0
- data/lib/virtualbox/forwarded_port.rb +222 -0
- data/lib/virtualbox/global.rb +96 -0
- data/lib/virtualbox/hard_drive.rb +246 -0
- data/lib/virtualbox/host.rb +71 -0
- data/lib/virtualbox/host_network_interface.rb +137 -0
- data/lib/virtualbox/hw_virtualization.rb +64 -0
- data/lib/virtualbox/lib.rb +84 -0
- data/lib/virtualbox/media.rb +20 -0
- data/lib/virtualbox/medium.rb +145 -0
- data/lib/virtualbox/medium_attachment.rb +61 -0
- data/lib/virtualbox/nat_engine.rb +71 -0
- data/lib/virtualbox/nat_forwarded_port.rb +171 -0
- data/lib/virtualbox/network_adapter.rb +166 -0
- data/lib/virtualbox/proxies/collection.rb +57 -0
- data/lib/virtualbox/shared_folder.rb +220 -0
- data/lib/virtualbox/snapshot.rb +185 -0
- data/lib/virtualbox/storage_controller.rb +160 -0
- data/lib/virtualbox/system_properties.rb +73 -0
- data/lib/virtualbox/usb_controller.rb +59 -0
- data/lib/virtualbox/usb_device_filter.rb +74 -0
- data/lib/virtualbox/version.rb +36 -0
- data/lib/virtualbox/virtual_system_description.rb +47 -0
- data/lib/virtualbox/vm.rb +649 -0
- data/lib/virtualbox/vrde_server.rb +57 -0
- data/test/test_helper.rb +18 -0
- data/test/virtualbox/abstract_model/attributable_test.rb +269 -0
- data/test/virtualbox/abstract_model/dirty_test.rb +83 -0
- data/test/virtualbox/abstract_model/interface_attributes_test.rb +194 -0
- data/test/virtualbox/abstract_model/relatable_test.rb +348 -0
- data/test/virtualbox/abstract_model/validatable_test.rb +308 -0
- data/test/virtualbox/abstract_model/version_matcher_test.rb +41 -0
- data/test/virtualbox/abstract_model_test.rb +462 -0
- data/test/virtualbox/appliance_test.rb +159 -0
- data/test/virtualbox/audio_adapter_test.rb +83 -0
- data/test/virtualbox/bios_test.rb +83 -0
- data/test/virtualbox/com/abstract_enum_test.rb +49 -0
- data/test/virtualbox/com/abstract_implementer_test.rb +40 -0
- data/test/virtualbox/com/abstract_interface_test.rb +140 -0
- data/test/virtualbox/com/ffi/interface_test.rb +249 -0
- data/test/virtualbox/com/ffi/util_test.rb +108 -0
- data/test/virtualbox/com/ffi_interface_test.rb +42 -0
- data/test/virtualbox/com/implementer/base_test.rb +38 -0
- data/test/virtualbox/com/implementer/ffi_test.rb +527 -0
- data/test/virtualbox/com/implementer/mscom_test.rb +247 -0
- data/test/virtualbox/com/mscom_interface_test.rb +17 -0
- data/test/virtualbox/com/util_test.rb +17 -0
- data/test/virtualbox/cpu_test.rb +103 -0
- data/test/virtualbox/dhcp_server_test.rb +165 -0
- data/test/virtualbox/dvd_test.rb +28 -0
- data/test/virtualbox/ext/byte_normalizer_test.rb +34 -0
- data/test/virtualbox/ext/platform_test.rb +50 -0
- data/test/virtualbox/ext/subclass_listing_test.rb +25 -0
- data/test/virtualbox/extra_data_test.rb +155 -0
- data/test/virtualbox/forwarded_port_test.rb +286 -0
- data/test/virtualbox/global_test.rb +46 -0
- data/test/virtualbox/hard_drive_test.rb +141 -0
- data/test/virtualbox/host_network_interface_test.rb +255 -0
- data/test/virtualbox/host_test.rb +94 -0
- data/test/virtualbox/hw_virtualization_test.rb +103 -0
- data/test/virtualbox/lib_test.rb +93 -0
- data/test/virtualbox/medium_attachment_test.rb +147 -0
- data/test/virtualbox/medium_test.rb +192 -0
- data/test/virtualbox/nat_engine_test.rb +106 -0
- data/test/virtualbox/nat_forwarded_port_test.rb +222 -0
- data/test/virtualbox/network_adapter_test.rb +191 -0
- data/test/virtualbox/proxies/collection_test.rb +102 -0
- data/test/virtualbox/shared_folder_test.rb +219 -0
- data/test/virtualbox/snapshot_test.rb +231 -0
- data/test/virtualbox/storage_controller_test.rb +197 -0
- data/test/virtualbox/system_properties_test.rb +87 -0
- data/test/virtualbox/usb_controller_test.rb +112 -0
- data/test/virtualbox/usb_device_filter_test.rb +93 -0
- data/test/virtualbox/version_test.rb +59 -0
- data/test/virtualbox/virtual_system_description_test.rb +61 -0
- data/test/virtualbox/vm_test.rb +633 -0
- data/test/virtualbox/vrde_server_test.rb +83 -0
- data/test/virtualbox_test.rb +11 -0
- data/virtualbox.gemspec +24 -0
- metadata +464 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
module VirtualBox
|
|
2
|
+
# Represents the VirtualBox main configuration file (VirtualBox.xml)
|
|
3
|
+
# which VirtualBox uses to keep track of all known virtual machines
|
|
4
|
+
# and images. This "global" configuration has many relationships which
|
|
5
|
+
# allow the user to retrieve a list of all VMs, media, global extra data,
|
|
6
|
+
# etc. Indeed, even methods like {VM.all} are implemented using this class.
|
|
7
|
+
#
|
|
8
|
+
# # Getting Global Data
|
|
9
|
+
#
|
|
10
|
+
# To retrieve the global data, use `Global.global`. This value is _cached_
|
|
11
|
+
# between calls, so subsequent calls will not go through the entire parsing
|
|
12
|
+
# process. To force a reload, set the `reload` parameter to true. Besides
|
|
13
|
+
# setting the parameter explicitly, some actions will implicitly force the
|
|
14
|
+
# global data to reload on the next call, such as saving a VM or destroying
|
|
15
|
+
# an image, for example.
|
|
16
|
+
#
|
|
17
|
+
# # Retrieve global data for the first time. This will parse all the
|
|
18
|
+
# # data.
|
|
19
|
+
# global_object = VirtualBox::Global.global
|
|
20
|
+
#
|
|
21
|
+
# # Subsequent calls are near-instant:
|
|
22
|
+
# VirtualBox::Global.global
|
|
23
|
+
#
|
|
24
|
+
# # Or we can choose to reload the data...
|
|
25
|
+
# reloaded_object = VirtualBox::Global.global(true)
|
|
26
|
+
#
|
|
27
|
+
# # Relationships
|
|
28
|
+
#
|
|
29
|
+
# While a global object doesn't have attributes, it does have many
|
|
30
|
+
# relationships. The relationships are listed below. If you don't
|
|
31
|
+
# understand this, read {Relatable}.
|
|
32
|
+
#
|
|
33
|
+
# relationship :vms, VM
|
|
34
|
+
# relationship :media, Media
|
|
35
|
+
# relationship :extra_data, ExtraData
|
|
36
|
+
# relationship :system_properties, :SystemProperties, :lazy => true
|
|
37
|
+
#
|
|
38
|
+
class Global < AbstractModel
|
|
39
|
+
attribute :lib, :readonly => true
|
|
40
|
+
|
|
41
|
+
relationship :vms, :VM, :lazy => true
|
|
42
|
+
relationship :media, :Media, :lazy => true
|
|
43
|
+
relationship :extra_data, :ExtraData, :lazy => true
|
|
44
|
+
relationship :system_properties, :SystemProperties, :lazy => true
|
|
45
|
+
relationship :host, :Host, :lazy => true
|
|
46
|
+
relationship :dhcp_servers, :DHCPServer, :lazy => true
|
|
47
|
+
|
|
48
|
+
@@global_data = nil
|
|
49
|
+
|
|
50
|
+
class << self
|
|
51
|
+
# Retrieves the global data. The return value of this call is cached,
|
|
52
|
+
# and can be reloaded by setting the `reload` parameter to true. Besides
|
|
53
|
+
# explicitly setting the parameter, some actions within the library
|
|
54
|
+
# force global to reload itself on the next call, such as saving a VM,
|
|
55
|
+
# or destroying an image.
|
|
56
|
+
#
|
|
57
|
+
# @param [Boolean] reload True if you want to force a reload of the data.
|
|
58
|
+
# @return [Global]
|
|
59
|
+
def global(reload=false)
|
|
60
|
+
if !@@global_data || reload
|
|
61
|
+
@@global_data = new(Lib.lib)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
@@global_data
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Resets the global data singleton. This is used for testing purposes.
|
|
68
|
+
def reset!
|
|
69
|
+
@@global_data = nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def initialize(lib)
|
|
74
|
+
write_attribute(:lib, lib)
|
|
75
|
+
|
|
76
|
+
# Required to load lazy relationships
|
|
77
|
+
existing_record!
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def load_relationship(name)
|
|
81
|
+
# "Lazy loaded" associations table. These associate the relationship
|
|
82
|
+
# with the data it needs to load. The data is wrapped in lambdas so
|
|
83
|
+
# that the evaluation doesn't occur unless necessary.
|
|
84
|
+
relationships = {
|
|
85
|
+
:vms => lambda { lib.virtualbox.machines },
|
|
86
|
+
:media => lambda { lib },
|
|
87
|
+
:extra_data => lambda { lib.virtualbox },
|
|
88
|
+
:system_properties => lambda { lib.virtualbox.system_properties },
|
|
89
|
+
:host => lambda { lib.virtualbox.host },
|
|
90
|
+
:dhcp_servers => lambda { lib.virtualbox.dhcp_servers }
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
populate_relationship(name, relationships[name].call)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
module VirtualBox
|
|
2
|
+
# Represents a hard disk which is registered with VirtualBox.
|
|
3
|
+
#
|
|
4
|
+
# # Finding a Hard Drive
|
|
5
|
+
#
|
|
6
|
+
# Hard drives can be found use {HardDrive.all} and {HardDrive.find}, which
|
|
7
|
+
# find all or a specific hard drive, respectively. Example below:
|
|
8
|
+
#
|
|
9
|
+
# VirtualBox::HardDrive.all
|
|
10
|
+
#
|
|
11
|
+
# Or use find with the UUID of the HardDrive:
|
|
12
|
+
#
|
|
13
|
+
# VirtualBox::HardDrive.find("4a896f0b-b3a3-4dec-8c26-8406c6fccd6e")
|
|
14
|
+
#
|
|
15
|
+
# # Creating a Hard Drive
|
|
16
|
+
#
|
|
17
|
+
# Hard Drives can be created by intilizing an empty hard drive, assigning
|
|
18
|
+
# values to the necessary attributes, and calling save on the object.
|
|
19
|
+
# Below is a simple example of how this works:
|
|
20
|
+
#
|
|
21
|
+
# hd = VirtualBox::HardDrive.new
|
|
22
|
+
# hd.format = "VDI" # Or any format list with `VBoxManage list hddbackends`
|
|
23
|
+
# hd.location = "foo.vdi"
|
|
24
|
+
# hd.size = 2400 # in megabytes
|
|
25
|
+
# hd.save
|
|
26
|
+
#
|
|
27
|
+
# # You can now access other attributes, since its saved:
|
|
28
|
+
# hd.uuid
|
|
29
|
+
# hd.location # will return a full path now
|
|
30
|
+
#
|
|
31
|
+
# # Destroying Hard Drives
|
|
32
|
+
#
|
|
33
|
+
# Hard drives can also be deleted. **This operation is not reversable**.
|
|
34
|
+
#
|
|
35
|
+
# hd = VirtualBox::HardDrive.find("...")
|
|
36
|
+
# hd.destroy
|
|
37
|
+
#
|
|
38
|
+
# This will only unregister the Hard Drive from VirtualBox and will not destroy
|
|
39
|
+
# the storage space on the disk. To destroy the storage space, pass `true` to
|
|
40
|
+
# the destroy method, example:
|
|
41
|
+
#
|
|
42
|
+
# hd.destroy(true)
|
|
43
|
+
#
|
|
44
|
+
# # Cloning Hard Drives
|
|
45
|
+
#
|
|
46
|
+
# Hard Drives can just as easily be cloned as they can be created or destroyed.
|
|
47
|
+
#
|
|
48
|
+
# hd = VirtualBox::HardDrive.find("...")
|
|
49
|
+
# cloned_hd = hd.clone("bar.vdi")
|
|
50
|
+
#
|
|
51
|
+
# In addition to simply cloning hard drives, this command can be used to
|
|
52
|
+
# clone to a different format. If the format is not passed in (as with the
|
|
53
|
+
# the above example, the system default format will be used). example:
|
|
54
|
+
#
|
|
55
|
+
# hd = VirtualBox::HardDrive.find("...")
|
|
56
|
+
# hd.clone("bar.vmdk", "VMDK") # Will clone and convert to VMDK format
|
|
57
|
+
#
|
|
58
|
+
# # Attributes
|
|
59
|
+
#
|
|
60
|
+
# Properties of the model are exposed using standard ruby instance
|
|
61
|
+
# methods which are generated on the fly. Because of this, they are not listed
|
|
62
|
+
# below as available instance methods.
|
|
63
|
+
#
|
|
64
|
+
# These attributes can be accessed and modified via standard ruby-style
|
|
65
|
+
# `instance.attribute` and `instance.attribute=` methods. The attributes are
|
|
66
|
+
# listed below. If you aren't sure what this means or you can't understand
|
|
67
|
+
# why the below is listed, please read {Attributable}.
|
|
68
|
+
#
|
|
69
|
+
# attribute :format, :default => "VDI"
|
|
70
|
+
# attribute :location
|
|
71
|
+
# attribute :logical_size
|
|
72
|
+
# attribute :physical_size, :readonly => true, :property => :size
|
|
73
|
+
#
|
|
74
|
+
# There are more attributes on the {Medium} model, which {HardDrive} inherits
|
|
75
|
+
# from.
|
|
76
|
+
#
|
|
77
|
+
class HardDrive < Medium
|
|
78
|
+
include ByteNormalizer
|
|
79
|
+
|
|
80
|
+
attribute :format, :default => "VDI"
|
|
81
|
+
attribute :location
|
|
82
|
+
attribute :logical_size
|
|
83
|
+
attribute :physical_size, :readonly => true, :property => :size
|
|
84
|
+
|
|
85
|
+
class << self
|
|
86
|
+
# Returns an array of all available hard drives as HardDrive
|
|
87
|
+
# objects.
|
|
88
|
+
#
|
|
89
|
+
# @return [Array<HardDrive>]
|
|
90
|
+
def all
|
|
91
|
+
Global.global(true).media.hard_drives
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Finds one specific hard drive by UUID. If the hard drive
|
|
95
|
+
# can not be found, will return `nil`.
|
|
96
|
+
#
|
|
97
|
+
# @param [String] id The UUID of the hard drive
|
|
98
|
+
# @return [HardDrive]
|
|
99
|
+
def find(id)
|
|
100
|
+
all.detect { |hd| hd.uuid == id }
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Override of {Medium.device_type}.
|
|
104
|
+
def device_type
|
|
105
|
+
:hard_disk
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Overwrite the AbstractModel initialize to make the imedium parameter
|
|
110
|
+
# optional so that new Hard Drives can be created
|
|
111
|
+
def initialize(imedium = nil)
|
|
112
|
+
super if imedium
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Custom getter to convert the physical size from bytes to megabytes.
|
|
116
|
+
def physical_size
|
|
117
|
+
bytes_to_megabytes(read_attribute(:physical_size))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Get an array of machines attached to this Virtual Machine
|
|
121
|
+
def machines
|
|
122
|
+
interface.machine_ids.collect { |id| VirtualBox::VM.find(id) }
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Validates a hard drive for the minimum attributes required to
|
|
126
|
+
# create or save.
|
|
127
|
+
def validate
|
|
128
|
+
super
|
|
129
|
+
|
|
130
|
+
medium_formats = Global.global.system_properties.medium_formats.collect { |mf| mf.id }
|
|
131
|
+
validates_inclusion_of :format, :in => medium_formats, :message => "must be one of the following: #{medium_formats.join(', ')}."
|
|
132
|
+
|
|
133
|
+
validates_presence_of :location
|
|
134
|
+
|
|
135
|
+
max_vdi_size = Global.global.system_properties.max_vdi_size
|
|
136
|
+
validates_inclusion_of :logical_size, :in => (0..max_vdi_size), :message => "must be between 0 and #{max_vdi_size}."
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Creates a new {COM::Interface::Medium} instance. This simply creates
|
|
140
|
+
# the new {COM::Interface::Medium} structure. It does not (and shouldn't)
|
|
141
|
+
# create the storage space on the host system. See the create method for
|
|
142
|
+
# an example on to create the storage space.
|
|
143
|
+
#
|
|
144
|
+
# @param [String] outputfile The output file. This can be a full path
|
|
145
|
+
# or just a filename. If its just a filename, it will be placed in
|
|
146
|
+
# the default hard drives directory. Should not be present already.
|
|
147
|
+
# @param [String] format The format to convert to. If not present, the
|
|
148
|
+
# systems default will be used.
|
|
149
|
+
# @return [COM::Interface::Medium] The new {COM::Interface::Medium} instance
|
|
150
|
+
# or will raise a {Exceptions::MediumCreationFailedException} on failure.
|
|
151
|
+
def create_hard_disk_medium(outputfile, format = nil)
|
|
152
|
+
# Get main VirtualBox object
|
|
153
|
+
virtualbox = Lib.lib.virtualbox
|
|
154
|
+
|
|
155
|
+
# Assign the default format if it isn't set yet
|
|
156
|
+
format ||= virtualbox.system_properties.default_hard_disk_format
|
|
157
|
+
|
|
158
|
+
# Expand path relative to the default hard disk folder. This allows
|
|
159
|
+
# filenames to exist in the default folder while full paths will use
|
|
160
|
+
# the paths specified.
|
|
161
|
+
outputfile = File.expand_path(outputfile, virtualbox.system_properties.default_hard_disk_folder)
|
|
162
|
+
|
|
163
|
+
# If the outputfile path is in use by another Hard Drive, lets fail
|
|
164
|
+
# now with a meaningful exception rather than simply return a nil
|
|
165
|
+
raise Exceptions::MediumLocationInUseException.new(outputfile) if File.exist?(outputfile)
|
|
166
|
+
|
|
167
|
+
# Create the new {COM::Interface::Medium} instance.
|
|
168
|
+
new_medium = virtualbox.create_hard_disk(format, outputfile)
|
|
169
|
+
|
|
170
|
+
# Raise an error if the creation of the {COM::Interface::Medium}
|
|
171
|
+
# instance failed
|
|
172
|
+
raise Exceptions::MediumCreationFailedException.new unless new_medium
|
|
173
|
+
|
|
174
|
+
# Return the new {COM::Interface::Medium} instance.
|
|
175
|
+
new_medium
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Clone hard drive, possibly also converting formats. All formats
|
|
179
|
+
# supported by your local VirtualBox installation are supported
|
|
180
|
+
# here. If no format is specified, the systems default will be used.
|
|
181
|
+
#
|
|
182
|
+
# @param [String] outputfile The output file. This can be a full path
|
|
183
|
+
# or just a filename. If its just a filename, it will be placed in
|
|
184
|
+
# the default hard drives directory. Should not be present already.
|
|
185
|
+
# @param [String] format The format to convert to. If not present, the
|
|
186
|
+
# systems default will be used.
|
|
187
|
+
# @return [HardDrive] The new, cloned hard drive, or nil on failure.
|
|
188
|
+
def clone(outputfile, format = nil)
|
|
189
|
+
# Create the new Hard Disk medium
|
|
190
|
+
new_medium = create_hard_disk_medium(outputfile, format)
|
|
191
|
+
|
|
192
|
+
# Clone the current drive onto the new Hard Disk medium
|
|
193
|
+
interface.clone_to(new_medium, :standard, nil).wait_for_completion(-1)
|
|
194
|
+
|
|
195
|
+
# Locate the newly cloned hard drive
|
|
196
|
+
self.class.find(new_medium.id) if new_medium.respond_to?(:id)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Creates a new hard drive.
|
|
200
|
+
#
|
|
201
|
+
# **This method should NEVER be called. Call {#save} instead.**
|
|
202
|
+
#
|
|
203
|
+
# @return [Boolean] True if command was successful, false otherwise.
|
|
204
|
+
def create
|
|
205
|
+
return false unless new_record?
|
|
206
|
+
raise Exceptions::ValidationFailedException.new(errors) if !valid?
|
|
207
|
+
|
|
208
|
+
# Create the new Hard Disk medium
|
|
209
|
+
new_medium = create_hard_disk_medium(location, format)
|
|
210
|
+
|
|
211
|
+
# Create the storage on the host system
|
|
212
|
+
new_medium.create_base_storage(logical_size, :standard).wait_for_completion(-1)
|
|
213
|
+
|
|
214
|
+
# Update the current Hard Drive instance with the uuid and
|
|
215
|
+
# other attributes assigned after storage was written
|
|
216
|
+
write_attribute(:interface, new_medium)
|
|
217
|
+
initialize_attributes(new_medium)
|
|
218
|
+
|
|
219
|
+
# If the uuid is present, then everything worked
|
|
220
|
+
uuid && !uuid.to_s.empty?
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# Saves the hard drive object. If the hard drive is new,
|
|
224
|
+
# this will create a new hard drive. Otherwise, it will
|
|
225
|
+
# save any other details about the existing hard drive.
|
|
226
|
+
#
|
|
227
|
+
# Currently, **saving existing hard drives does nothing**.
|
|
228
|
+
# This is a limitation of VirtualBox, rather than the library itself.
|
|
229
|
+
#
|
|
230
|
+
# @return [Boolean] True if command was successful, false otherwise.
|
|
231
|
+
def save
|
|
232
|
+
return true if !new_record? && !changed?
|
|
233
|
+
raise Exceptions::ValidationFailedException.new(errors) if !valid?
|
|
234
|
+
|
|
235
|
+
if new_record?
|
|
236
|
+
create # Create a new hard drive
|
|
237
|
+
else
|
|
238
|
+
# Mediums like Hard Drives are not updatable, they need to be recreated
|
|
239
|
+
# Because Hard Drives contain info and paritions, it's easier to error
|
|
240
|
+
# out now than try and do some complicated logic
|
|
241
|
+
msg = "Hard Drives cannot be updated. You need to create one from scratch."
|
|
242
|
+
raise Exceptions::MediumNotUpdatableException.new(msg)
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
module VirtualBox
|
|
2
|
+
# Represents information about the host machine. This includes
|
|
3
|
+
# information such as memory available, processors, dvds, network
|
|
4
|
+
# interfaces, etc.
|
|
5
|
+
#
|
|
6
|
+
# This information is different from system properties in that some
|
|
7
|
+
# parts represent data which is stored in the VirtualBox "registry"
|
|
8
|
+
# (such as the dvd drives, host only network interfaces, etc.)
|
|
9
|
+
class Host < AbstractModel
|
|
10
|
+
attribute :parent, :readonly => true, :property => false
|
|
11
|
+
attribute :interface, :readonly => true, :property => false
|
|
12
|
+
attribute :processor_count, :readonly => true
|
|
13
|
+
attribute :processor_online_count, :readonly => true
|
|
14
|
+
attribute :memory_size, :readonly => true
|
|
15
|
+
attribute :memory_available, :readonly => true
|
|
16
|
+
attribute :operating_system, :readonly => true
|
|
17
|
+
attribute :os_version, :readonly => true
|
|
18
|
+
attribute :utc_time, :readonly => true
|
|
19
|
+
attribute :acceleration_3d_available, :readonly => true
|
|
20
|
+
relationship :network_interfaces, :HostNetworkInterface
|
|
21
|
+
|
|
22
|
+
class << self
|
|
23
|
+
# Populates the system properties relationship for anything
|
|
24
|
+
# which is related to it.
|
|
25
|
+
#
|
|
26
|
+
# **This method typically won't be used except internally.**
|
|
27
|
+
#
|
|
28
|
+
# @return [SystemProperties]
|
|
29
|
+
def populate_relationship(caller, data)
|
|
30
|
+
new(caller, data)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Saves the relationship. This simply calls {#save} on the
|
|
34
|
+
# relationship object.
|
|
35
|
+
#
|
|
36
|
+
# **This method typically won't be used except internally.**
|
|
37
|
+
def save_relationship(caller, item)
|
|
38
|
+
item.save
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Initializes the system properties object. This shouldn't be called
|
|
43
|
+
# directly. Instead `Global#system_properties` should be used to
|
|
44
|
+
# retrieve this object.
|
|
45
|
+
def initialize(caller, raw)
|
|
46
|
+
initialize_attributes(caller, raw)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Initializes the attributes of an existing shared folder.
|
|
50
|
+
def initialize_attributes(caller, raw)
|
|
51
|
+
# Save the interface and parent
|
|
52
|
+
write_attribute(:parent, caller)
|
|
53
|
+
write_attribute(:interface, raw)
|
|
54
|
+
|
|
55
|
+
# Load the attributes from the interface
|
|
56
|
+
load_interface_attributes(interface)
|
|
57
|
+
|
|
58
|
+
# Get the relationships setup
|
|
59
|
+
populate_relationship(:network_interfaces, interface)
|
|
60
|
+
|
|
61
|
+
# Clear dirty and mark as existing
|
|
62
|
+
clear_dirty!
|
|
63
|
+
existing_record!
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Saves the system properties.
|
|
67
|
+
def save
|
|
68
|
+
save_changed_interface_attributes(interface)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
module VirtualBox
|
|
2
|
+
# Represents a network interface on the host. There are generally
|
|
3
|
+
# two types of network interfaces wihch exist on the host: bridged
|
|
4
|
+
# and host-only. This class represents both.
|
|
5
|
+
class HostNetworkInterface < AbstractModel
|
|
6
|
+
attribute :parent, :readonly => true, :property => false
|
|
7
|
+
attribute :parent_collection, :readonly => true, :property => false
|
|
8
|
+
attribute :interface, :readonly => true, :property => false
|
|
9
|
+
attribute :name, :readonly => true
|
|
10
|
+
attribute :uuid, :readonly => true, :property => :id
|
|
11
|
+
attribute :network_name, :readonly => true
|
|
12
|
+
attribute :dhcp_enabled, :readonly => true
|
|
13
|
+
attribute :ip_address, :readonly => true
|
|
14
|
+
attribute :network_mask, :readonly => true
|
|
15
|
+
attribute :ip_v6_supported, :readonly => true
|
|
16
|
+
attribute :ip_v6_address, :readonly => true
|
|
17
|
+
attribute :ip_v6_network_mask_prefix_length, :readonly => true
|
|
18
|
+
attribute :hardware_address, :readonly => true
|
|
19
|
+
attribute :medium_type, :readonly => true
|
|
20
|
+
attribute :status, :readonly => true
|
|
21
|
+
attribute :interface_type, :readonly => true
|
|
22
|
+
|
|
23
|
+
class << self
|
|
24
|
+
# Populates a relationship with another model.
|
|
25
|
+
#
|
|
26
|
+
# **This method typically won't be used except internally.**
|
|
27
|
+
#
|
|
28
|
+
# @return [Array<HostNetworkInterface>]
|
|
29
|
+
def populate_relationship(caller, ihost)
|
|
30
|
+
relation = Proxies::Collection.new(caller, self, ihost)
|
|
31
|
+
|
|
32
|
+
ihost.network_interfaces.each do |inet|
|
|
33
|
+
relation << new(inet)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
relation
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Creates a host only network interface. This method should not
|
|
40
|
+
# be called directly. Instead, the `create` method on the
|
|
41
|
+
# `Global#host` relationship should be called instead. Example:
|
|
42
|
+
#
|
|
43
|
+
# VirtualBox::Global.global.host.network_interfaces.create
|
|
44
|
+
#
|
|
45
|
+
# The above will create a host only network interface, add it to
|
|
46
|
+
# the collection, and will return the instance of the new
|
|
47
|
+
# interface.
|
|
48
|
+
def create(proxy, interface)
|
|
49
|
+
inet, progress = interface.create_host_only_network_interface
|
|
50
|
+
progress.wait
|
|
51
|
+
|
|
52
|
+
new(inet)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def initialize(inet)
|
|
57
|
+
initialize_attributes(inet)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def initialize_attributes(inet)
|
|
61
|
+
write_attribute(:interface, inet)
|
|
62
|
+
|
|
63
|
+
load_interface_attributes(inet)
|
|
64
|
+
existing_record!
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def added_to_relationship(proxy)
|
|
68
|
+
write_attribute(:parent, proxy.parent)
|
|
69
|
+
write_attribute(:parent_collection, proxy)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Gets the DHCP server associated with the network interface. Only
|
|
73
|
+
# host only network interfaces have dhcp servers. If a DHCP server
|
|
74
|
+
# doesn't exist for this network interface, one will be created.
|
|
75
|
+
def dhcp_server(create_if_not_found=true)
|
|
76
|
+
return nil if interface_type != :host_only
|
|
77
|
+
|
|
78
|
+
# Try to find the dhcp server in the list of DHCP servers.
|
|
79
|
+
dhcp_name = "HostInterfaceNetworking-#{name}"
|
|
80
|
+
result = parent.parent.dhcp_servers.find do |dhcp|
|
|
81
|
+
dhcp.network_name == dhcp_name
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# If no DHCP server is found, create one
|
|
85
|
+
result = parent.parent.dhcp_servers.create(dhcp_name) if result.nil? && create_if_not_found
|
|
86
|
+
result
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Gets the VMs which have an adapter which is attached to this
|
|
90
|
+
# network interface.
|
|
91
|
+
def attached_vms
|
|
92
|
+
parent.parent.vms.find_all do |vm|
|
|
93
|
+
result = vm.network_adapters.find do |adapter|
|
|
94
|
+
adapter.enabled? && adapter.host_interface == name
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
!result.nil?
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Sets up the static IPV4 configuration for the host only network
|
|
102
|
+
# interface. This allows the caller to set the IPV4 address of the
|
|
103
|
+
# interface as well as the netmask.
|
|
104
|
+
def enable_static(ip, netmask=nil)
|
|
105
|
+
netmask ||= network_mask
|
|
106
|
+
|
|
107
|
+
interface.enable_static_ip_config(ip, netmask)
|
|
108
|
+
reload
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Reloads the information regarding this host only network
|
|
112
|
+
# interface.
|
|
113
|
+
def reload
|
|
114
|
+
# Find the interface again and reload the data
|
|
115
|
+
inet = parent.interface.find_host_network_interface_by_id(uuid)
|
|
116
|
+
initialize_attributes(inet)
|
|
117
|
+
self
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Destroy the host only network interface. Warning: If any VMs are
|
|
121
|
+
# currently attached to this network interface, their networks
|
|
122
|
+
# will fail to work after removing this. Therefore, one should be
|
|
123
|
+
# careful to make sure to remove all VMs from this network prior
|
|
124
|
+
# to destroying it.
|
|
125
|
+
def destroy
|
|
126
|
+
return false if interface_type == :bridged
|
|
127
|
+
|
|
128
|
+
parent.interface.remove_host_only_network_interface(uuid).wait
|
|
129
|
+
dhcp_server.destroy if dhcp_server(false)
|
|
130
|
+
|
|
131
|
+
# Remove from collection
|
|
132
|
+
parent_collection.delete(self, true) if parent_collection
|
|
133
|
+
|
|
134
|
+
true
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|