vagrantup 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +91 -0
  3. data/LICENSE +2 -2
  4. data/README.md +11 -13
  5. data/bin/vagrant +29 -5
  6. data/config/default.rb +14 -9
  7. data/contrib/bash/completion.sh +3 -0
  8. data/keys/README.md +3 -3
  9. data/lib/vagrant.rb +156 -102
  10. data/lib/vagrant/action.rb +26 -47
  11. data/lib/vagrant/action/builder.rb +49 -23
  12. data/lib/vagrant/action/builtin/box_add.rb +85 -0
  13. data/lib/vagrant/action/builtin/call.rb +67 -0
  14. data/lib/vagrant/action/builtin/config_validate.rb +30 -0
  15. data/lib/vagrant/action/builtin/confirm.rb +38 -0
  16. data/lib/vagrant/action/builtin/env_set.rb +24 -0
  17. data/lib/vagrant/action/builtin/graceful_halt.rb +73 -0
  18. data/lib/vagrant/action/builtin/handle_box_url.rb +43 -0
  19. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +117 -0
  20. data/lib/vagrant/action/builtin/lock.rb +57 -0
  21. data/lib/vagrant/action/builtin/nfs.rb +117 -0
  22. data/lib/vagrant/action/builtin/provision.rb +70 -0
  23. data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
  24. data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
  25. data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
  26. data/lib/vagrant/action/general/package.rb +19 -18
  27. data/lib/vagrant/action/hook.rb +103 -0
  28. data/lib/vagrant/action/runner.rb +21 -5
  29. data/lib/vagrant/action/warden.rb +20 -9
  30. data/lib/vagrant/box.rb +75 -26
  31. data/lib/vagrant/box_collection.rb +301 -35
  32. data/lib/vagrant/cli.rb +20 -14
  33. data/lib/vagrant/config.rb +23 -9
  34. data/lib/vagrant/config/loader.rb +131 -36
  35. data/lib/vagrant/config/v1.rb +9 -0
  36. data/lib/vagrant/config/v1/dummy_config.rb +13 -0
  37. data/lib/vagrant/config/v1/loader.rb +105 -0
  38. data/lib/vagrant/config/v1/root.rb +60 -0
  39. data/lib/vagrant/config/v2.rb +9 -0
  40. data/lib/vagrant/config/v2/dummy_config.rb +13 -0
  41. data/lib/vagrant/config/v2/loader.rb +141 -0
  42. data/lib/vagrant/config/v2/root.rb +105 -0
  43. data/lib/vagrant/config/v2/util.rb +21 -0
  44. data/lib/vagrant/config/version_base.rb +80 -0
  45. data/lib/vagrant/downloaders/base.rb +0 -3
  46. data/lib/vagrant/downloaders/file.rb +10 -4
  47. data/lib/vagrant/downloaders/http.rb +29 -10
  48. data/lib/vagrant/environment.rb +447 -240
  49. data/lib/vagrant/errors.rb +138 -97
  50. data/lib/vagrant/hosts.rb +3 -12
  51. data/lib/vagrant/machine.rb +325 -0
  52. data/lib/vagrant/machine_state.rb +45 -0
  53. data/lib/vagrant/plugin.rb +3 -78
  54. data/lib/vagrant/plugin/v1.rb +19 -0
  55. data/lib/vagrant/plugin/v1/command.rb +169 -0
  56. data/lib/vagrant/plugin/v1/communicator.rb +98 -0
  57. data/lib/vagrant/plugin/v1/config.rb +112 -0
  58. data/lib/vagrant/plugin/v1/errors.rb +15 -0
  59. data/lib/vagrant/plugin/v1/guest.rb +92 -0
  60. data/lib/vagrant/plugin/v1/host.rb +66 -0
  61. data/lib/vagrant/plugin/v1/manager.rb +131 -0
  62. data/lib/vagrant/plugin/v1/plugin.rb +229 -0
  63. data/lib/vagrant/plugin/v1/provider.rb +68 -0
  64. data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
  65. data/lib/vagrant/plugin/v2.rb +22 -0
  66. data/lib/vagrant/plugin/v2/command.rb +234 -0
  67. data/lib/vagrant/plugin/v2/communicator.rb +98 -0
  68. data/lib/vagrant/plugin/v2/components.rb +29 -0
  69. data/lib/vagrant/plugin/v2/config.rb +101 -0
  70. data/lib/vagrant/plugin/v2/errors.rb +15 -0
  71. data/lib/vagrant/plugin/v2/guest.rb +92 -0
  72. data/lib/vagrant/plugin/v2/host.rb +66 -0
  73. data/lib/vagrant/plugin/v2/manager.rb +158 -0
  74. data/lib/vagrant/plugin/v2/plugin.rb +217 -0
  75. data/lib/vagrant/plugin/v2/provider.rb +69 -0
  76. data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
  77. data/lib/vagrant/registry.rb +43 -17
  78. data/lib/vagrant/ssh.rb +15 -9
  79. data/lib/vagrant/ui.rb +7 -5
  80. data/lib/vagrant/util/is_port_open.rb +1 -1
  81. data/lib/vagrant/util/platform.rb +19 -0
  82. data/lib/vagrant/util/retryable.rb +8 -2
  83. data/lib/vagrant/util/safe_exec.rb +2 -2
  84. data/lib/vagrant/util/scoped_hash_override.rb +45 -0
  85. data/lib/vagrant/util/ssh.rb +126 -0
  86. data/lib/vagrant/util/string_block_editor.rb +75 -0
  87. data/lib/vagrant/util/subprocess.rb +33 -10
  88. data/lib/vagrant/util/which.rb +43 -0
  89. data/lib/vagrant/version.rb +1 -1
  90. data/plugins/README.md +5 -0
  91. data/plugins/commands/box/command/add.rb +46 -0
  92. data/plugins/commands/box/command/list.rb +41 -0
  93. data/plugins/commands/box/command/remove.rb +37 -0
  94. data/plugins/commands/box/command/repackage.rb +43 -0
  95. data/plugins/commands/box/command/root.rb +75 -0
  96. data/plugins/commands/box/plugin.rb +15 -0
  97. data/plugins/commands/destroy/command.rb +31 -0
  98. data/plugins/commands/destroy/plugin.rb +18 -0
  99. data/plugins/commands/halt/command.rb +33 -0
  100. data/plugins/commands/halt/plugin.rb +18 -0
  101. data/{lib/vagrant/command/init.rb → plugins/commands/init/command.rb} +4 -4
  102. data/plugins/commands/init/plugin.rb +18 -0
  103. data/plugins/commands/package/command.rb +83 -0
  104. data/plugins/commands/package/plugin.rb +18 -0
  105. data/plugins/commands/plugin/action.rb +52 -0
  106. data/plugins/commands/plugin/action/bundler_check.rb +25 -0
  107. data/plugins/commands/plugin/action/install_gem.rb +70 -0
  108. data/plugins/commands/plugin/action/license_plugin.rb +54 -0
  109. data/plugins/commands/plugin/action/list_plugins.rb +54 -0
  110. data/plugins/commands/plugin/action/prune_gems.rb +149 -0
  111. data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
  112. data/plugins/commands/plugin/command/base.rb +22 -0
  113. data/plugins/commands/plugin/command/install.rb +39 -0
  114. data/plugins/commands/plugin/command/license.rb +31 -0
  115. data/plugins/commands/plugin/command/list.rb +28 -0
  116. data/plugins/commands/plugin/command/root.rb +75 -0
  117. data/plugins/commands/plugin/command/uninstall.rb +28 -0
  118. data/plugins/commands/plugin/gem_helper.rb +74 -0
  119. data/plugins/commands/plugin/plugin.rb +22 -0
  120. data/plugins/commands/plugin/state_file.rb +57 -0
  121. data/plugins/commands/provision/command.rb +34 -0
  122. data/plugins/commands/provision/plugin.rb +18 -0
  123. data/plugins/commands/reload/command.rb +37 -0
  124. data/plugins/commands/reload/plugin.rb +18 -0
  125. data/plugins/commands/resume/command.rb +25 -0
  126. data/plugins/commands/resume/plugin.rb +17 -0
  127. data/{lib/vagrant/command/ssh.rb → plugins/commands/ssh/command.rb} +17 -41
  128. data/plugins/commands/ssh/plugin.rb +17 -0
  129. data/{lib/vagrant/command/ssh_config.rb → plugins/commands/ssh_config/command.rb} +14 -16
  130. data/plugins/commands/ssh_config/plugin.rb +18 -0
  131. data/plugins/commands/status/command.rb +39 -0
  132. data/plugins/commands/status/plugin.rb +18 -0
  133. data/plugins/commands/suspend/command.rb +25 -0
  134. data/plugins/commands/suspend/plugin.rb +18 -0
  135. data/plugins/commands/up/command.rb +45 -0
  136. data/plugins/commands/up/plugin.rb +17 -0
  137. data/{lib/vagrant/command → plugins/commands/up}/start_mixins.rb +6 -6
  138. data/{lib/vagrant/communication/ssh.rb → plugins/communicators/ssh/communicator.rb} +139 -52
  139. data/plugins/communicators/ssh/plugin.rb +19 -0
  140. data/plugins/guests/arch/guest.rb +41 -0
  141. data/plugins/guests/arch/plugin.rb +15 -0
  142. data/{lib/vagrant/guest/debian.rb → plugins/guests/debian/guest.rb} +21 -13
  143. data/plugins/guests/debian/plugin.rb +15 -0
  144. data/{lib/vagrant/guest/fedora.rb → plugins/guests/fedora/guest.rb} +19 -14
  145. data/plugins/guests/fedora/plugin.rb +15 -0
  146. data/plugins/guests/freebsd/config.rb +13 -0
  147. data/plugins/guests/freebsd/guest.rb +70 -0
  148. data/plugins/guests/freebsd/plugin.rb +20 -0
  149. data/plugins/guests/gentoo/guest.rb +51 -0
  150. data/plugins/guests/gentoo/plugin.rb +15 -0
  151. data/plugins/guests/linux/config.rb +13 -0
  152. data/{lib/vagrant/guest/linux.rb → plugins/guests/linux/guest.rb} +35 -34
  153. data/plugins/guests/linux/plugin.rb +20 -0
  154. data/plugins/guests/openbsd/guest.rb +13 -0
  155. data/plugins/guests/openbsd/plugin.rb +15 -0
  156. data/{lib/vagrant/guest/redhat.rb → plugins/guests/redhat/guest.rb} +22 -15
  157. data/plugins/guests/redhat/plugin.rb +15 -0
  158. data/plugins/guests/solaris/config.rb +18 -0
  159. data/plugins/guests/solaris/guest.rb +73 -0
  160. data/plugins/guests/solaris/plugin.rb +20 -0
  161. data/plugins/guests/suse/guest.rb +24 -0
  162. data/plugins/guests/suse/plugin.rb +15 -0
  163. data/plugins/guests/ubuntu/guest.rb +44 -0
  164. data/plugins/guests/ubuntu/plugin.rb +15 -0
  165. data/{lib/vagrant/hosts/arch.rb → plugins/hosts/arch/host.rb} +18 -5
  166. data/plugins/hosts/arch/plugin.rb +15 -0
  167. data/{lib/vagrant/hosts/bsd.rb → plugins/hosts/bsd/host.rb} +16 -11
  168. data/plugins/hosts/bsd/plugin.rb +15 -0
  169. data/{lib/vagrant/hosts/fedora.rb → plugins/hosts/fedora/host.rb} +8 -4
  170. data/plugins/hosts/fedora/plugin.rb +15 -0
  171. data/{lib/vagrant/hosts/freebsd.rb → plugins/hosts/freebsd/host.rb} +10 -8
  172. data/plugins/hosts/freebsd/plugin.rb +15 -0
  173. data/{lib/vagrant/hosts/gentoo.rb → plugins/hosts/gentoo/host.rb} +7 -3
  174. data/plugins/hosts/gentoo/plugin.rb +15 -0
  175. data/{lib/vagrant/hosts/linux.rb → plugins/hosts/linux/host.rb} +12 -11
  176. data/plugins/hosts/linux/plugin.rb +15 -0
  177. data/{lib/vagrant/hosts/opensuse.rb → plugins/hosts/opensuse/host.rb} +8 -4
  178. data/plugins/hosts/opensuse/plugin.rb +15 -0
  179. data/{lib/vagrant/hosts/windows.rb → plugins/hosts/windows/host.rb} +5 -4
  180. data/plugins/hosts/windows/plugin.rb +15 -0
  181. data/plugins/kernel_v1/config/nfs.rb +20 -0
  182. data/plugins/kernel_v1/config/package.rb +17 -0
  183. data/plugins/kernel_v1/config/ssh.rb +46 -0
  184. data/plugins/kernel_v1/config/vagrant.rb +31 -0
  185. data/plugins/kernel_v1/config/vm.rb +184 -0
  186. data/plugins/kernel_v1/plugin.rb +44 -0
  187. data/plugins/kernel_v2/config/nfs.rb +10 -0
  188. data/plugins/kernel_v2/config/package.rb +9 -0
  189. data/plugins/kernel_v2/config/ssh.rb +35 -0
  190. data/plugins/kernel_v2/config/vagrant.rb +9 -0
  191. data/plugins/kernel_v2/config/vm.rb +314 -0
  192. data/plugins/kernel_v2/config/vm_provisioner.rb +40 -0
  193. data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
  194. data/plugins/kernel_v2/plugin.rb +44 -0
  195. data/plugins/providers/virtualbox/action.rb +308 -0
  196. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/boot.rb +12 -16
  197. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/check_accessible.rb +5 -5
  198. data/plugins/providers/virtualbox/action/check_created.rb +21 -0
  199. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/check_guest_additions.rb +18 -11
  200. data/plugins/providers/virtualbox/action/check_running.rb +21 -0
  201. data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
  202. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clean_machine_folder.rb +5 -5
  203. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_forwarded_ports.rb +4 -4
  204. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_network_interfaces.rb +4 -4
  205. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_shared_folders.rb +4 -5
  206. data/plugins/providers/virtualbox/action/created.rb +20 -0
  207. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/customize.rb +7 -7
  208. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/destroy.rb +5 -5
  209. data/plugins/providers/virtualbox/action/destroy_confirm.rb +17 -0
  210. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
  211. data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
  212. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/export.rb +7 -7
  213. data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
  214. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/forward_ports.rb +29 -42
  215. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/import.rb +15 -12
  216. data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
  217. data/plugins/providers/virtualbox/action/is_running.rb +20 -0
  218. data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
  219. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/match_mac_address.rb +5 -5
  220. data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
  221. data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
  222. data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
  223. data/plugins/providers/virtualbox/action/network.rb +366 -0
  224. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/package.rb +4 -7
  225. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/package_vagrantfile.rb +5 -8
  226. data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
  227. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +51 -0
  228. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/prune_nfs_exports.rb +5 -5
  229. data/plugins/providers/virtualbox/action/resume.rb +25 -0
  230. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/sane_defaults.rb +41 -32
  231. data/plugins/providers/virtualbox/action/set_name.rb +40 -0
  232. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/setup_package_files.rb +5 -8
  233. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/share_folders.rb +24 -25
  234. data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/suspend.rb +5 -5
  235. data/plugins/providers/virtualbox/config.rb +82 -0
  236. data/plugins/providers/virtualbox/driver/base.rb +344 -0
  237. data/plugins/providers/virtualbox/driver/meta.rb +142 -0
  238. data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
  239. data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
  240. data/plugins/providers/virtualbox/driver/version_4_2.rb +475 -0
  241. data/plugins/providers/virtualbox/model/forwarded_port.rb +58 -0
  242. data/plugins/providers/virtualbox/plugin.rb +42 -0
  243. data/plugins/providers/virtualbox/provider.rb +92 -0
  244. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +31 -0
  245. data/plugins/provisioners/chef/config/base.rb +65 -0
  246. data/plugins/provisioners/chef/config/chef_client.rb +39 -0
  247. data/plugins/provisioners/chef/config/chef_solo.rb +87 -0
  248. data/plugins/provisioners/chef/plugin.rb +33 -0
  249. data/plugins/provisioners/chef/provisioner/base.rb +91 -0
  250. data/plugins/provisioners/chef/provisioner/chef_client.rb +103 -0
  251. data/plugins/provisioners/chef/provisioner/chef_solo.rb +182 -0
  252. data/plugins/provisioners/puppet/config/puppet.rb +70 -0
  253. data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
  254. data/plugins/provisioners/puppet/plugin.rb +33 -0
  255. data/plugins/provisioners/puppet/provisioner/puppet.rb +110 -0
  256. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
  257. data/plugins/provisioners/shell/config.rb +46 -0
  258. data/plugins/provisioners/shell/plugin.rb +23 -0
  259. data/plugins/provisioners/shell/provisioner.rb +66 -0
  260. data/templates/commands/init/Vagrantfile.erb +33 -21
  261. data/templates/commands/ssh_config/config.erb +1 -0
  262. data/templates/config/messages.erb +14 -0
  263. data/templates/config/validation_failed.erb +3 -3
  264. data/templates/guests/arch/network_dhcp.erb +4 -7
  265. data/templates/guests/arch/network_static.erb +6 -7
  266. data/templates/guests/debian/network_dhcp.erb +5 -0
  267. data/templates/locales/en.yml +336 -100
  268. data/templates/rgloader.rb +9 -0
  269. data/test/acceptance/support/isolated_environment.rb +3 -2
  270. data/test/support/tempdir.rb +13 -4
  271. data/test/unit/base.rb +6 -0
  272. data/test/unit/support/dummy_provider.rb +16 -0
  273. data/test/unit/support/isolated_environment.rb +132 -0
  274. data/test/unit/support/shared/base_context.rb +74 -0
  275. data/test/unit/vagrant/action/builder_test.rb +88 -48
  276. data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
  277. data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
  278. data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
  279. data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +61 -0
  280. data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
  281. data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
  282. data/test/unit/vagrant/action/hook_test.rb +101 -0
  283. data/test/unit/vagrant/action/runner_test.rb +15 -9
  284. data/test/unit/vagrant/box_collection_test.rb +219 -38
  285. data/test/unit/vagrant/box_test.rb +94 -19
  286. data/test/unit/vagrant/cli_test.rb +27 -0
  287. data/test/unit/vagrant/config/loader_test.rb +154 -49
  288. data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
  289. data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
  290. data/test/unit/vagrant/config/v1/root_test.rb +40 -0
  291. data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
  292. data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
  293. data/test/unit/vagrant/config/v2/root_test.rb +97 -0
  294. data/test/unit/vagrant/config/v2/util_test.rb +21 -0
  295. data/test/unit/vagrant/config_test.rb +40 -1
  296. data/test/unit/vagrant/downloaders/base_test.rb +0 -4
  297. data/test/unit/vagrant/downloaders/file_test.rb +21 -9
  298. data/test/unit/vagrant/downloaders/http_test.rb +4 -0
  299. data/test/unit/vagrant/environment_test.rb +414 -63
  300. data/test/unit/vagrant/hosts_test.rb +10 -9
  301. data/test/unit/vagrant/machine_state_test.rb +26 -0
  302. data/test/unit/vagrant/machine_test.rb +418 -0
  303. data/test/unit/vagrant/{command/base_test.rb → plugin/v1/command_test.rb} +2 -9
  304. data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
  305. data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
  306. data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
  307. data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
  308. data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
  309. data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
  310. data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
  311. data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
  312. data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
  313. data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
  314. data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
  315. data/test/unit/vagrant/plugin/v2/manager_test.rb +157 -0
  316. data/test/unit/vagrant/plugin/v2/plugin_test.rb +287 -0
  317. data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
  318. data/test/unit/vagrant/registry_test.rb +59 -5
  319. data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
  320. data/test/unit/vagrant/util/ssh_test.rb +30 -0
  321. data/test/unit/vagrant/util/string_block_editor_test.rb +98 -0
  322. data/test/unit/vagrant/util/which_test.rb +43 -0
  323. data/test/unit/vagrant_test.rb +42 -13
  324. data/vagrant.gemspec +6 -7
  325. data/vagrant.gemspecbak +6 -7
  326. metadata +273 -358
  327. data/lib/vagrant/action/box/destroy.rb +0 -25
  328. data/lib/vagrant/action/box/download.rb +0 -84
  329. data/lib/vagrant/action/box/package.rb +0 -19
  330. data/lib/vagrant/action/box/unpackage.rb +0 -61
  331. data/lib/vagrant/action/box/verify.rb +0 -23
  332. data/lib/vagrant/action/builtin.rb +0 -171
  333. data/lib/vagrant/action/env/set.rb +0 -21
  334. data/lib/vagrant/action/environment.rb +0 -12
  335. data/lib/vagrant/action/general/check_virtualbox.rb +0 -28
  336. data/lib/vagrant/action/general/validate.rb +0 -18
  337. data/lib/vagrant/action/vm/check_box.rb +0 -33
  338. data/lib/vagrant/action/vm/check_port_collisions.rb +0 -89
  339. data/lib/vagrant/action/vm/default_name.rb +0 -22
  340. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +0 -20
  341. data/lib/vagrant/action/vm/discard_state.rb +0 -22
  342. data/lib/vagrant/action/vm/halt.rb +0 -32
  343. data/lib/vagrant/action/vm/host_name.rb +0 -21
  344. data/lib/vagrant/action/vm/network.rb +0 -403
  345. data/lib/vagrant/action/vm/nfs.rb +0 -196
  346. data/lib/vagrant/action/vm/provision.rb +0 -61
  347. data/lib/vagrant/action/vm/provisioner_cleanup.rb +0 -26
  348. data/lib/vagrant/action/vm/resume.rb +0 -20
  349. data/lib/vagrant/command.rb +0 -24
  350. data/lib/vagrant/command/base.rb +0 -167
  351. data/lib/vagrant/command/box.rb +0 -58
  352. data/lib/vagrant/command/box_add.rb +0 -37
  353. data/lib/vagrant/command/box_list.rb +0 -28
  354. data/lib/vagrant/command/box_remove.rb +0 -27
  355. data/lib/vagrant/command/box_repackage.rb +0 -27
  356. data/lib/vagrant/command/destroy.rb +0 -64
  357. data/lib/vagrant/command/gem.rb +0 -39
  358. data/lib/vagrant/command/halt.rb +0 -39
  359. data/lib/vagrant/command/package.rb +0 -75
  360. data/lib/vagrant/command/provision.rb +0 -40
  361. data/lib/vagrant/command/reload.rb +0 -39
  362. data/lib/vagrant/command/resume.rb +0 -33
  363. data/lib/vagrant/command/status.rb +0 -36
  364. data/lib/vagrant/command/suspend.rb +0 -33
  365. data/lib/vagrant/command/up.rb +0 -40
  366. data/lib/vagrant/communication.rb +0 -7
  367. data/lib/vagrant/communication/base.rb +0 -56
  368. data/lib/vagrant/config/base.rb +0 -82
  369. data/lib/vagrant/config/error_recorder.rb +0 -19
  370. data/lib/vagrant/config/nfs.rb +0 -8
  371. data/lib/vagrant/config/package.rb +0 -7
  372. data/lib/vagrant/config/ssh.rb +0 -27
  373. data/lib/vagrant/config/top.rb +0 -72
  374. data/lib/vagrant/config/vagrant.rb +0 -14
  375. data/lib/vagrant/config/vm.rb +0 -168
  376. data/lib/vagrant/config/vm/provisioner.rb +0 -52
  377. data/lib/vagrant/config/vm/sub_vm.rb +0 -17
  378. data/lib/vagrant/data_store.rb +0 -92
  379. data/lib/vagrant/driver.rb +0 -8
  380. data/lib/vagrant/driver/virtualbox.rb +0 -134
  381. data/lib/vagrant/driver/virtualbox_4_0.rb +0 -459
  382. data/lib/vagrant/driver/virtualbox_4_1.rb +0 -459
  383. data/lib/vagrant/driver/virtualbox_4_2.rb +0 -606
  384. data/lib/vagrant/driver/virtualbox_base.rb +0 -326
  385. data/lib/vagrant/guest.rb +0 -18
  386. data/lib/vagrant/guest/arch.rb +0 -56
  387. data/lib/vagrant/guest/base.rb +0 -99
  388. data/lib/vagrant/guest/freebsd.rb +0 -86
  389. data/lib/vagrant/guest/gentoo.rb +0 -46
  390. data/lib/vagrant/guest/linux/config.rb +0 -19
  391. data/lib/vagrant/guest/linux/error.rb +0 -9
  392. data/lib/vagrant/guest/openbsd.rb +0 -20
  393. data/lib/vagrant/guest/solaris.rb +0 -118
  394. data/lib/vagrant/guest/suse.rb +0 -17
  395. data/lib/vagrant/guest/ubuntu.rb +0 -23
  396. data/lib/vagrant/hosts/base.rb +0 -66
  397. data/lib/vagrant/provisioners.rb +0 -12
  398. data/lib/vagrant/provisioners/base.rb +0 -44
  399. data/lib/vagrant/provisioners/chef.rb +0 -168
  400. data/lib/vagrant/provisioners/chef_client.rb +0 -132
  401. data/lib/vagrant/provisioners/chef_solo.rb +0 -234
  402. data/lib/vagrant/provisioners/puppet.rb +0 -176
  403. data/lib/vagrant/provisioners/puppet_server.rb +0 -78
  404. data/lib/vagrant/provisioners/shell.rb +0 -103
  405. data/lib/vagrant/vm.rb +0 -195
  406. data/test/buildbot/README.md +0 -72
  407. data/test/buildbot/buildbot_config/__init__.py +0 -0
  408. data/test/buildbot/buildbot_config/config/__init__.py +0 -0
  409. data/test/buildbot/buildbot_config/config/loader.py +0 -24
  410. data/test/buildbot/buildbot_config/config/master.py +0 -24
  411. data/test/buildbot/buildbot_config/config/slave.py +0 -22
  412. data/test/buildbot/buildbot_config/master/__init__.py +0 -6
  413. data/test/buildbot/buildbot_config/master/builders.py +0 -78
  414. data/test/buildbot/buildbot_config/master/buildsteps.py +0 -100
  415. data/test/buildbot/buildbot_config/master/change_sources.py +0 -8
  416. data/test/buildbot/buildbot_config/master/schedulers.py +0 -32
  417. data/test/buildbot/buildbot_config/master/slaves.py +0 -60
  418. data/test/buildbot/buildbot_config/master/status.py +0 -52
  419. data/test/buildbot/master/Makefile.sample +0 -28
  420. data/test/buildbot/master/buildbot.tac +0 -36
  421. data/test/buildbot/master/master.cfg +0 -67
  422. data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
  423. data/test/buildbot/master/public_html/default.css +0 -545
  424. data/test/buildbot/master/public_html/favicon.ico +0 -0
  425. data/test/buildbot/master/public_html/robots.txt +0 -10
  426. data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +0 -356
  427. data/test/buildbot/master/public_html/static/css/prettify.css +0 -97
  428. data/test/buildbot/master/public_html/static/css/syntax.css +0 -60
  429. data/test/buildbot/master/public_html/static/css/vagrant.base.css +0 -205
  430. data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
  431. data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
  432. data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
  433. data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
  434. data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
  435. data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
  436. data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
  437. data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
  438. data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
  439. data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
  440. data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
  441. data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
  442. data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
  443. data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
  444. data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +0 -80
  445. data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +0 -4
  446. data/test/buildbot/master/templates/authfail.html +0 -9
  447. data/test/buildbot/master/templates/build.html +0 -205
  448. data/test/buildbot/master/templates/builder.html +0 -118
  449. data/test/buildbot/master/templates/builders.html +0 -33
  450. data/test/buildbot/master/templates/buildslave.html +0 -72
  451. data/test/buildbot/master/templates/buildslaves.html +0 -70
  452. data/test/buildbot/master/templates/change.html +0 -15
  453. data/test/buildbot/master/templates/layouts/base.html +0 -58
  454. data/test/buildbot/master/templates/macros/box.html +0 -37
  455. data/test/buildbot/master/templates/macros/build_line.html +0 -50
  456. data/test/buildbot/master/templates/macros/change.html +0 -81
  457. data/test/buildbot/master/templates/macros/forms.html +0 -300
  458. data/test/buildbot/master/templates/root.html +0 -42
  459. data/test/buildbot/master/templates/waterfall.html +0 -53
  460. data/test/buildbot/requirements.txt +0 -4
  461. data/test/buildbot/scripts/deploy.sh +0 -38
  462. data/test/buildbot/scripts/setup.sh +0 -107
  463. data/test/buildbot/slave/buildbot.tac +0 -43
  464. data/test/buildbot/slave/info/admin +0 -1
  465. data/test/buildbot/slave/info/host +0 -1
  466. data/test/buildbot/tests/__init__.py +0 -0
  467. data/test/buildbot/tests/master/__init__.py +0 -0
  468. data/test/buildbot/tests/master/test_slaves.py +0 -41
  469. data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
  470. data/test/unit/vagrant/action/environment_test.rb +0 -16
  471. data/test/unit/vagrant/config/base_test.rb +0 -48
  472. data/test/unit/vagrant/config/ssh_test.rb +0 -17
  473. data/test/unit/vagrant/config/top_test.rb +0 -69
  474. data/test/unit/vagrant/config/vm_test.rb +0 -71
  475. data/test/unit/vagrant/data_store_test.rb +0 -79
  476. data/test/unit_legacy/locales/en.yml +0 -8
  477. data/test/unit_legacy/test_helper.rb +0 -32
  478. data/test/unit_legacy/vagrant/action/box/destroy_test.rb +0 -18
  479. data/test/unit_legacy/vagrant/action/box/download_test.rb +0 -125
  480. data/test/unit_legacy/vagrant/action/box/package_test.rb +0 -25
  481. data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +0 -84
  482. data/test/unit_legacy/vagrant/action/box/verify_test.rb +0 -30
  483. data/test/unit_legacy/vagrant/action/env/set_test.rb +0 -24
  484. data/test/unit_legacy/vagrant/action/general/package_test.rb +0 -268
  485. data/test/unit_legacy/vagrant/action/general/validate_test.rb +0 -31
  486. data/test/unit_legacy/vagrant/action/vm/boot_test.rb +0 -66
  487. data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +0 -61
  488. data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +0 -61
  489. data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +0 -9
  490. data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +0 -84
  491. data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -52
  492. data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +0 -22
  493. data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +0 -40
  494. data/test/unit_legacy/vagrant/action/vm/customize_test.rb +0 -37
  495. data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +0 -25
  496. data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -49
  497. data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +0 -45
  498. data/test/unit_legacy/vagrant/action/vm/export_test.rb +0 -107
  499. data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +0 -77
  500. data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +0 -197
  501. data/test/unit_legacy/vagrant/action/vm/halt_test.rb +0 -79
  502. data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +0 -36
  503. data/test/unit_legacy/vagrant/action/vm/import_test.rb +0 -66
  504. data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +0 -40
  505. data/test/unit_legacy/vagrant/action/vm/modify_test.rb +0 -38
  506. data/test/unit_legacy/vagrant/action/vm/network_test.rb +0 -286
  507. data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +0 -26
  508. data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +0 -260
  509. data/test/unit_legacy/vagrant/action/vm/package_test.rb +0 -25
  510. data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +0 -46
  511. data/test/unit_legacy/vagrant/action/vm/provision_test.rb +0 -65
  512. data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +0 -56
  513. data/test/unit_legacy/vagrant/action/vm/resume_test.rb +0 -35
  514. data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +0 -144
  515. data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +0 -35
  516. data/test/unit_legacy/vagrant/action_test.rb +0 -89
  517. data/test/unit_legacy/vagrant/box_collection_test.rb +0 -45
  518. data/test/unit_legacy/vagrant/box_test.rb +0 -74
  519. data/test/unit_legacy/vagrant/cli_test.rb +0 -35
  520. data/test/unit_legacy/vagrant/command/base_test.rb +0 -23
  521. data/test/unit_legacy/vagrant/command/group_base_test.rb +0 -15
  522. data/test/unit_legacy/vagrant/command/helpers_test.rb +0 -88
  523. data/test/unit_legacy/vagrant/command/init_test.rb +0 -10
  524. data/test/unit_legacy/vagrant/command/package_test.rb +0 -27
  525. data/test/unit_legacy/vagrant/config/base_test.rb +0 -52
  526. data/test/unit_legacy/vagrant/config/error_recorder_test.rb +0 -18
  527. data/test/unit_legacy/vagrant/config/ssh_test.rb +0 -12
  528. data/test/unit_legacy/vagrant/config/vagrant_test.rb +0 -35
  529. data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +0 -92
  530. data/test/unit_legacy/vagrant/config/vm_test.rb +0 -47
  531. data/test/unit_legacy/vagrant/config_test.rb +0 -148
  532. data/test/unit_legacy/vagrant/downloaders/http_test.rb +0 -93
  533. data/test/unit_legacy/vagrant/environment_test.rb +0 -539
  534. data/test/unit_legacy/vagrant/errors_test.rb +0 -42
  535. data/test/unit_legacy/vagrant/hosts/base_test.rb +0 -46
  536. data/test/unit_legacy/vagrant/hosts/bsd_test.rb +0 -53
  537. data/test/unit_legacy/vagrant/hosts/linux_test.rb +0 -54
  538. data/test/unit_legacy/vagrant/plugin_test.rb +0 -9
  539. data/test/unit_legacy/vagrant/provisioners/base_test.rb +0 -63
  540. data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +0 -190
  541. data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +0 -115
  542. data/test/unit_legacy/vagrant/provisioners/chef_test.rb +0 -209
  543. data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +0 -68
  544. data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +0 -182
  545. data/test/unit_legacy/vagrant/provisioners/shell_test.rb +0 -79
  546. data/test/unit_legacy/vagrant/ssh/session_test.rb +0 -40
  547. data/test/unit_legacy/vagrant/ssh_test.rb +0 -304
  548. data/test/unit_legacy/vagrant/systems/base_test.rb +0 -18
  549. data/test/unit_legacy/vagrant/systems/linux_test.rb +0 -104
  550. data/test/unit_legacy/vagrant/util/busy_test.rb +0 -106
  551. data/test/unit_legacy/vagrant/util/counter_test.rb +0 -29
  552. data/test/unit_legacy/vagrant/util/platform_test.rb +0 -18
  553. data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +0 -43
  554. data/test/unit_legacy/vagrant/util/template_renderer_test.rb +0 -145
  555. data/test/unit_legacy/vagrant/vm_test.rb +0 -300
  556. data/vagrant-1.1.4.gem +0 -0
  557. data/vagrantup-0.1.0.gem +0 -0
  558. data/vagrantup-0.1.1.gem +0 -0
  559. data/vagrantup-0.1.2.gem +0 -0
  560. data/vagrantup-0.1.3.gem +0 -0
  561. data/vagrantup-0.1.4.gem +0 -0
  562. data/vagrantup-0.2.0.gem +0 -0
  563. data/vagrantup-0.3.0.gem +0 -0
  564. data/vagrantup-0.3.1.gem +0 -0
  565. data/vagrantup-0.3.2.gem +0 -0
  566. data/vagrantup-0.3.3.gem +0 -0
  567. data/vagrantup-0.3.4.gem +0 -0
  568. data/vagrantup-0.4.0.gem +0 -0
  569. data/vagrantup-0.4.1.gem +0 -0
  570. data/vagrantup-0.4.3.dev.gem +0 -0
  571. data/vagrantup-0.5.0.gem +0 -0
  572. data/vagrantup-0.5.1.gem +0 -0
  573. data/vagrantup-0.5.2.gem +0 -0
  574. data/vagrantup-0.5.3.gem +0 -0
  575. data/vagrantup-0.5.4.gem +0 -0
  576. data/vagrantup-0.6.0.gem +0 -0
  577. data/vagrantup-0.6.1.gem +0 -0
  578. data/vagrantup-0.6.2.gem +0 -0
  579. data/vagrantup-0.6.3.gem +0 -0
  580. data/vagrantup-0.6.4.gem +0 -0
  581. data/vagrantup-0.6.5.gem +0 -0
  582. data/vagrantup-0.6.6.gem +0 -0
  583. data/vagrantup-0.6.7.gem +0 -0
  584. data/vagrantup-0.6.8.gem +0 -0
  585. data/vagrantup-0.6.9.gem +0 -0
  586. data/vagrantup-0.7.0.gem +0 -0
  587. data/vagrantup-0.7.1.gem +0 -0
  588. data/vagrantup-0.7.2.gem +0 -0
  589. data/vagrantup-0.7.3.gem +0 -0
  590. data/vagrantup-0.7.4.gem +0 -0
  591. data/vagrantup-0.7.5.gem +0 -0
  592. data/vagrantup-0.7.6.gem +0 -0
  593. data/vagrantup-0.7.7.gem +0 -0
  594. data/vagrantup-0.7.8.gem +0 -0
  595. data/vagrantup-0.8.0.gem +0 -0
  596. data/vagrantup-0.8.1.gem +0 -0
  597. data/vagrantup-0.8.10.gem +0 -0
  598. data/vagrantup-0.8.2.gem +0 -0
  599. data/vagrantup-0.8.3.gem +0 -0
  600. data/vagrantup-0.8.4.gem +0 -0
  601. data/vagrantup-0.8.5.gem +0 -0
  602. data/vagrantup-0.8.6.gem +0 -0
  603. data/vagrantup-0.8.7.gem +0 -0
  604. data/vagrantup-0.8.8.gem +0 -0
  605. data/vagrantup-0.8.9.gem +0 -0
  606. data/vagrantup-0.9.0.gem +0 -0
  607. data/vagrantup-0.9.1.gem +0 -0
  608. data/vagrantup-0.9.2.gem +0 -0
  609. data/vagrantup-0.9.3.gem +0 -0
  610. data/vagrantup-0.9.4.gem +0 -0
  611. data/vagrantup-0.9.5.gem +0 -0
  612. data/vagrantup-0.9.6.gem +0 -0
  613. data/vagrantup-0.9.7.gem +0 -0
  614. data/vagrantup-0.9.99.1.gem +0 -0
  615. data/vagrantup-0.9.99.2.gem +0 -0
  616. data/vagrantup-1.0.0.gem +0 -0
  617. data/vagrantup-1.0.1.gem +0 -0
  618. data/vagrantup-1.0.2.gem +0 -0
  619. data/vagrantup-1.0.3.gem +0 -0
  620. data/vagrantup-1.0.4.gem +0 -0
  621. data/vagrantup-1.0.5.gem +0 -0
  622. data/vagrantup-1.0.6.gem +0 -0
  623. data/vagrantup-1.1.4.gem +0 -0
