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,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