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,64 @@
1
+ module VirtualBox
2
+ # Represents the HW virtualization properties on a VM.
3
+ class HWVirtualization < AbstractModel
4
+ attribute :parent, :readonly => true, :property => false
5
+ attribute_scope(:property_getter => Proc.new { |instance, *args| instance.get_property(*args) },
6
+ :property_setter => Proc.new { |instance, *args| instance.set_property(*args) }) do
7
+ attribute :enabled, :boolean => true
8
+ attribute :exclusive, :boolean => true
9
+ attribute :vpid, :boolean => true
10
+ attribute :nested_paging, :boolean => true
11
+ attribute :force, :boolean => true
12
+ end
13
+
14
+ class << self
15
+ # Populates a relationship with another model.
16
+ #
17
+ # **This method typically won't be used except internally.**
18
+ #
19
+ # @return [HWVirtualization]
20
+ def populate_relationship(caller, imachine)
21
+ data = new(caller, imachine)
22
+ end
23
+
24
+ # Saves the relationship.
25
+ #
26
+ # **This method typically won't be used except internally.**
27
+ def save_relationship(caller, instance)
28
+ instance.save
29
+ end
30
+ end
31
+
32
+ def initialize(parent, imachine)
33
+ write_attribute(:parent, parent)
34
+
35
+ # Load the attributes and mark the whole thing as existing
36
+ load_interface_attributes(imachine)
37
+ clear_dirty!
38
+ existing_record!
39
+ end
40
+
41
+ def get_property(interface, key)
42
+ interface.get_hw_virt_ex_property(key)
43
+ end
44
+
45
+ def set_property(interface, key, value)
46
+ interface.set_hw_virt_ex_property(key, value)
47
+ end
48
+
49
+ def validate
50
+ super
51
+
52
+ validates_inclusion_of :enabled, :exclusive, :vpid, :nested_paging, :in => [true, false]
53
+ end
54
+
55
+ def save
56
+ parent.with_open_session do |session|
57
+ machine = session.machine
58
+
59
+ # Save them
60
+ save_changed_interface_attributes(machine)
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,84 @@
1
+ module VirtualBox
2
+ # Used by the rest of the VirtualBox library to interface with
3
+ # the VirtualBox XPCOM library (VBoxXPCOMC). Most users will never need
4
+ # to interface with this class directly, except other to set the path to
5
+ # the `VBoxXPCOMC` lib.
6
+ #
7
+ # # Setting the Path to the VBoxXPCOMC Library
8
+ #
9
+ # This won't be necessary for 95% of users, and won't be necessary at all
10
+ # for windows users. But for unix users, the VirtualBox gem uses a dynamic
11
+ # library named `VBoxXPCOMC` to interface with VirtualBox. The gem does its
12
+ # best to guess the path to this gem based on the operating system ruby is
13
+ # running on, but in the case you get an error about it missing, you can
14
+ # easily set it:
15
+ #
16
+ # VirtualBox::Lib.lib_path = "/path/to/VBoxXPCOMC.so"
17
+ #
18
+ # **Windows users will never need to do this.**
19
+ #
20
+ class Lib
21
+ @@lib_path = nil
22
+ @@lib = nil
23
+
24
+ attr_reader :interface
25
+ attr_reader :virtualbox
26
+ attr_reader :session
27
+
28
+ class << self
29
+ # Resets the initialized library (if there is any). This is primarily only
30
+ # used for testing.
31
+ def reset!
32
+ @@lib = nil
33
+ end
34
+
35
+ # The singleton instance of Lib.
36
+ #
37
+ # @return [Lib]
38
+ def lib
39
+ @@lib ||= new(lib_path)
40
+ end
41
+
42
+ # Sets the path to the VBoxXPCOMC library which is created with any
43
+ # VirtualBox install. 90% of the time, this won't have to be set manually,
44
+ # and instead the gem will try to find it for you.
45
+ #
46
+ # @param [String] Full path to the VBoxXPCOMC library
47
+ def lib_path=(value)
48
+ @@lib_path = value.nil? ? value : File.expand_path(value)
49
+ end
50
+
51
+ # Returns the path to the virtual box library. If the path
52
+ # has not yet been set, it attempts to infer it based on the
53
+ # platform ruby is running on.
54
+ def lib_path
55
+ if @@lib_path.nil?
56
+ if Platform.mac?
57
+ @@lib_path = ["/Applications/VirtualBox.app/Contents/MacOS/VBoxXPCOMC.dylib"]
58
+ elsif Platform.linux?
59
+ @@lib_path = ["/opt/VirtualBox/VBoxXPCOMC.so", "/usr/lib/virtualbox/VBoxXPCOMC.so"]
60
+ elsif Platform.solaris?
61
+ @@lib_path = ["/opt/VirtualBox/amd64/VBoxXPCOMC.so", "/opt/VirtualBox/i386/VBoxXPCOMC.so"]
62
+ elsif Platform.windows?
63
+ @@lib_path = "Unknown"
64
+ else
65
+ @@lib_path = "Unknown"
66
+ end
67
+ end
68
+
69
+ @@lib_path
70
+ end
71
+ end
72
+
73
+ def initialize(lib_path)
74
+ if Platform.windows?
75
+ @interface = COM::MSCOMInterface.new
76
+ else
77
+ @interface = COM::FFIInterface.create(lib_path)
78
+ end
79
+
80
+ @virtualbox = @interface.virtualbox
81
+ @session = @interface.session
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,20 @@
1
+ module VirtualBox
2
+ # Represents the media registry within the global VirtualBox configuration.
3
+ class Media < AbstractModel
4
+ attribute :parent, :readonly => true
5
+ relationship :hard_drives, :HardDrive
6
+ relationship :dvds, :DVD
7
+
8
+ class << self
9
+ def populate_relationship(caller, lib)
10
+ new(caller, lib)
11
+ end
12
+ end
13
+
14
+ def initialize(parent, lib)
15
+ populate_attributes({ :parent => parent }, :ignore_relationships => true)
16
+ populate_relationship(:hard_drives, lib.virtualbox.hard_disks)
17
+ populate_relationship(:dvds, lib.virtualbox.dvd_images)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,145 @@
1
+ module VirtualBox
2
+ # Represents a medium object part of VirtualBox. A medium is a
3
+ # hard drive, DVD, floppy disk, etc. Each of these share common
4
+ # properties represented here.
5
+ class Medium < AbstractModel
6
+ include SubclassListing
7
+
8
+ attribute :uuid, :readonly => true, :property => :id
9
+ attribute :type, :readonly => true
10
+ attribute :description, :readonly => true
11
+ attribute :location, :readonly => true
12
+ attribute :state, :readonly => true, :property => :refresh_state
13
+ attribute :interface, :readonly => true, :property => false
14
+ relationship :children, :Medium, :lazy => true
15
+
16
+ class << self
17
+ # Populates a relationship with another model. Depending on the data sent
18
+ # through as the `media` parameter, this can either return a single value
19
+ # or an array of values. {Global}, for example, has a relationship of media,
20
+ # while a {MediumAttachment} has a relationship with a single medium.
21
+ #
22
+ # **This method typically won't be used except internally.**
23
+ def populate_relationship(caller, media)
24
+ if media.is_a?(Array)
25
+ # has many relationship
26
+ populate_array_relationship(caller, media)
27
+ else
28
+ # has one relationship
29
+ populate_single_relationship(caller, media)
30
+ end
31
+ end
32
+
33
+ # Populates a relationship which has many media.
34
+ #
35
+ # **This method typically won't be used except internally.**
36
+ #
37
+ # @return [Array<Medium>]
38
+ def populate_array_relationship(caller, media)
39
+ relation = Proxies::Collection.new(caller)
40
+
41
+ media.each do |medium|
42
+ # Skip media this class isn't interested in
43
+ next if device_type != :all && medium.device_type != device_type
44
+
45
+ # Wrap it up and add to the relationship
46
+ relation << new(medium)
47
+ end
48
+
49
+ relation
50
+ end
51
+
52
+ # Populates a relationship which has one medium. This method goes one step
53
+ # further and instantiates the proper class for the type of medium given.
54
+ # For example, given a `device_type` of `:hard_drive`, it would return a
55
+ # {HardDrive} object.
56
+ #
57
+ # **This method typically won't be used except internally.**
58
+ #
59
+ # @return [Medium]
60
+ def populate_single_relationship(caller, medium)
61
+ return nil if medium.nil?
62
+
63
+ subclasses.each do |subclass|
64
+ # Skip this class unless the device type matches
65
+ next unless subclass.device_type == medium.device_type
66
+
67
+ # Wrap it up and return it
68
+ return subclass.new(medium)
69
+ end
70
+
71
+ # If all else fails, just wrap it in a Medium
72
+ new(medium)
73
+ end
74
+
75
+ # Specifies the device type that a {Medium} class is interested in. This
76
+ # is `:all` on {Medium}, but is expected to be overridden by child classes.
77
+ # The value returned should be one of {COM::Interface::DeviceType}.
78
+ #
79
+ # @return [Symbol]
80
+ def device_type
81
+ :all
82
+ end
83
+ end
84
+
85
+ # Initializes a medium object, retrieving the attributes and information
86
+ # from the {COM::Interface::Medium} object given as the parameter. This initialization
87
+ # is done automatically by virtualbox when populating a relationship. Mediums should
88
+ # never be initialized manually.
89
+ #
90
+ # @param [COM::Interface::Medium] imedium
91
+ def initialize(imedium)
92
+ write_attribute(:interface, imedium)
93
+ initialize_attributes(imedium)
94
+ end
95
+
96
+ def initialize_attributes(imedium)
97
+ # First refresh the state (required for many attributes)
98
+ imedium.refresh_state
99
+
100
+ # Load interface attributes
101
+ load_interface_attributes(imedium)
102
+
103
+ # Clear dirtiness, since this should only be called initially and
104
+ # therefore shouldn't affect dirtiness
105
+ clear_dirty!
106
+
107
+ # But this is an existing record
108
+ existing_record!
109
+ end
110
+
111
+ def load_relationship(name)
112
+ # Populate children
113
+ populate_relationship(name, interface.children)
114
+ end
115
+
116
+ # Returns the basename of the images location (the file name +extension)
117
+ #
118
+ # @return [String]
119
+ def filename
120
+ File.basename(location.to_s)
121
+ end
122
+
123
+ # Destroys the medium, optionally also phsyically destroying the backing
124
+ # storage. This removes this medium from the VirtualBox media registry.
125
+ # In order to remove the medium, it must not be attached to any virtual
126
+ # machine. If it is, an exception of some sort will be raised.
127
+ # This action happens *immediately* when the method is called, and is not
128
+ # deferred to a save.
129
+ def destroy(destroy_backing=false)
130
+ if destroy_backing
131
+ destroy_storage
132
+ else
133
+ interface.close
134
+ end
135
+ end
136
+
137
+ # Destroys the backing store of the medium and the media registry. This is
138
+ # analagous to calling {#destroy} with the first parameter set to true. This
139
+ # method requires that the medium not be attached to any virtual machine
140
+ # (running or not).
141
+ def destroy_storage
142
+ interface.delete_storage.wait_for_completion(-1)
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,61 @@
1
+ module VirtualBox
2
+ # Represents the attachment of a medium (DVD, Hard Drive, etc) to a
3
+ # virtual machine, and specifically to a {StorageController}.
4
+ class MediumAttachment < AbstractModel
5
+ attribute :parent, :readonly => true, :property => false
6
+ attribute :controller_name, :readonly => :true, :property => :controller
7
+ attribute :port, :readonly => true
8
+ attribute :device, :readonly => true
9
+ attribute :passthrough, :readonly => true
10
+ attribute :type, :readonly => true
11
+ relationship :medium, :Medium
12
+ relationship :storage_controller, :StorageController
13
+
14
+ class << self
15
+ # Populates a relationship with another model.
16
+ #
17
+ # **This method typically won't be used except internally.**
18
+ #
19
+ # @return [Array<MediumAttachment>]
20
+ def populate_relationship(caller, imachine)
21
+ relation = Proxies::Collection.new(caller)
22
+
23
+ imachine.medium_attachments.each do |ima|
24
+ relation << new(caller, ima)
25
+ end
26
+
27
+ relation
28
+ end
29
+ end
30
+
31
+ def initialize(parent, imedium_attachment)
32
+ populate_attributes({:parent => parent}, :ignore_relationships => true)
33
+ initialize_attributes(imedium_attachment)
34
+ end
35
+
36
+ def initialize_attributes(ima)
37
+ load_interface_attributes(ima)
38
+ populate_relationship(:medium, ima.medium)
39
+ populate_relationship(:storage_controller, self)
40
+ end
41
+
42
+ # Detaches the medium from it's parent virtual machine. Note that this
43
+ # **does not delete** the `medium` which this attachment references; it
44
+ # merely removes the assocation of said medium with this attachment's
45
+ # virtual machine.
46
+ def detach
47
+ parent.with_open_session do |session|
48
+ machine = session.machine
49
+
50
+ machine.detach_device(storage_controller.name, port, device)
51
+ end
52
+ end
53
+
54
+ # Destroy this medium attachment. This simply detaches the medium attachment.
55
+ # This will also delete the medium if that option is specified.
56
+ def destroy(opts={})
57
+ detach
58
+ medium.destroy(opts[:destroy_medium] == :delete) if opts[:destroy_medium] && medium
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,71 @@
1
+ module VirtualBox
2
+ # Represents a NAT engine for a given {NetworkAdapter}. This data is
3
+ # available through the `nat_driver` relationship on
4
+ # {NetworkAdapter} only if the adapter is a NAT adapter.
5
+ class NATEngine < AbstractModel
6
+ attribute :parent, :readonly => true, :property => false
7
+ attribute :network
8
+ attribute :tftp_prefix
9
+ attribute :tftp_boot_file
10
+ attribute :tftp_next_server
11
+ attribute :alias_mode
12
+ attribute :dns_pass_domain
13
+ attribute :dns_proxy
14
+ attribute :dns_use_host_resolver
15
+ attribute :interface, :readonly => true, :property => false
16
+ relationship :forwarded_ports, :NATForwardedPort
17
+
18
+ class << self
19
+ # Populates the NAT engine for anything which is related to it.
20
+ #
21
+ # **This method typically won't be used except internally.**
22
+ #
23
+ # @return [NATEngine]
24
+ def populate_relationship(caller, inat)
25
+ return nil if inat.nil?
26
+ new(caller, inat)
27
+ end
28
+
29
+ # Saves the relationship. This simply calls {#save} on every
30
+ # member of the relationship.
31
+ #
32
+ # **This method typically won't be used except internally.**
33
+ def save_relationship(caller, item)
34
+ item.save
35
+ end
36
+ end
37
+
38
+ def initialize(caller, inat)
39
+ super()
40
+ initialize_attributes(caller, inat)
41
+ end
42
+
43
+ # Initializes the attributes of an existing NAT engine.
44
+ def initialize_attributes(parent, inat)
45
+ write_attribute(:parent, parent)
46
+ write_attribute(:interface, inat)
47
+
48
+ # Load the interface attributes associated with this model
49
+ load_interface_attributes(inat)
50
+ populate_relationships(inat)
51
+
52
+ # Clear dirty and set as existing
53
+ clear_dirty!
54
+ existing_record!
55
+ end
56
+
57
+ def save
58
+ modify_engine do |nat|
59
+ save_changed_interface_attributes(nat)
60
+ save_relationships
61
+ end
62
+ end
63
+
64
+ # Helper method to get the mutable `INATEngine` interface.
65
+ def modify_engine
66
+ parent.modify_adapter do |adapter|
67
+ yield adapter.nat_driver
68
+ end
69
+ end
70
+ end
71
+ end