@@ -1,15 +1,15 @@
1
- module Vagrant
2
- module Action
3
- module VM
1
+ module VagrantPlugins
2
+ module ProviderVirtualBox
3
+ module Action
4
4
  class Suspend
5
5
  def initialize(app, env)
6
6
  @app = app
7
7
  end
8
8
 
9
9
  def call(env)
10
- if env[:vm].state == :running
10
+ if env[:machine].provider.state.id == :running
11
11
  env[:ui].info I18n.t("vagrant.actions.vm.suspend.suspending")
12
- env[:vm].driver.suspend
12
+ env[:machine].provider.driver.suspend
13
13
  end
14
14
 
15
15
  @app.call(env)
@@ -0,0 +1,82 @@
1
+ module VagrantPlugins
2
+ module ProviderVirtualBox
3
+ class Config < Vagrant.plugin("2", :config)
4
+ # Vagrant by default will make "smart" decisions to enable/disable
5
+ # the NAT DNS proxy. If this is set to `true`, then the DNS proxy
6
+ # will not be enabled, and it is up to the end user to do it.
7
+ #
8
+ # @return [Boolean]
9
+ attr_accessor :auto_nat_dns_proxy
10
+
11
+ # An array of customizations to make on the VM prior to booting it.
12
+ #
13
+ # @return [Array]
14
+ attr_reader :customizations
15
+
16
+ # If set to `true`, then VirtualBox will be launched with a GUI.
17
+ #
18
+ # @return [Boolean]
19
+ attr_accessor :gui
20
+
21
+ # This should be set to the name of the machine in the VirtualBox
22
+ # GUI.
23
+ #
24
+ # @return [String]
25
+ attr_accessor :name
26
+
27
+ # The defined network adapters.
28
+ #
29
+ # @return [Hash]
30
+ attr_reader :network_adapters
31
+
32
+ def initialize
33
+ @auto_nat_dns_proxy = UNSET_VALUE
34
+ @customizations = []
35
+ @name = UNSET_VALUE
36
+ @network_adapters = {}
37
+ @gui = UNSET_VALUE
38
+
39
+ # We require that network adapter 1 is a NAT device.
40
+ network_adapter(1, :nat)
41
+ end
42
+
43
+ # Customize the VM by calling `VBoxManage` with the given
44
+ # arguments.
45
+ #
46
+ # When called multiple times, the customizations will be applied
47
+ # in the order given.
48
+ #
49
+ # The special `:name` parameter in the command will be replaced with
50
+ # the unique ID or name of the virtual machine. This is useful for
51
+ # parameters to `modifyvm` and the like.
52
+ #
53
+ # @param [Array] command An array of arguments to pass to
54
+ # VBoxManage.
55
+ def customize(command)
56
+ @customizations << command
57
+ end
58
+
59
+ # This defines a network adapter that will be added to the VirtualBox
60
+ # virtual machine in the given slot.
61
+ #
62
+ # @param [Integer] slot The slot for this network adapter.
63
+ # @param [Symbol] type The type of adapter.
64
+ def network_adapter(slot, type, *args)
65
+ @network_adapters[slot] = [type, args]
66
+ end
67
+
68
+ # This is the hook that is called to finalize the object before it
69
+ # is put into use.
70
+ def finalize!
71
+ # Default is to auto the DNS proxy
72
+ @auto_nat_dns_proxy = true if @auto_nat_dns_proxy == UNSET_VALUE
73
+
74
+ # Default is to not show a GUI
75
+ @gui = false if @gui == UNSET_VALUE
76
+
77
+ # The default name is just nothing, and we default it
78
+ @name = nil if @name == UNSET_VALUE
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,344 @@
1
+ require 'log4r'
2
+
3
+ require 'vagrant/util/busy'
4
+ require 'vagrant/util/platform'
5
+ require 'vagrant/util/retryable'
6
+ require 'vagrant/util/subprocess'
7
+
8
+ module VagrantPlugins
9
+ module ProviderVirtualBox
10
+ module Driver
11
+ # Base class for all VirtualBox drivers.
12
+ #
13
+ # This class provides useful tools for things such as executing
14
+ # VBoxManage and handling SIGINTs and so on.
15
+ class Base
16
+ # Include this so we can use `Subprocess` more easily.
17
+ include Vagrant::Util::Retryable
18
+
19
+ def initialize
20
+ @logger = Log4r::Logger.new("vagrant::provider::virtualbox::base")
21
+
22
+ # This flag is used to keep track of interrupted state (SIGINT)
23
+ @interrupted = false
24
+
25
+ # Set the path to VBoxManage
26
+ @vboxmanage_path = "VBoxManage"
27
+
28
+ if Vagrant::Util::Platform.windows? || Vagrant::Util::Platform.cygwin?
29
+ @logger.debug("Windows. Trying VBOX_INSTALL_PATH for VBoxManage")
30
+
31
+ # On Windows, we use the VBOX_INSTALL_PATH environmental
32
+ # variable to find VBoxManage.
33
+ if ENV.has_key?("VBOX_INSTALL_PATH")
34
+ # Get the path.
35
+ path = ENV["VBOX_INSTALL_PATH"]
36
+ @logger.debug("VBOX_INSTALL_PATH value: #{path}")
37
+
38
+ # There can actually be multiple paths in here, so we need to
39
+ # split by the separator ";" and see which is a good one.
40
+ path.split(";").each do |single|
41
+ # Make sure it ends with a \
42
+ single += "\\" if !single.end_with?("\\")
43
+
44
+ # If the executable exists, then set it as the main path
45
+ # and break out
46
+ vboxmanage = "#{path}VBoxManage.exe"
47
+ if File.file?(vboxmanage)
48
+ @vboxmanage_path = Vagrant::Util::Platform.platform_path(vboxmanage)
49
+ break
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ @logger.info("VBoxManage path: #{@vboxmanage_path}")
56
+ end
57
+
58
+ # Clears the forwarded ports that have been set on the virtual machine.
59
+ def clear_forwarded_ports
60
+ end
61
+
62
+ # Clears the shared folders that have been set on the virtual machine.
63
+ def clear_shared_folders
64
+ end
65
+
66
+ # Creates a DHCP server for a host only network.
67
+ #
68
+ # @param [String] network Name of the host-only network.
69
+ # @param [Hash] options Options for the DHCP server.
70
+ def create_dhcp_server(network, options)
71
+ end
72
+
73
+ # Creates a host only network with the given options.
74
+ #
75
+ # @param [Hash] options Options to create the host only network.
76
+ # @return [Hash] The details of the host only network, including
77
+ # keys `:name`, `:ip`, and `:netmask`
78
+ def create_host_only_network(options)
79
+ end
80
+
81
+ # Deletes the virtual machine references by this driver.
82
+ def delete
83
+ end
84
+
85
+ # Deletes any host only networks that aren't being used for anything.
86
+ def delete_unused_host_only_networks
87
+ end
88
+
89
+ # Discards any saved state associated with this VM.
90
+ def discard_saved_state
91
+ end
92
+
93
+ # Enables network adapters on the VM.
94
+ #
95
+ # The format of each adapter specification should be like so:
96
+ #
97
+ # {
98
+ # :type => :hostonly,
99
+ # :hostonly => "vboxnet0",
100
+ # :mac_address => "tubes"
101
+ # }
102
+ #
103
+ # This must support setting up both host only and bridged networks.
104
+ #
105
+ # @param [Array<Hash>] adapters Array of adapters to enable.
106
+ def enable_adapters(adapters)
107
+ end
108
+
109
+ # Execute a raw command straight through to VBoxManage.
110
+ #
111
+ # @param [Array] command Command to execute.
112
+ def execute_command(command)
113
+ end
114
+
115
+ # Exports the virtual machine to the given path.
116
+ #
117
+ # @param [String] path Path to the OVF file.
118
+ # @yield [progress] Yields the block with the progress of the export.
119
+ def export(path)
120
+ end
121
+
122
+ # Forwards a set of ports for a VM.
123
+ #
124
+ # This will not affect any previously set forwarded ports,
125
+ # so be sure to delete those if you need to.
126
+ #
127
+ # The format of each port hash should be the following:
128
+ #
129
+ # {
130
+ # :name => "foo",
131
+ # :hostport => 8500,
132
+ # :guestport => 80,
133
+ # :adapter => 1,
134
+ # :protocol => "tcp"
135
+ # }
136
+ #
137
+ # Note that "adapter" and "protocol" are optional and will default
138
+ # to 1 and "tcp" respectively.
139
+ #
140
+ # @param [Array<Hash>] ports An array of ports to set. See documentation
141
+ # for more information on the format.
142
+ def forward_ports(ports)
143
+ end
144
+
145
+ # Halts the virtual machine (pulls the plug).
146
+ def halt
147
+ end
148
+
149
+ # Imports the VM from an OVF file.
150
+ #
151
+ # @param [String] ovf Path to the OVF file.
152
+ # @return [String] UUID of the imported VM.
153
+ def import(ovf)
154
+ end
155
+
156
+ # Returns a list of forwarded ports for a VM.
157
+ #
158
+ # @param [String] uuid UUID of the VM to read from, or `nil` if this
159
+ # VM.
160
+ # @param [Boolean] active_only If true, only VMs that are running will
161
+ # be checked.
162
+ # @return [Array<Array>]
163
+ def read_forwarded_ports(uuid=nil, active_only=false)
164
+ end
165
+
166
+ # Returns a list of bridged interfaces.
167
+ #
168
+ # @return [Hash]
169
+ def read_bridged_interfaces
170
+ end
171
+
172
+ # Returns the guest additions version that is installed on this VM.
173
+ #
174
+ # @return [String]
175
+ def read_guest_additions_version
176
+ end
177
+
178
+ # Returns a list of available host only interfaces.
179
+ #
180
+ # @return [Hash]
181
+ def read_host_only_interfaces
182
+ end
183
+
184
+ # Returns the MAC address of the first network interface.
185
+ #
186
+ # @return [String]
187
+ def read_mac_address
188
+ end
189
+
190
+ # Returns the folder where VirtualBox places it's VMs.
191
+ #
192
+ # @return [String]
193
+ def read_machine_folder
194
+ end
195
+
196
+ # Returns a list of network interfaces of the VM.
197
+ #
198
+ # @return [Hash]
199
+ def read_network_interfaces
200
+ end
201
+
202
+ # Returns the current state of this VM.
203
+ #
204
+ # @return [Symbol]
205
+ def read_state
206
+ end
207
+
208
+ # Returns a list of all forwarded ports in use by active
209
+ # virtual machines.
210
+ #
211
+ # @return [Array]
212
+ def read_used_ports
213
+ end
214
+
215
+ # Returns a list of all UUIDs of virtual machines currently
216
+ # known by VirtualBox.
217
+ #
218
+ # @return [Array<String>]
219
+ def read_vms
220
+ end
221
+
222
+ # Sets the MAC address of the first network adapter.
223
+ #
224
+ # @param [String] mac MAC address without any spaces/hyphens.
225
+ def set_mac_address(mac)
226
+ end
227
+
228
+ # Share a set of folders on this VM.
229
+ #
230
+ # @param [Array<Hash>] folders
231
+ def share_folders(folders)
232
+ end
233
+
234
+ # Reads the SSH port of this VM.
235
+ #
236
+ # @param [Integer] expected Expected guest port of SSH.
237
+ def ssh_port(expected)
238
+ end
239
+
240
+ # Starts the virtual machine.
241
+ #
242
+ # @param [String] mode Mode to boot the VM. Either "headless"
243
+ # or "gui"
244
+ def start(mode)
245
+ end
246
+
247
+ # Suspend the virtual machine.
248
+ def suspend
249
+ end
250
+
251
+ # Verifies that the driver is ready to accept work.
252
+ #
253
+ # This should raise a VagrantError if things are not ready.
254
+ def verify!
255
+ end
256
+
257
+ # Verifies that an image can be imported properly.
258
+ #
259
+ # @param [String] path Path to an OVF file.
260
+ # @return [Boolean]
261
+ def verify_image(path)
262
+ end
263
+
264
+ # Checks if a VM with the given UUID exists.
265
+ #
266
+ # @return [Boolean]
267
+ def vm_exists?(uuid)
268
+ end
269
+
270
+ # Execute the given subcommand for VBoxManage and return the output.
271
+ def execute(*command, &block)
272
+ # Get the options hash if it exists
273
+ opts = {}
274
+ opts = command.pop if command.last.is_a?(Hash)
275
+
276
+ tries = 0
277
+ tries = 3 if opts[:retryable]
278
+
279
+ # Variable to store our execution result
280
+ r = nil
281
+
282
+ retryable(:on => Vagrant::Errors::VBoxManageError, :tries => tries, :sleep => 1) do
283
+ # Execute the command
284
+ r = raw(*command, &block)
285
+
286
+ # If the command was a failure, then raise an exception that is
287
+ # nicely handled by Vagrant.
288
+ if r.exit_code != 0
289
+ if @interrupted
290
+ @logger.info("Exit code != 0, but interrupted. Ignoring.")
291
+ else
292
+ raise Vagrant::Errors::VBoxManageError, :command => command.inspect
293
+ end
294
+ else
295
+ # Sometimes, VBoxManage fails but doesn't actual return a non-zero
296
+ # exit code. For this we inspect the output and determine if an error
297
+ # occurred.
298
+ if r.stderr =~ /VBoxManage: error:/
299
+ @logger.info("VBoxManage error text found, assuming error.")
300
+ raise Vagrant::Errors::VBoxManageError, :command => command.inspect
301
+ end
302
+ end
303
+ end
304
+
305
+ # Return the output, making sure to replace any Windows-style
306
+ # newlines with Unix-style.
307
+ r.stdout.gsub("\r\n", "\n")
308
+ end
309
+
310
+ # Executes a command and returns the raw result object.
311
+ def raw(*command, &block)
312
+ int_callback = lambda do
313
+ @interrupted = true
314
+ @logger.info("Interrupted.")
315
+ end
316
+
317
+ # Append in the options for subprocess
318
+ command << { :notify => [:stdout, :stderr] }
319
+
320
+ # The following is a workaround for a combined VirtualBox and
321
+ # Mac OS X 10.8 bug:
322
+ #
323
+ # Remove the DYLD_LIBRARY_PATH environmental variable on Mac. This
324
+ # is to fix a bug in Mac OS X 10.8 where a warning is printed to the
325
+ # console if this is set when executing certain programs, which
326
+ # can cause some VBoxManage commands to break because they work
327
+ # by just reading stdout and don't expect the OS to just inject
328
+ # garbage into it.
329
+ old_dyld_lib_path = ENV.delete("DYLD_LIBRARY_PATH")
330
+ old_ld_lib_path = ENV.delete("LD_LIBRARY_PATH")
331
+
332
+ Vagrant::Util::Busy.busy(int_callback) do
333
+ Vagrant::Util::Subprocess.execute(@vboxmanage_path, *command, &block)
334
+ end
335
+ ensure
336
+ # Reset the library path if it was set before. See above comments
337
+ # for more information on why this was unset in the first place.
338
+ ENV["DYLD_LIBRARY_PATH"] = old_dyld_lib_path if old_dyld_lib_path
339
+ ENV["LD_LIBRARY_PATH"] = old_ld_lib_path if old_ld_lib_path
340
+ end
341
+ end
342
+ end
343
+ end
344
+ end
@@ -0,0 +1,142 @@
1
+ require "forwardable"
2
+
3
+ require "log4r"
4
+
5
+ require File.expand_path("../base", __FILE__)
6
+
7
+ module VagrantPlugins
8
+ module ProviderVirtualBox
9
+ module Driver
10
+ class Meta < Base
11
+ # This is raised if the VM is not found when initializing a driver
12
+ # with a UUID.
13
+ class VMNotFound < StandardError; end
14
+
15
+ # We use forwardable to do all our driver forwarding
16
+ extend Forwardable
17
+
18
+ # The UUID of the virtual machine we represent
19
+ attr_reader :uuid
20
+
21
+ # The version of virtualbox that is running.
22
+ attr_reader :version
23
+
24
+ def initialize(uuid=nil)
25
+ # Setup the base
26
+ super()
27
+
28
+ @logger = Log4r::Logger.new("vagrant::provider::virtualbox::meta")
29
+ @uuid = uuid
30
+
31
+ # Read and assign the version of VirtualBox we know which
32
+ # specific driver to instantiate.
33
+ begin
34
+ @version = read_version || ""
35
+ rescue Vagrant::Util::Subprocess::LaunchError
36
+ # This means that VirtualBox was not found, so we raise this
37
+ # error here.
38
+ raise Vagrant::Errors::VirtualBoxNotDetected
39
+ end
40
+
41
+ # Instantiate the proper version driver for VirtualBox
42
+ @logger.debug("Finding driver for VirtualBox version: #{@version}")
43
+ driver_map = {
44
+ "4.0" => Version_4_0,
45
+ "4.1" => Version_4_1,
46
+ "4.2" => Version_4_2
47
+ }
48
+
49
+ driver_klass = nil
50
+ driver_map.each do |key, klass|
51
+ if @version.start_with?(key)
52
+ driver_klass = klass
53
+ break
54
+ end
55
+ end
56
+
57
+ if !driver_klass
58
+ supported_versions = driver_map.keys.sort.join(", ")
59
+ raise Vagrant::Errors::VirtualBoxInvalidVersion, :supported_versions => supported_versions
60
+ end
61
+
62
+ @logger.info("Using VirtualBox driver: #{driver_klass}")
63
+ @driver = driver_klass.new(@uuid)
64
+
65
+ if @uuid
66
+ # Verify the VM exists, and if it doesn't, then don't worry
67
+ # about it (mark the UUID as nil)
68
+ raise VMNotFound if !@driver.vm_exists?(@uuid)
69
+ end
70
+ end
71
+
72
+ def_delegators :@driver, :clear_forwarded_ports,
73
+ :clear_shared_folders,
74
+ :create_dhcp_server,
75
+ :create_host_only_network,
76
+ :delete,
77
+ :delete_unused_host_only_networks,
78
+ :discard_saved_state,
79
+ :enable_adapters,
80
+ :execute_command,
81
+ :export,
82
+ :forward_ports,
83
+ :halt,
84
+ :import,
85
+ :read_forwarded_ports,
86
+ :read_bridged_interfaces,
87
+ :read_guest_additions_version,
88
+ :read_host_only_interfaces,
89
+ :read_mac_address,
90
+ :read_mac_addresses,
91
+ :read_machine_folder,
92
+ :read_network_interfaces,
93
+ :read_state,
94
+ :read_used_ports,
95
+ :read_vms,
96
+ :resume,
97
+ :set_mac_address,
98
+ :set_name,
99
+ :share_folders,
100
+ :ssh_port,
101
+ :start,
102
+ :suspend,
103
+ :verify!,
104
+ :verify_image,
105
+ :vm_exists?
106
+
107
+ protected
108
+
109
+ # This returns the version of VirtualBox that is running.
110
+ #
111
+ # @return [String]
112
+ def read_version
113
+ # The version string is usually in one of the following formats:
114
+ #
115
+ # * 4.1.8r1234
116
+ # * 4.1.8r1234_OSE
117
+ # * 4.1.8_MacPortsr1234
118
+ #
119
+ # Below accounts for all of these.
120
+
121
+ # Note: We split this into multiple lines because apparently "".split("_")
122
+ # is [], so we have to check for an empty array in between.
123
+ output = execute("--version")
124
+ if output =~ /vboxdrv kernel module is not loaded/ ||
125
+ output =~ /VirtualBox kernel modules are not loaded/i
126
+ raise Vagrant::Errors::VirtualBoxKernelModuleNotLoaded
127
+ elsif output =~ /Please install/
128
+ # Check for installation incomplete warnings, for example:
129
+ # "WARNING: The character device /dev/vboxdrv does not
130
+ # exist. Please install the virtualbox-ose-dkms package and
131
+ # the appropriate headers, most likely linux-headers-generic."
132
+ raise Vagrant::Errors::VirtualBoxInstallIncomplete
133
+ end
134
+
135
+ parts = output.split("_")
136
+ return nil if parts.empty?
137
+ parts[0].split("r")[0]
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end