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.
Files changed (350) hide show
  1. data/.gitignore +8 -0
  2. data/.yardopts +3 -0
  3. data/Gemfile +16 -0
  4. data/LICENSE +19 -0
  5. data/Rakefile +37 -0
  6. data/Readme.md +70 -0
  7. data/docs/GettingStarted.md +196 -0
  8. data/docs/WhatsNew.md +12 -0
  9. data/features/README.md +33 -0
  10. data/features/global.feature +19 -0
  11. data/features/global_extra_data.feature +27 -0
  12. data/features/step_definitions/abstract_model_steps.rb +39 -0
  13. data/features/step_definitions/extra_data_steps.rb +36 -0
  14. data/features/step_definitions/global_steps.rb +29 -0
  15. data/features/step_definitions/nat_engine_steps.rb +76 -0
  16. data/features/step_definitions/network_adapter_steps.rb +38 -0
  17. data/features/step_definitions/shared_folder_steps.rb +76 -0
  18. data/features/step_definitions/snapshot_steps.rb +74 -0
  19. data/features/step_definitions/storage_controller_steps.rb +16 -0
  20. data/features/step_definitions/virtualbox_steps.rb +17 -0
  21. data/features/step_definitions/vm_steps.rb +50 -0
  22. data/features/support/env.rb +61 -0
  23. data/features/support/helpers.rb +38 -0
  24. data/features/support/hooks.rb +30 -0
  25. data/features/support/ordered_hash.rb +49 -0
  26. data/features/support/vboxmanage.rb +191 -0
  27. data/features/version.feature +16 -0
  28. data/features/vm.feature +13 -0
  29. data/features/vm_bios.feature +29 -0
  30. data/features/vm_cpu.feature +29 -0
  31. data/features/vm_extra_data.feature +35 -0
  32. data/features/vm_hw_virt.feature +29 -0
  33. data/features/vm_nat_engine.feature +57 -0
  34. data/features/vm_network_adapters.feature +27 -0
  35. data/features/vm_shared_folders.feature +42 -0
  36. data/features/vm_snapshots.feature +29 -0
  37. data/features/vm_storage_controllers.feature +11 -0
  38. data/lib/virtualbox.rb +11 -0
  39. data/lib/virtualbox/abstract_model.rb +281 -0
  40. data/lib/virtualbox/abstract_model/attributable.rb +290 -0
  41. data/lib/virtualbox/abstract_model/dirty.rb +177 -0
  42. data/lib/virtualbox/abstract_model/interface_attributes.rb +98 -0
  43. data/lib/virtualbox/abstract_model/relatable.rb +332 -0
  44. data/lib/virtualbox/abstract_model/validatable.rb +167 -0
  45. data/lib/virtualbox/abstract_model/version_matcher.rb +35 -0
  46. data/lib/virtualbox/appliance.rb +62 -0
  47. data/lib/virtualbox/audio_adapter.rb +52 -0
  48. data/lib/virtualbox/bios.rb +50 -0
  49. data/lib/virtualbox/com.rb +23 -0
  50. data/lib/virtualbox/com/abstract_enum.rb +43 -0
  51. data/lib/virtualbox/com/abstract_implementer.rb +45 -0
  52. data/lib/virtualbox/com/abstract_interface.rb +167 -0
  53. data/lib/virtualbox/com/base_interface.rb +38 -0
  54. data/lib/virtualbox/com/ffi/interface.rb +150 -0
  55. data/lib/virtualbox/com/ffi/interfaces.rb +63 -0
  56. data/lib/virtualbox/com/ffi/util.rb +121 -0
  57. data/lib/virtualbox/com/ffi/vboxxpcomc.rb +31 -0
  58. data/lib/virtualbox/com/ffi_interface.rb +96 -0
  59. data/lib/virtualbox/com/implementer/base.rb +59 -0
  60. data/lib/virtualbox/com/implementer/ffi.rb +381 -0
  61. data/lib/virtualbox/com/implementer/mscom.rb +189 -0
  62. data/lib/virtualbox/com/implementer/nil.rb +10 -0
  63. data/lib/virtualbox/com/interface/3.1.x/access_mode.rb +11 -0
  64. data/lib/virtualbox/com/interface/3.1.x/appliance.rb +22 -0
  65. data/lib/virtualbox/com/interface/3.1.x/audio_adapter.rb +15 -0
  66. data/lib/virtualbox/com/interface/3.1.x/audio_controller_type.rb +11 -0
  67. data/lib/virtualbox/com/interface/3.1.x/audio_driver_type.rb +11 -0
  68. data/lib/virtualbox/com/interface/3.1.x/bios_boot_menu_mode.rb +11 -0
  69. data/lib/virtualbox/com/interface/3.1.x/bios_settings.rb +21 -0
  70. data/lib/virtualbox/com/interface/3.1.x/clipboard_mode.rb +11 -0
  71. data/lib/virtualbox/com/interface/3.1.x/console.rb +50 -0
  72. data/lib/virtualbox/com/interface/3.1.x/cpu_property_type.rb +11 -0
  73. data/lib/virtualbox/com/interface/3.1.x/device_type.rb +11 -0
  74. data/lib/virtualbox/com/interface/3.1.x/dhcp_server.rb +22 -0
  75. data/lib/virtualbox/com/interface/3.1.x/firmware_type.rb +11 -0
  76. data/lib/virtualbox/com/interface/3.1.x/guest_os_type.rb +23 -0
  77. data/lib/virtualbox/com/interface/3.1.x/host.rb +42 -0
  78. data/lib/virtualbox/com/interface/3.1.x/host_network_interface.rb +30 -0
  79. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_medium_type.rb +11 -0
  80. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_status.rb +11 -0
  81. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_type.rb +11 -0
  82. data/lib/virtualbox/com/interface/3.1.x/host_usb_device.rb +13 -0
  83. data/lib/virtualbox/com/interface/3.1.x/host_usb_device_filter.rb +13 -0
  84. data/lib/virtualbox/com/interface/3.1.x/hw_virt_ex_property_type.rb +11 -0
  85. data/lib/virtualbox/com/interface/3.1.x/machine.rb +105 -0
  86. data/lib/virtualbox/com/interface/3.1.x/machine_state.rb +14 -0
  87. data/lib/virtualbox/com/interface/3.1.x/medium.rb +50 -0
  88. data/lib/virtualbox/com/interface/3.1.x/medium_attachment.rb +18 -0
  89. data/lib/virtualbox/com/interface/3.1.x/medium_format.rb +18 -0
  90. data/lib/virtualbox/com/interface/3.1.x/medium_state.rb +11 -0
  91. data/lib/virtualbox/com/interface/3.1.x/medium_type.rb +11 -0
  92. data/lib/virtualbox/com/interface/3.1.x/medium_variant.rb +11 -0
  93. data/lib/virtualbox/com/interface/3.1.x/network_adapter.rb +30 -0
  94. data/lib/virtualbox/com/interface/3.1.x/network_adapter_type.rb +11 -0
  95. data/lib/virtualbox/com/interface/3.1.x/network_attachment_type.rb +11 -0
  96. data/lib/virtualbox/com/interface/3.1.x/nsiexception.rb +23 -0
  97. data/lib/virtualbox/com/interface/3.1.x/nsisupports.rb +15 -0
  98. data/lib/virtualbox/com/interface/3.1.x/parallel_port.rb +17 -0
  99. data/lib/virtualbox/com/interface/3.1.x/port_mode.rb +11 -0
  100. data/lib/virtualbox/com/interface/3.1.x/progress.rb +63 -0
  101. data/lib/virtualbox/com/interface/3.1.x/serial_port.rb +19 -0
  102. data/lib/virtualbox/com/interface/3.1.x/session.rb +18 -0
  103. data/lib/virtualbox/com/interface/3.1.x/session_state.rb +11 -0
  104. data/lib/virtualbox/com/interface/3.1.x/session_type.rb +11 -0
  105. data/lib/virtualbox/com/interface/3.1.x/shared_folder.rb +17 -0
  106. data/lib/virtualbox/com/interface/3.1.x/snapshot.rb +20 -0
  107. data/lib/virtualbox/com/interface/3.1.x/storage_bus.rb +11 -0
  108. data/lib/virtualbox/com/interface/3.1.x/storage_controller.rb +23 -0
  109. data/lib/virtualbox/com/interface/3.1.x/storage_controller_type.rb +11 -0
  110. data/lib/virtualbox/com/interface/3.1.x/system_properties.rb +37 -0
  111. data/lib/virtualbox/com/interface/3.1.x/usb_controller.rb +20 -0
  112. data/lib/virtualbox/com/interface/3.1.x/usb_device.rb +24 -0
  113. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter.rb +23 -0
  114. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter_action.rb +11 -0
  115. data/lib/virtualbox/com/interface/3.1.x/usb_device_state.rb +11 -0
  116. data/lib/virtualbox/com/interface/3.1.x/virtual_box_error_info.rb +17 -0
  117. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description.rb +19 -0
  118. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_type.rb +14 -0
  119. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_value_type.rb +11 -0
  120. data/lib/virtualbox/com/interface/3.1.x/virtualbox.rb +67 -0
  121. data/lib/virtualbox/com/interface/3.1.x/vrdp_auth_type.rb +11 -0
  122. data/lib/virtualbox/com/interface/3.1.x/vrdp_server.rb +19 -0
  123. data/lib/virtualbox/com/interface/3.2.x/access_mode.rb +11 -0
  124. data/lib/virtualbox/com/interface/3.2.x/appliance.rb +22 -0
  125. data/lib/virtualbox/com/interface/3.2.x/audio_adapter.rb +15 -0
  126. data/lib/virtualbox/com/interface/3.2.x/audio_controller_type.rb +11 -0
  127. data/lib/virtualbox/com/interface/3.2.x/audio_driver_type.rb +11 -0
  128. data/lib/virtualbox/com/interface/3.2.x/bios_boot_menu_mode.rb +11 -0
  129. data/lib/virtualbox/com/interface/3.2.x/bios_settings.rb +21 -0
  130. data/lib/virtualbox/com/interface/3.2.x/clipboard_mode.rb +11 -0
  131. data/lib/virtualbox/com/interface/3.2.x/console.rb +50 -0
  132. data/lib/virtualbox/com/interface/3.2.x/cpu_property_type.rb +11 -0
  133. data/lib/virtualbox/com/interface/3.2.x/device_type.rb +11 -0
  134. data/lib/virtualbox/com/interface/3.2.x/dhcp_server.rb +22 -0
  135. data/lib/virtualbox/com/interface/3.2.x/firmware_type.rb +11 -0
  136. data/lib/virtualbox/com/interface/3.2.x/guest.rb +13 -0
  137. data/lib/virtualbox/com/interface/3.2.x/guest_os_type.rb +33 -0
  138. data/lib/virtualbox/com/interface/3.2.x/host.rb +43 -0
  139. data/lib/virtualbox/com/interface/3.2.x/host_network_interface.rb +30 -0
  140. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_medium_type.rb +11 -0
  141. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_status.rb +11 -0
  142. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_type.rb +11 -0
  143. data/lib/virtualbox/com/interface/3.2.x/host_usb_device.rb +13 -0
  144. data/lib/virtualbox/com/interface/3.2.x/host_usb_device_filter.rb +13 -0
  145. data/lib/virtualbox/com/interface/3.2.x/hw_virt_ex_property_type.rb +11 -0
  146. data/lib/virtualbox/com/interface/3.2.x/keyboard_hid_type.rb +11 -0
  147. data/lib/virtualbox/com/interface/3.2.x/machine.rb +118 -0
  148. data/lib/virtualbox/com/interface/3.2.x/machine_state.rb +14 -0
  149. data/lib/virtualbox/com/interface/3.2.x/medium.rb +51 -0
  150. data/lib/virtualbox/com/interface/3.2.x/medium_attachment.rb +18 -0
  151. data/lib/virtualbox/com/interface/3.2.x/medium_format.rb +18 -0
  152. data/lib/virtualbox/com/interface/3.2.x/medium_state.rb +11 -0
  153. data/lib/virtualbox/com/interface/3.2.x/medium_type.rb +11 -0
  154. data/lib/virtualbox/com/interface/3.2.x/medium_variant.rb +11 -0
  155. data/lib/virtualbox/com/interface/3.2.x/nat_alias_mode.rb +11 -0
  156. data/lib/virtualbox/com/interface/3.2.x/nat_engine.rb +27 -0
  157. data/lib/virtualbox/com/interface/3.2.x/nat_protocol.rb +11 -0
  158. data/lib/virtualbox/com/interface/3.2.x/network_adapter.rb +34 -0
  159. data/lib/virtualbox/com/interface/3.2.x/network_adapter_type.rb +11 -0
  160. data/lib/virtualbox/com/interface/3.2.x/network_attachment_type.rb +11 -0
  161. data/lib/virtualbox/com/interface/3.2.x/nsiexception.rb +23 -0
  162. data/lib/virtualbox/com/interface/3.2.x/nsisupports.rb +15 -0
  163. data/lib/virtualbox/com/interface/3.2.x/parallel_port.rb +17 -0
  164. data/lib/virtualbox/com/interface/3.2.x/pointing_hid_type.rb +11 -0
  165. data/lib/virtualbox/com/interface/3.2.x/port_mode.rb +11 -0
  166. data/lib/virtualbox/com/interface/3.2.x/progress.rb +63 -0
  167. data/lib/virtualbox/com/interface/3.2.x/serial_port.rb +19 -0
  168. data/lib/virtualbox/com/interface/3.2.x/session.rb +18 -0
  169. data/lib/virtualbox/com/interface/3.2.x/session_state.rb +11 -0
  170. data/lib/virtualbox/com/interface/3.2.x/session_type.rb +11 -0
  171. data/lib/virtualbox/com/interface/3.2.x/shared_folder.rb +17 -0
  172. data/lib/virtualbox/com/interface/3.2.x/snapshot.rb +20 -0
  173. data/lib/virtualbox/com/interface/3.2.x/storage_bus.rb +11 -0
  174. data/lib/virtualbox/com/interface/3.2.x/storage_controller.rb +24 -0
  175. data/lib/virtualbox/com/interface/3.2.x/storage_controller_type.rb +11 -0
  176. data/lib/virtualbox/com/interface/3.2.x/system_properties.rb +42 -0
  177. data/lib/virtualbox/com/interface/3.2.x/usb_controller.rb +21 -0
  178. data/lib/virtualbox/com/interface/3.2.x/usb_device.rb +24 -0
  179. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter.rb +23 -0
  180. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter_action.rb +11 -0
  181. data/lib/virtualbox/com/interface/3.2.x/usb_device_state.rb +11 -0
  182. data/lib/virtualbox/com/interface/3.2.x/virtual_box_error_info.rb +17 -0
  183. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description.rb +19 -0
  184. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_type.rb +14 -0
  185. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_value_type.rb +11 -0
  186. data/lib/virtualbox/com/interface/3.2.x/virtualbox.rb +67 -0
  187. data/lib/virtualbox/com/interface/3.2.x/vrdp_auth_type.rb +11 -0
  188. data/lib/virtualbox/com/interface/3.2.x/vrdp_server.rb +21 -0
  189. data/lib/virtualbox/com/interface/4.0.x/access_mode.rb +11 -0
  190. data/lib/virtualbox/com/interface/4.0.x/appliance.rb +23 -0
  191. data/lib/virtualbox/com/interface/4.0.x/audio_adapter.rb +15 -0
  192. data/lib/virtualbox/com/interface/4.0.x/audio_controller_type.rb +11 -0
  193. data/lib/virtualbox/com/interface/4.0.x/audio_driver_type.rb +11 -0
  194. data/lib/virtualbox/com/interface/4.0.x/auth_type.rb +11 -0
  195. data/lib/virtualbox/com/interface/4.0.x/bios_boot_menu_mode.rb +11 -0
  196. data/lib/virtualbox/com/interface/4.0.x/bios_settings.rb +21 -0
  197. data/lib/virtualbox/com/interface/4.0.x/cleanup_mode.rb +12 -0
  198. data/lib/virtualbox/com/interface/4.0.x/clipboard_mode.rb +11 -0
  199. data/lib/virtualbox/com/interface/4.0.x/console.rb +50 -0
  200. data/lib/virtualbox/com/interface/4.0.x/cpu_property_type.rb +11 -0
  201. data/lib/virtualbox/com/interface/4.0.x/device_type.rb +11 -0
  202. data/lib/virtualbox/com/interface/4.0.x/dhcp_server.rb +22 -0
  203. data/lib/virtualbox/com/interface/4.0.x/event_source.rb +13 -0
  204. data/lib/virtualbox/com/interface/4.0.x/fault_tolerance_state.rb +11 -0
  205. data/lib/virtualbox/com/interface/4.0.x/firmware_type.rb +11 -0
  206. data/lib/virtualbox/com/interface/4.0.x/guest.rb +13 -0
  207. data/lib/virtualbox/com/interface/4.0.x/guest_os_type.rb +33 -0
  208. data/lib/virtualbox/com/interface/4.0.x/host.rb +43 -0
  209. data/lib/virtualbox/com/interface/4.0.x/host_network_interface.rb +30 -0
  210. data/lib/virtualbox/com/interface/4.0.x/host_network_interface_medium_type.rb +11 -0
  211. data/lib/virtualbox/com/interface/4.0.x/host_network_interface_status.rb +11 -0
  212. data/lib/virtualbox/com/interface/4.0.x/host_network_interface_type.rb +11 -0
  213. data/lib/virtualbox/com/interface/4.0.x/host_usb_device.rb +13 -0
  214. data/lib/virtualbox/com/interface/4.0.x/host_usb_device_filter.rb +13 -0
  215. data/lib/virtualbox/com/interface/4.0.x/hw_virt_ex_property_type.rb +12 -0
  216. data/lib/virtualbox/com/interface/4.0.x/keyboard_hid_type.rb +11 -0
  217. data/lib/virtualbox/com/interface/4.0.x/lock_type.rb +11 -0
  218. data/lib/virtualbox/com/interface/4.0.x/machine.rb +132 -0
  219. data/lib/virtualbox/com/interface/4.0.x/machine_state.rb +14 -0
  220. data/lib/virtualbox/com/interface/4.0.x/medium.rb +53 -0
  221. data/lib/virtualbox/com/interface/4.0.x/medium_attachment.rb +18 -0
  222. data/lib/virtualbox/com/interface/4.0.x/medium_format.rb +18 -0
  223. data/lib/virtualbox/com/interface/4.0.x/medium_state.rb +11 -0
  224. data/lib/virtualbox/com/interface/4.0.x/medium_type.rb +11 -0
  225. data/lib/virtualbox/com/interface/4.0.x/medium_variant.rb +11 -0
  226. data/lib/virtualbox/com/interface/4.0.x/nat_alias_mode.rb +11 -0
  227. data/lib/virtualbox/com/interface/4.0.x/nat_engine.rb +27 -0
  228. data/lib/virtualbox/com/interface/4.0.x/nat_protocol.rb +11 -0
  229. data/lib/virtualbox/com/interface/4.0.x/network_adapter.rb +35 -0
  230. data/lib/virtualbox/com/interface/4.0.x/network_adapter_type.rb +11 -0
  231. data/lib/virtualbox/com/interface/4.0.x/network_attachment_type.rb +11 -0
  232. data/lib/virtualbox/com/interface/4.0.x/nsiexception.rb +23 -0
  233. data/lib/virtualbox/com/interface/4.0.x/nsisupports.rb +15 -0
  234. data/lib/virtualbox/com/interface/4.0.x/parallel_port.rb +17 -0
  235. data/lib/virtualbox/com/interface/4.0.x/pointing_hid_type.rb +11 -0
  236. data/lib/virtualbox/com/interface/4.0.x/port_mode.rb +11 -0
  237. data/lib/virtualbox/com/interface/4.0.x/progress.rb +64 -0
  238. data/lib/virtualbox/com/interface/4.0.x/serial_port.rb +19 -0
  239. data/lib/virtualbox/com/interface/4.0.x/session.rb +18 -0
  240. data/lib/virtualbox/com/interface/4.0.x/session_state.rb +11 -0
  241. data/lib/virtualbox/com/interface/4.0.x/session_type.rb +11 -0
  242. data/lib/virtualbox/com/interface/4.0.x/shared_folder.rb +17 -0
  243. data/lib/virtualbox/com/interface/4.0.x/snapshot.rb +20 -0
  244. data/lib/virtualbox/com/interface/4.0.x/storage_bus.rb +11 -0
  245. data/lib/virtualbox/com/interface/4.0.x/storage_controller.rb +24 -0
  246. data/lib/virtualbox/com/interface/4.0.x/storage_controller_type.rb +11 -0
  247. data/lib/virtualbox/com/interface/4.0.x/system_properties.rb +42 -0
  248. data/lib/virtualbox/com/interface/4.0.x/usb_controller.rb +21 -0
  249. data/lib/virtualbox/com/interface/4.0.x/usb_device.rb +24 -0
  250. data/lib/virtualbox/com/interface/4.0.x/usb_device_filter.rb +23 -0
  251. data/lib/virtualbox/com/interface/4.0.x/usb_device_filter_action.rb +11 -0
  252. data/lib/virtualbox/com/interface/4.0.x/usb_device_state.rb +11 -0
  253. data/lib/virtualbox/com/interface/4.0.x/virtual_box_error_info.rb +17 -0
  254. data/lib/virtualbox/com/interface/4.0.x/virtual_system_description.rb +19 -0
  255. data/lib/virtualbox/com/interface/4.0.x/virtual_system_description_type.rb +14 -0
  256. data/lib/virtualbox/com/interface/4.0.x/virtual_system_description_value_type.rb +11 -0
  257. data/lib/virtualbox/com/interface/4.0.x/virtualbox.rb +50 -0
  258. data/lib/virtualbox/com/interface/4.0.x/vrde_server.rb +23 -0
  259. data/lib/virtualbox/com/mscom_interface.rb +44 -0
  260. data/lib/virtualbox/com/nil_interface.rb +7 -0
  261. data/lib/virtualbox/com/util.rb +32 -0
  262. data/lib/virtualbox/cpu.rb +61 -0
  263. data/lib/virtualbox/dhcp_server.rb +89 -0
  264. data/lib/virtualbox/dvd.rb +27 -0
  265. data/lib/virtualbox/exceptions.rb +39 -0
  266. data/lib/virtualbox/ext/byte_normalizer.rb +17 -0
  267. data/lib/virtualbox/ext/glob_loader.rb +35 -0
  268. data/lib/virtualbox/ext/logger.rb +38 -0
  269. data/lib/virtualbox/ext/platform.rb +31 -0
  270. data/lib/virtualbox/ext/subclass_listing.rb +24 -0
  271. data/lib/virtualbox/extra_data.rb +127 -0
  272. data/lib/virtualbox/forwarded_port.rb +222 -0
  273. data/lib/virtualbox/global.rb +96 -0
  274. data/lib/virtualbox/hard_drive.rb +246 -0
  275. data/lib/virtualbox/host.rb +71 -0
  276. data/lib/virtualbox/host_network_interface.rb +137 -0
  277. data/lib/virtualbox/hw_virtualization.rb +64 -0
  278. data/lib/virtualbox/lib.rb +84 -0
  279. data/lib/virtualbox/media.rb +20 -0
  280. data/lib/virtualbox/medium.rb +145 -0
  281. data/lib/virtualbox/medium_attachment.rb +61 -0
  282. data/lib/virtualbox/nat_engine.rb +71 -0
  283. data/lib/virtualbox/nat_forwarded_port.rb +171 -0
  284. data/lib/virtualbox/network_adapter.rb +166 -0
  285. data/lib/virtualbox/proxies/collection.rb +57 -0
  286. data/lib/virtualbox/shared_folder.rb +220 -0
  287. data/lib/virtualbox/snapshot.rb +185 -0
  288. data/lib/virtualbox/storage_controller.rb +160 -0
  289. data/lib/virtualbox/system_properties.rb +73 -0
  290. data/lib/virtualbox/usb_controller.rb +59 -0
  291. data/lib/virtualbox/usb_device_filter.rb +74 -0
  292. data/lib/virtualbox/version.rb +36 -0
  293. data/lib/virtualbox/virtual_system_description.rb +47 -0
  294. data/lib/virtualbox/vm.rb +649 -0
  295. data/lib/virtualbox/vrde_server.rb +57 -0
  296. data/test/test_helper.rb +18 -0
  297. data/test/virtualbox/abstract_model/attributable_test.rb +269 -0
  298. data/test/virtualbox/abstract_model/dirty_test.rb +83 -0
  299. data/test/virtualbox/abstract_model/interface_attributes_test.rb +194 -0
  300. data/test/virtualbox/abstract_model/relatable_test.rb +348 -0
  301. data/test/virtualbox/abstract_model/validatable_test.rb +308 -0
  302. data/test/virtualbox/abstract_model/version_matcher_test.rb +41 -0
  303. data/test/virtualbox/abstract_model_test.rb +462 -0
  304. data/test/virtualbox/appliance_test.rb +159 -0
  305. data/test/virtualbox/audio_adapter_test.rb +83 -0
  306. data/test/virtualbox/bios_test.rb +83 -0
  307. data/test/virtualbox/com/abstract_enum_test.rb +49 -0
  308. data/test/virtualbox/com/abstract_implementer_test.rb +40 -0
  309. data/test/virtualbox/com/abstract_interface_test.rb +140 -0
  310. data/test/virtualbox/com/ffi/interface_test.rb +249 -0
  311. data/test/virtualbox/com/ffi/util_test.rb +108 -0
  312. data/test/virtualbox/com/ffi_interface_test.rb +42 -0
  313. data/test/virtualbox/com/implementer/base_test.rb +38 -0
  314. data/test/virtualbox/com/implementer/ffi_test.rb +527 -0
  315. data/test/virtualbox/com/implementer/mscom_test.rb +247 -0
  316. data/test/virtualbox/com/mscom_interface_test.rb +17 -0
  317. data/test/virtualbox/com/util_test.rb +17 -0
  318. data/test/virtualbox/cpu_test.rb +103 -0
  319. data/test/virtualbox/dhcp_server_test.rb +165 -0
  320. data/test/virtualbox/dvd_test.rb +28 -0
  321. data/test/virtualbox/ext/byte_normalizer_test.rb +34 -0
  322. data/test/virtualbox/ext/platform_test.rb +50 -0
  323. data/test/virtualbox/ext/subclass_listing_test.rb +25 -0
  324. data/test/virtualbox/extra_data_test.rb +155 -0
  325. data/test/virtualbox/forwarded_port_test.rb +286 -0
  326. data/test/virtualbox/global_test.rb +46 -0
  327. data/test/virtualbox/hard_drive_test.rb +141 -0
  328. data/test/virtualbox/host_network_interface_test.rb +255 -0
  329. data/test/virtualbox/host_test.rb +94 -0
  330. data/test/virtualbox/hw_virtualization_test.rb +103 -0
  331. data/test/virtualbox/lib_test.rb +93 -0
  332. data/test/virtualbox/medium_attachment_test.rb +147 -0
  333. data/test/virtualbox/medium_test.rb +192 -0
  334. data/test/virtualbox/nat_engine_test.rb +106 -0
  335. data/test/virtualbox/nat_forwarded_port_test.rb +222 -0
  336. data/test/virtualbox/network_adapter_test.rb +191 -0
  337. data/test/virtualbox/proxies/collection_test.rb +102 -0
  338. data/test/virtualbox/shared_folder_test.rb +219 -0
  339. data/test/virtualbox/snapshot_test.rb +231 -0
  340. data/test/virtualbox/storage_controller_test.rb +197 -0
  341. data/test/virtualbox/system_properties_test.rb +87 -0
  342. data/test/virtualbox/usb_controller_test.rb +112 -0
  343. data/test/virtualbox/usb_device_filter_test.rb +93 -0
  344. data/test/virtualbox/version_test.rb +59 -0
  345. data/test/virtualbox/virtual_system_description_test.rb +61 -0
  346. data/test/virtualbox/vm_test.rb +633 -0
  347. data/test/virtualbox/vrde_server_test.rb +83 -0
  348. data/test/virtualbox_test.rb +11 -0
  349. data/virtualbox.gemspec +24 -0
  350. metadata +464 -0
@@ -0,0 +1,185 @@
1
+ module VirtualBox
2
+ # Represents a virtual machine snapshot. Snapshots allow users of virtual
3
+ # machines to make a lightweight "snapshot" of a virtual machine at any
4
+ # moment. This snapshot can be taken while the virtual machine is running
5
+ # or while its powered off. Snapshotting creates a differencing image for
6
+ # the hard drive which allows a virtual machine to restore itself to the
7
+ # exact state of where it was snapshotted.
8
+ #
9
+ # # Getting Snapshots
10
+ #
11
+ # Snapshots are accessed from the `current_snapshot` relationship on {VM}.
12
+ # There is no other way to access snapshots. After getting the current
13
+ # snapshot, you can easily traverse the tree of snapshots by accessing
14
+ # `parent` or `children` on the snapshot. An example follows:
15
+ #
16
+ # vm = VirtualBox::VM.find("MyWindowsXP")
17
+ # p vm.current_snapshot # the current snapshot
18
+ # p vm.current_snapshot.children # The children of the current snapshot
19
+ # p vm.current_snapshot.parent # The current snapshot's parent
20
+ # p vm.current_snapshot.parent.parent.children # You get the idea.
21
+ #
22
+ # # Taking a Snapshot
23
+ #
24
+ # To take a snapshot, call the {VM#take_snapshot} method. Please view
25
+ # the documentation on that method for more information.
26
+ #
27
+ # # Restoring a Snapshot
28
+ #
29
+ # To restore a snapshot, call the {#restore} method. A simple example
30
+ # is shown below:
31
+ #
32
+ # vm = VirtualBox::VM.find("MyWindowsXP")
33
+ # snapshot = vm.current_snapshot.parent
34
+ # snapshot.restore
35
+ #
36
+ # **Note:** The VM object will not immediately update to reflect any settings
37
+ # changes or current snapshot changes from the restore. To grab the updates,
38
+ # either load a new VM object or call {VM#reload}.
39
+ #
40
+ # # Deleting a Snapshot
41
+ #
42
+ # To delete a snapshot, simply find the snapshot of interest and call
43
+ # it's {#destroy} method. A quick example is shown below:
44
+ #
45
+ # vm = VirtualBox::VM.find("MyWindowsXP")
46
+ # snapshot = vm.current_snapshot # Grab the current snapshot
47
+ # snapshot.destroy # Destroy it
48
+ #
49
+ # Note that this doesn't actually affect the `current_snapshot`
50
+ # relationship on the VM. To update all the proper values, you have to call
51
+ # {VM#reload}.
52
+ #
53
+ class Snapshot < AbstractModel
54
+ attribute :uuid, :readonly => true, :property => :id
55
+ attribute :name
56
+ attribute :description
57
+ attribute :time_stamp, :readonly => true
58
+ attribute :online, :readonly => true, :boolean => true
59
+ attribute :interface, :readonly => true, :property => false
60
+ relationship :parent, :Snapshot, :lazy => true
61
+ relationship :machine, :VM, :lazy => true
62
+ relationship :children, :Snapshot, :lazy => true
63
+
64
+ class << self
65
+ # Populates a relationship with another model. Since a snapshot
66
+ # can be in a relationship with multiple items, this method forwards
67
+ # to other methods such as {populate_vm_relationship}.
68
+ #
69
+ # **This method typically won't be used except internally.**
70
+ def populate_relationship(caller, data)
71
+ if data.is_a?(COM::Util.versioned_interface(:Machine))
72
+ populate_machine_relationship(caller, data)
73
+ elsif data.is_a?(Array)
74
+ populate_children_relationship(caller, data)
75
+ elsif data.is_a?(COM::Util.versioned_interface(:Snapshot)) || data.nil?
76
+ populate_parent_relationship(caller, data)
77
+ else
78
+ raise Exceptions::Exception.new("Invalid relationship data for Snapshot: #{data}")
79
+ end
80
+ end
81
+
82
+ # Populates the VM relationship as the "current snapshot."
83
+ #
84
+ # **This method typically won't be used except internally.**
85
+ #
86
+ # @return [Snapshot]
87
+ def populate_machine_relationship(caller, machine)
88
+ # The current snapshot can and will be nil if there are no snapshots
89
+ # taken. In that case, we just return nil.
90
+ snapshot = machine.current_snapshot
91
+ snapshot ? new(machine.current_snapshot) : nil
92
+ end
93
+
94
+ # Populates the VM relationship as the "current snapshot."
95
+ #
96
+ # **This method typically won't be used except internally.**
97
+ #
98
+ # @return [Snapshot]
99
+ def populate_parent_relationship(caller, parent)
100
+ # If the parent is nil then that means the child is the root
101
+ # snapshot
102
+ parent ? new(parent) : nil
103
+ end
104
+
105
+ # Populates the snapshot child tree relationship.
106
+ #
107
+ # **This method typically won't be used except internally.**
108
+ #
109
+ # @return [Array<Snapshot>]
110
+ def populate_children_relationship(caller, snapshots)
111
+ result = Proxies::Collection.new(caller)
112
+
113
+ snapshots.each do |snapshot|
114
+ result << new(snapshot)
115
+ end
116
+
117
+ result
118
+ end
119
+ end
120
+
121
+ # Initializes a new snapshot. This should never be called on its own.
122
+ # Snapshots should be accessed beginning with the `current_snapshot` on
123
+ # a VM, and can be further accessed by traversing the parent/child tree
124
+ # of the snapshot.
125
+ def initialize(snapshot)
126
+ write_attribute(:interface, snapshot)
127
+ initialize_attributes(snapshot)
128
+ end
129
+
130
+ def initialize_attributes(snapshot)
131
+ # Load the interface attributes
132
+ load_interface_attributes(snapshot)
133
+
134
+ # Clear dirtiness, since this should only be called initially and
135
+ # therefore shouldn't affect dirtiness
136
+ clear_dirty!
137
+
138
+ # But this is an existing record
139
+ existing_record!
140
+ end
141
+
142
+ # Loads the lazy relationships.
143
+ #
144
+ # **This method should only be called internally.**
145
+ def load_relationship(name)
146
+ populate_relationship(:parent, interface.parent)
147
+ populate_relationship(:machine, interface.machine)
148
+ populate_relationship(:children, interface.children)
149
+ end
150
+
151
+ # Timestamp that the snapshot was taken. This method overwrites the
152
+ # typical attribute so it can return a Time object.
153
+ def time_stamp
154
+ # Seconds, microseconds, since the time stamp is in milliseconds
155
+ value = read_attribute(:time_stamp)
156
+ Time.at(value / 1000, (value % 1000) * 1000)
157
+ end
158
+
159
+ # Restore a snapshot. This will restore this snapshot's virtual machine
160
+ # to the state that this snapshot represents. This method will block while
161
+ # the restore occurs.
162
+ #
163
+ # If a block is given to the function, it will be yielded with a progress
164
+ # object which can be used to track the progress of the operation.
165
+ def restore(&block)
166
+ machine.with_open_session do |session|
167
+ session.console.restore_snapshot(interface).wait(&block)
168
+ end
169
+ end
170
+
171
+ # Destroy a snapshot. This will physically remove the snapshot. Once this
172
+ # method is called, there is no undo. If this snapshot is a parent of other
173
+ # snapshots, the differencing image of this snapshot will be merged with
174
+ # the child snapshots so no data is lost. This process can sometimes take
175
+ # some time. This method will block while this process occurs.
176
+ #
177
+ # If a block is given to the function, it will be yielded with a progress
178
+ # object which can be used to track the progress of the operation.
179
+ def destroy(&block)
180
+ machine.with_open_session do |session|
181
+ session.console.delete_snapshot(uuid).wait(&block)
182
+ end
183
+ end
184
+ end
185
+ end
@@ -0,0 +1,160 @@
1
+ module VirtualBox
2
+ # Represents a single storage controller which can be attached to a
3
+ # virtual machine.
4
+ #
5
+ # **Currently, storage controllers can not be created from scratch.
6
+ # Therefore, the only way to use this model is through a relationship
7
+ # of a {VM} object.**
8
+ #
9
+ # # Attributes and Relationships
10
+ #
11
+ # Properties of the storage controller are exposed using standard ruby instance
12
+ # methods which are generated on the fly. Because of this, they are not listed
13
+ # below as available instance methods.
14
+ #
15
+ # These attributes can be accessed and modified via standard ruby-style
16
+ # `instance.attribute` and `instance.attribute=` methods. The attributes are
17
+ # listed below.
18
+ #
19
+ # Relationships are also accessed like attributes but can't be set. Instead,
20
+ # they are typically references to other objects such as an {AttachedDevice} which
21
+ # in turn have their own attributes which can be modified.
22
+ #
23
+ # ## Attributes
24
+ #
25
+ # This is copied directly from the class header, but lists all available
26
+ # attributes. If you don't understand what this means, read {Attributable}.
27
+ #
28
+ # attribute :parent, :readonly => true
29
+ # attribute :name
30
+ # attribute :type
31
+ # attribute :max_ports, :populate_key => :maxportcount
32
+ # attribute :ports, :populate_key => :portcount
33
+ #
34
+ # ## Relationships
35
+ #
36
+ # In addition to the basic attributes, a virtual machine is related
37
+ # to other things. The relationships are listed below. If you don't
38
+ # understand this, read {Relatable}.
39
+ #
40
+ # relationship :devices, AttachedDevice, :dependent => :destroy
41
+ #
42
+ class StorageController < AbstractModel
43
+ attribute :parent, :readonly => true, :property => false
44
+ attribute :interface, :readonly => true, :property => false
45
+ attribute :name, :readonly => true
46
+ attribute :port_count
47
+ attribute :bus, :readonly => true
48
+ attribute :controller_type
49
+
50
+ class << self
51
+ # Populates a relationship with another model.
52
+ #
53
+ # **This method typically won't be used except internally.**
54
+ #
55
+ # @return [Array<StorageController>]
56
+ def populate_relationship(caller, data)
57
+ if data.is_a?(COM::Util.versioned_interface(:Machine))
58
+ populate_array_relationship(caller, data)
59
+ elsif data.is_a?(MediumAttachment)
60
+ populate_attachment_relationship(caller, data)
61
+ end
62
+ end
63
+
64
+ # Populates a has many relationship for a {VM}.
65
+ #
66
+ # **This method typically won't be used except internally.**
67
+ #
68
+ # @return [Array<StorageController>]
69
+ def populate_array_relationship(caller, imachine)
70
+ relation = Proxies::Collection.new(caller)
71
+
72
+ imachine.storage_controllers.each do |icontroller|
73
+ relation << new(caller, icontroller)
74
+ end
75
+
76
+ relation
77
+ end
78
+
79
+ # Populates a single relationship for a {MediumAttachment}.
80
+ #
81
+ # **This method typically won't be used except internally.**
82
+ #
83
+ # @return [Array<StorageController>]
84
+ def populate_attachment_relationship(caller, attachment)
85
+ # Find the storage controller with the matching name
86
+ attachment.parent.storage_controllers.find do |sc|
87
+ sc.name == attachment.controller_name
88
+ end
89
+ end
90
+
91
+ # Destroys a relationship with another model.
92
+ #
93
+ # **This method typically won't be used except internally.**
94
+ def destroy_relationship(caller, data, *args)
95
+ data.each { |v| v.destroy(*args) }
96
+ end
97
+
98
+ # Saves the relationship. This simply calls {#save} on every
99
+ # member of the relationship.
100
+ #
101
+ # **This method typically won't be used except internally.**
102
+ def save_relationship(caller, controllers)
103
+ controllers.each do |sc|
104
+ sc.save
105
+ end
106
+ end
107
+ end
108
+
109
+ # Since storage controllers still can't be created from scratch,
110
+ # this method shouldn't be called. Instead, storage controllers
111
+ # can be retrieved through relationships of other models such
112
+ # as {VM}.
113
+ def initialize(caller, icontroller)
114
+ super()
115
+
116
+ populate_attributes({
117
+ :parent => caller,
118
+ :interface => icontroller
119
+ }, :ignore_relationships => true)
120
+ load_interface_attributes(icontroller)
121
+ clear_dirty!
122
+ end
123
+
124
+ # Retrieves the array of medium attachments related to this storage controller.
125
+ # This is not implemented as a relationship simply because it would have been
126
+ # difficult to do so (circular) and its not really necessary.
127
+ def medium_attachments
128
+ parent.medium_attachments.find_all do |ma|
129
+ ma.storage_controller == self
130
+ end
131
+ end
132
+
133
+ # Saves the storage controller. This method shouldn't be called directly.
134
+ # Instead, {VM#save} should be called, which will save all attached storage
135
+ # controllers as well. This will setup the proper parameter for `interface`
136
+ # here.
137
+ def save
138
+ parent.with_open_session do |session|
139
+ machine = session.machine
140
+ save_changed_interface_attributes(machine.get_storage_controller_by_name(name))
141
+ end
142
+ end
143
+
144
+ # Destroys the storage controller. This first detaches all attachments on this
145
+ # storage controller. Note that this does *not* delete the media on the attachments,
146
+ # unless specified by the options.
147
+ def destroy(*args)
148
+ # First remove all attachments
149
+ medium_attachments.each do |ma|
150
+ ma.destroy(*args)
151
+ end
152
+
153
+ # Finally, remove ourselves
154
+ parent.with_open_session do |session|
155
+ machine = session.machine
156
+ machine.remove_storage_controller(name)
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,73 @@
1
+ module VirtualBox
2
+ # Represents the system properties associated with this VirtualBox
3
+ # installation. Many of these properties are readonly and represent
4
+ # limits on the system (max RAM available, max CPU, etc.). There are
5
+ # also configurable options which can be saved such as the default
6
+ # hard disk folder, or default machine folder.
7
+ class SystemProperties < AbstractModel
8
+ attribute :interface, :readonly => true, :property => false
9
+ attribute :min_guest_ram, :readonly => true
10
+ attribute :max_guest_ram, :readonly => true
11
+ attribute :min_guest_vram, :readonly => true
12
+ attribute :max_guest_vram, :readonly => true
13
+ attribute :min_guest_cpu_count, :readonly => true
14
+ attribute :max_guest_cpu_count, :readonly => true
15
+ attribute :info_vd_size, :readonly => true
16
+ attribute :network_adapter_count, :readonly => true
17
+ attribute :serial_port_count, :readonly => true
18
+ attribute :parallel_port_count, :readonly => true
19
+ attribute :max_boot_position, :readonly => true
20
+ attribute :default_machine_folder
21
+ attribute :medium_formats, :readonly => true
22
+ attribute :default_hard_disk_format
23
+ attribute :vrde_auth_library
24
+ attribute :web_service_auth_library
25
+ attribute :log_history_count
26
+ attribute :default_audio_driver, :readonly => true
27
+
28
+ class << self
29
+ # Populates the system properties relationship for anything
30
+ # which is related to it.
31
+ #
32
+ # **This method typically won't be used except internally.**
33
+ #
34
+ # @return [SystemProperties]
35
+ def populate_relationship(caller, data)
36
+ new(data)
37
+ end
38
+
39
+ # Saves the relationship. This simply calls {#save} on the
40
+ # relationship object.
41
+ #
42
+ # **This method typically won't be used except internally.**
43
+ def save_relationship(caller, item)
44
+ item.save
45
+ end
46
+ end
47
+
48
+ # Initializes the system properties object. This shouldn't be called
49
+ # directly. Instead `Global#system_properties` should be used to
50
+ # retrieve this object.
51
+ def initialize(isysprop)
52
+ initialize_attributes(isysprop)
53
+ end
54
+
55
+ # Initializes the attributes of an existing shared folder.
56
+ def initialize_attributes(isysprop)
57
+ # Save the interface to an attribute
58
+ write_attribute(:interface, isysprop)
59
+
60
+ # Load the attributes from the interface
61
+ load_interface_attributes(interface)
62
+
63
+ # Clear dirty and mark as existing
64
+ clear_dirty!
65
+ existing_record!
66
+ end
67
+
68
+ # Saves the system properties.
69
+ def save
70
+ save_changed_interface_attributes(interface)
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,59 @@
1
+ module VirtualBox
2
+ # Represents a USB controller within VirtualBox. This class is a relationship
3
+ # to {VM} objects.
4
+ class USBController < AbstractModel
5
+ attribute :parent, :readonly => true, :property => false
6
+ attribute :interface, :readonly => true, :property => false
7
+ attribute :enabled, :boolean => true
8
+ attribute :enabled_ehci, :boolean => true
9
+ attribute :usb_standard, :readonly => true
10
+ relationship :device_filters, :USBDeviceFilter
11
+
12
+ class << self
13
+ # Populates the USB controller relationship for anything
14
+ # which is related to it.
15
+ #
16
+ # **This method typically won't be used except internally.**
17
+ #
18
+ # @return [USBController]
19
+ def populate_relationship(caller, machine)
20
+ new(caller, machine.usb_controller)
21
+ end
22
+
23
+ # Saves the relationship. This simply calls {#save} on the
24
+ # relationship object.
25
+ #
26
+ # **This method typically won't be used except internally.**
27
+ def save_relationship(caller, item)
28
+ item.save
29
+ end
30
+ end
31
+
32
+ def initialize(parent, iusb)
33
+ initialize_attributes(parent, iusb)
34
+ end
35
+
36
+ def initialize_attributes(parent, iusb)
37
+ # Write the parent and interface attributes
38
+ write_attribute(:parent, parent)
39
+ write_attribute(:interface, iusb)
40
+
41
+ # Load the interface attributes
42
+ load_interface_attributes(interface)
43
+
44
+ # Setup the relationships
45
+ populate_relationships(interface)
46
+
47
+ # Clear dirty and mark as existing
48
+ clear_dirty!
49
+ existing_record!
50
+ end
51
+
52
+ # Saves the USB controller.
53
+ def save
54
+ parent.with_open_session do |session|
55
+ save_changed_interface_attributes(session.machine.usb_controller)
56
+ end
57
+ end
58
+ end
59
+ end