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,18 +0,0 @@
1
- module Vagrant
2
- module Action
3
- module General
4
- # Simply validates the configuration of the current Vagrant
5
- # environment.
6
- class Validate
7
- def initialize(app, env)
8
- @app = app
9
- end
10
-
11
- def call(env)
12
- env[:vm].config.validate!(env[:vm].env) if !env.has_key?("validate") || env["validate"]
13
- @app.call(env)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,33 +0,0 @@
1
- module Vagrant
2
- module Action
3
- module VM
4
- class CheckBox
5
- def initialize(app, env)
6
- @app = app
7
- end
8
-
9
- def call(env)
10
- box_name = env[:vm].config.vm.box
11
- raise Errors::BoxNotSpecified if !box_name
12
-
13
- if !env[:box_collection].find(box_name)
14
- box_url = env[:vm].config.vm.box_url
15
- raise Errors::BoxSpecifiedDoesntExist, :name => box_name if !box_url
16
-
17
- # Add the box then reload the box collection so that it becomes
18
- # aware of it.
19
- env[:ui].info I18n.t("vagrant.actions.vm.check_box.not_found", :name => box_name)
20
- env[:box_collection].add(box_name, box_url)
21
- env[:box_collection].reload!
22
-
23
- # Reload the environment and set the VM to be the new loaded VM.
24
- env[:vm].env.reload!
25
- env[:vm] = env[:vm].env.vms[env[:vm].name]
26
- end
27
-
28
- @app.call(env)
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,89 +0,0 @@
1
- require "vagrant/util/is_port_open"
2
-
3
- module Vagrant
4
- module Action
5
- module VM
6
- # Action that checks to make sure there are no forwarded port collisions,
7
- # and raises an exception if there is.
8
- class CheckPortCollisions
9
- include Util::IsPortOpen
10
-
11
- def initialize(app, env)
12
- @app = app
13
- end
14
-
15
- def call(env)
16
- # For the handlers...
17
- @env = env
18
-
19
- # Figure out how we handle port collisions. By default we error.
20
- handler = env[:port_collision_handler] || :error
21
-
22
- # Read our forwarded ports, if we have any, to override what
23
- # we have configured.
24
- current = {}
25
- env[:vm].driver.read_forwarded_ports.each do |nic, name, hostport, guestport|
26
- current[name] = hostport.to_i
27
- end
28
-
29
- existing = env[:vm].driver.read_used_ports
30
- env[:vm].config.vm.forwarded_ports.each do |options|
31
- # Use the proper port, whether that be the configured port or the
32
- # port that is currently on use of the VM.
33
- hostport = options[:hostport].to_i
34
- hostport = current[options[:name]] if current.has_key?(options[:name])
35
-
36
- if existing.include?(hostport) || is_port_open?("127.0.0.1", hostport)
37
- # We have a collision! Handle it
38
- send("handle_#{handler}".to_sym, options, existing)
39
- end
40
- end
41
-
42
- @app.call(env)
43
- end
44
-
45
- # Handles a port collision by raising an exception.
46
- def handle_error(options, existing_ports)
47
- raise Errors::ForwardPortCollisionResume
48
- end
49
-
50
- # Handles a port collision by attempting to fix it.
51
- def handle_correct(options, existing_ports)
52
- # We need to keep this for messaging purposes
53
- original_hostport = options[:hostport]
54
-
55
- if !options[:auto]
56
- # Auto fixing is disabled for this port forward, so we
57
- # must throw an error so the user can fix it.
58
- raise Errors::ForwardPortCollision, :host_port => options[:hostport].to_s,
59
- :guest_port => options[:guestport].to_s
60
- end
61
-
62
- # Get the auto port range and get rid of the used ports and
63
- # ports which are being used in other forwards so we're just
64
- # left with available ports.
65
- range = @env[:vm].config.vm.auto_port_range.to_a
66
- range -= @env[:vm].config.vm.forwarded_ports.collect { |opts| opts[:hostport].to_i }
67
- range -= existing_ports
68
-
69
- if range.empty?
70
- raise Errors::ForwardPortAutolistEmpty, :vm_name => @env[:vm].name,
71
- :host_port => options[:hostport].to_s,
72
- :guest_port => options[:guestport].to_s
73
- end
74
-
75
- # Set the port up to be the first one and add that port to
76
- # the used list.
77
- options[:hostport] = range.shift
78
- existing_ports << options[:hostport]
79
-
80
- # Notify the user
81
- @env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.fixed_collision",
82
- :host_port => original_hostport.to_s,
83
- :guest_port => options[:guestport].to_s,
84
- :new_port => options[:hostport]))
85
- end
86
- end
87
- end
88
- end
89
- end
@@ -1,22 +0,0 @@
1
- require 'log4r'
2
-
3
- module Vagrant
4
- module Action
5
- module VM
6
- class DefaultName
7
- def initialize(app, env)
8
- @logger = Log4r::Logger.new("vagrant::action::vm::defaultname")
9
- @app = app
10
- end
11
-
12
- def call(env)
13
- @logger.info("Setting the default name of the VM")
14
- name = env[:root_path].basename.to_s + "_#{Time.now.to_i}"
15
- env[:vm].driver.set_name(name)
16
-
17
- @app.call(env)
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,20 +0,0 @@
1
- module Vagrant
2
- module Action
3
- module VM
4
- # Destroys the unused host only interfaces. This middleware cleans
5
- # up any created host only networks.
6
- class DestroyUnusedNetworkInterfaces
7
- def initialize(app, env)
8
- @app = app
9
- end
10
-
11
- def call(env)
12
- env[:vm].driver.delete_unused_host_only_networks
13
-
14
- # Continue along
15
- @app.call(env)
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,22 +0,0 @@
1
- module Vagrant
2
- module Action
3
- module VM
4
- # Discards the saved state of the VM if its saved. If its
5
- # not saved, does nothing.
6
- class DiscardState
7
- def initialize(app, env)
8
- @app = app
9
- end
10
-
11
- def call(env)
12
- if env[:vm].state == :saved
13
- env[:ui].info I18n.t("vagrant.actions.vm.discard_state.discarding")
14
- env[:vm].driver.discard_saved_state
15
- end
16
-
17
- @app.call(env)
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,32 +0,0 @@
1
- module Vagrant
2
- module Action
3
- module VM
4
- class Halt
5
- def initialize(app, env, options=nil)
6
- @app = app
7
- env.merge!(options || {})
8
- end
9
-
10
- def call(env)
11
- if env[:vm].state == :running
12
- if !env["force"]
13
- env[:ui].info I18n.t("vagrant.actions.vm.halt.graceful")
14
- env[:vm].guest.halt
15
- end
16
-
17
- if env[:vm].state != :poweroff
18
- env[:ui].info I18n.t("vagrant.actions.vm.halt.force")
19
- env[:vm].driver.halt
20
- end
21
-
22
- # Sleep for a second to verify that the VM properly
23
- # cleans itself up
24
- sleep 1 if !env["vagrant.test"]
25
- end
26
-
27
- @app.call(env)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,21 +0,0 @@
1
- module Vagrant
2
- module Action
3
- module VM
4
- class HostName
5
- def initialize(app, env)
6
- @app = app
7
- end
8
-
9
- def call(env)
10
- @app.call(env)
11
-
12
- host_name = env[:vm].config.vm.host_name
13
- if !host_name.nil?
14
- env[:ui].info I18n.t("vagrant.actions.vm.host_name.setting")
15
- env[:vm].guest.change_host_name(host_name)
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,403 +0,0 @@
1
- require 'set'
2
-
3
- require 'log4r'
4
-
5
- require 'vagrant/util/network_ip'
6
-
7
- module Vagrant
8
- module Action
9
- module VM
10
- # This action handles all `config.vm.network` configurations by
11
- # setting up the VM properly and enabling the networks afterword.
12
- class Network
13
- # Utilities to deal with network addresses
14
- include Util::NetworkIP
15
-
16
- def initialize(app, env)
17
- @logger = Log4r::Logger.new("vagrant::action::vm::network")
18
-
19
- @app = app
20
- end
21
-
22
- def call(env)
23
- @env = env
24
-
25
- # First we have to get the array of adapters that we need
26
- # to create on the virtual machine itself, as well as the
27
- # driver-agnostic network configurations for each.
28
- @logger.debug("Determining adapters and networks...")
29
- adapters = []
30
- networks = []
31
- env[:vm].config.vm.networks.each do |type, args|
32
- # Get the normalized configuration we'll use around
33
- config = send("#{type}_config", args)
34
-
35
- # Get the virtualbox adapter configuration
36
- adapter = send("#{type}_adapter", config)
37
- adapters << adapter
38
-
39
- # Get the network configuration
40
- network = send("#{type}_network_config", config)
41
- network[:_auto_config] = true if config[:auto_config]
42
- networks << network
43
- end
44
-
45
- if !adapters.empty?
46
- # Automatically assign an adapter number to any adapters
47
- # that aren't explicitly set.
48
- @logger.debug("Assigning adapter locations...")
49
- assign_adapter_locations(adapters)
50
-
51
- # Verify that our adapters are good just prior to enabling them.
52
- verify_adapters(adapters)
53
-
54
- # Create all the network interfaces
55
- @logger.info("Enabling adapters...")
56
- env[:ui].info I18n.t("vagrant.actions.vm.network.preparing")
57
- env[:vm].driver.enable_adapters(adapters)
58
- end
59
-
60
- # Continue the middleware chain. We're done with our VM
61
- # setup until after it is booted.
62
- @app.call(env)
63
-
64
- if !adapters.empty? && !networks.empty?
65
- # Determine the interface numbers for the guest.
66
- assign_interface_numbers(networks, adapters)
67
-
68
- # Configure all the network interfaces on the guest. We only
69
- # want to configure the networks that have `auto_config` setup.
70
- networks_to_configure = networks.select { |n| n[:_auto_config] }
71
- env[:ui].info I18n.t("vagrant.actions.vm.network.configuring")
72
- env[:vm].guest.configure_networks(networks_to_configure)
73
- end
74
- end
75
-
76
- # This method assigns the adapter to use for the adapter.
77
- # e.g. it says that the first adapter is actually on the
78
- # virtual machine's 2nd adapter location.
79
- #
80
- # It determines the adapter numbers by simply finding the
81
- # "next available" in each case.
82
- #
83
- # The adapters are modified in place by adding an ":adapter"
84
- # field to each.
85
- def assign_adapter_locations(adapters)
86
- available = Set.new(1..8)
87
-
88
- # Determine which NICs are actually available.
89
- interfaces = @env[:vm].driver.read_network_interfaces
90
- interfaces.each do |number, nic|
91
- # Remove the number from the available NICs if the
92
- # NIC is in use.
93
- available.delete(number) if nic[:type] != :none
94
- end
95
-
96
- # Based on the available set, assign in order to
97
- # the adapters.
98
- available = available.to_a.sort
99
- @logger.debug("Available NICs: #{available.inspect}")
100
- adapters.each do |adapter|
101
- # Ignore the adapters that already have been assigned
102
- if !adapter[:adapter]
103
- # If we have no available adapters, then that is an exceptional
104
- # event.
105
- raise Errors::NetworkNoAdapters if available.empty?
106
-
107
- # Otherwise, assign as the adapter the next available item
108
- adapter[:adapter] = available.shift
109
- end
110
- end
111
- end
112
-
113
- # Verifies that the adapter configurations look good. This will
114
- # raise an exception in the case that any errors occur.
115
- def verify_adapters(adapters)
116
- # Verify that there are no collisions in the adapters being used.
117
- used = Set.new
118
- adapters.each do |adapter|
119
- raise Errors::NetworkAdapterCollision if used.include?(adapter[:adapter])
120
- used.add(adapter[:adapter])
121
- end
122
- end
123
-
124
- # Assigns the actual interface number of a network based on the
125
- # enabled NICs on the virtual machine.
126
- #
127
- # This interface number is used by the guest to configure the
128
- # NIC on the guest VM.
129
- #
130
- # The networks are modified in place by adding an ":interface"
131
- # field to each.
132
- def assign_interface_numbers(networks, adapters)
133
- current = 0
134
- adapter_to_interface = {}
135
-
136
- # Make a first pass to assign interface numbers by adapter location
137
- vm_adapters = @env[:vm].driver.read_network_interfaces
138
- vm_adapters.sort.each do |number, adapter|
139
- if adapter[:type] != :none
140
- # Not used, so assign the interface number and increment
141
- adapter_to_interface[number] = current
142
- current += 1
143
- end
144
- end
145
-
146
- # Make a pass through the adapters to assign the :interface
147
- # key to each network configuration.
148
- adapters.each_index do |i|
149
- adapter = adapters[i]
150
- network = networks[i]
151
-
152
- # Figure out the interface number by simple lookup
153
- network[:interface] = adapter_to_interface[adapter[:adapter]]
154
- end
155
- end
156
-
157
- def hostonly_config(args)
158
- ip = args[0]
159
- options = args[1] || {}
160
-
161
- # Determine if we're dealing with a static IP or a DHCP-served IP.
162
- type = ip == :dhcp ? :dhcp : :static
163
-
164
- # Default IP is in the 20-bit private network block for DHCP based networks
165
- ip = "172.28.128.1" if type == :dhcp
166
-
167
- options = {
168
- :type => type,
169
- :ip => ip,
170
- :netmask => "255.255.255.0",
171
- :adapter => nil,
172
- :mac => nil,
173
- :name => nil,
174
- :auto_config => true
175
- }.merge(options)
176
-
177
- # Verify that this hostonly network wouldn't conflict with any
178
- # bridged interfaces
179
- verify_no_bridge_collision(options)
180
-
181
- # Get the network address and IP parts which are used for many
182
- # default calculations
183
- netaddr = network_address(options[:ip], options[:netmask])
184
- ip_parts = netaddr.split(".").map { |i| i.to_i }
185
-
186
- # Calculate the adapter IP, which we assume is the IP ".1" at the
187
- # end usually.
188
- adapter_ip = ip_parts.dup
189
- adapter_ip[3] += 1
190
- options[:adapter_ip] ||= adapter_ip.join(".")
191
-
192
- if type == :dhcp
193
- # Calculate the DHCP server IP, which is the network address
194
- # with the final octet + 2. So "172.28.0.0" turns into "172.28.0.2"
195
- dhcp_ip = ip_parts.dup
196
- dhcp_ip[3] += 2
197
- options[:dhcp_ip] ||= dhcp_ip.join(".")
198
-
199
- # Calculate the lower and upper bound for the DHCP server
200
- dhcp_lower = ip_parts.dup
201
- dhcp_lower[3] += 3
202
- options[:dhcp_lower] ||= dhcp_lower.join(".")
203
-
204
- dhcp_upper = ip_parts.dup
205
- dhcp_upper[3] = 254
206
- options[:dhcp_upper] ||= dhcp_upper.join(".")
207
- end
208
-
209
- # Return the hostonly network configuration
210
- return options
211
- end
212
-
213
- def hostonly_adapter(config)
214
- @logger.debug("Searching for matching network: #{config[:ip]}")
215
- interface = find_matching_hostonly_network(config)
216
-
217
- if !interface
218
- @logger.debug("Network not found. Creating if we can.")
219
-
220
- # It is an error case if a specific name was given but the network
221
- # doesn't exist.
222
- if config[:name]
223
- raise Errors::NetworkNotFound, :name => config[:name]
224
- end
225
-
226
- # Otherwise, we create a new network and put the net network
227
- # in the list of available networks so other network definitions
228
- # can use it!
229
- interface = create_hostonly_network(config)
230
- @logger.debug("Created network: #{interface[:name]}")
231
- end
232
-
233
- if config[:type] == :dhcp
234
- # Check that if there is a DHCP server attached on our interface,
235
- # then it is identical. Otherwise, we can't set it.
236
- if interface[:dhcp]
237
- valid = interface[:dhcp][:ip] == config[:dhcp_ip] &&
238
- interface[:dhcp][:lower] == config[:dhcp_lower] &&
239
- interface[:dhcp][:upper] == config[:dhcp_upper]
240
-
241
- raise Errors::NetworkDHCPAlreadyAttached if !valid
242
-
243
- @logger.debug("DHCP server already properly configured")
244
- else
245
- # Configure the DHCP server for the network.
246
- @logger.debug("Creating a DHCP server...")
247
- @env[:vm].driver.create_dhcp_server(interface[:name], config)
248
- end
249
- end
250
-
251
- return {
252
- :adapter => config[:adapter],
253
- :type => :hostonly,
254
- :hostonly => interface[:name],
255
- :mac_address => config[:mac],
256
- :nic_type => config[:nic_type]
257
- }
258
- end
259
-
260
- def hostonly_network_config(config)
261
- return {
262
- :type => config[:type],
263
- :ip => config[:ip],
264
- :netmask => config[:netmask]
265
- }
266
- end
267
-
268
- # Creates a new hostonly network that matches the network requested
269
- # by the given host-only network configuration.
270
- def create_hostonly_network(config)
271
- # Create the options that are going to be used to create our
272
- # new network.
273
- options = config.dup
274
- options[:ip] = options[:adapter_ip]
275
-
276
- @env[:vm].driver.create_host_only_network(options)
277
- end
278
-
279
- # Finds a host only network that matches our configuration on VirtualBox.
280
- # This will return nil if a matching network does not exist.
281
- def find_matching_hostonly_network(config)
282
- this_netaddr = network_address(config[:ip], config[:netmask])
283
-
284
- @env[:vm].driver.read_host_only_interfaces.each do |interface|
285
- if config[:name] && config[:name] == interface[:name]
286
- return interface
287
- elsif this_netaddr == network_address(interface[:ip], interface[:netmask])
288
- return interface
289
- end
290
- end
291
-
292
- nil
293
- end
294
-
295
- # Verifies that a host-only network subnet would not collide with
296
- # a bridged networking interface.
297
- #
298
- # If the subnets overlap in any way then the host only network
299
- # will not work because the routing tables will force the traffic
300
- # onto the real interface rather than the virtualbox interface.
301
- def verify_no_bridge_collision(options)
302
- this_netaddr = network_address(options[:ip], options[:netmask])
303
-
304
- @env[:vm].driver.read_bridged_interfaces.each do |interface|
305
- that_netaddr = network_address(interface[:ip], interface[:netmask])
306
- raise Errors::NetworkCollision if this_netaddr == that_netaddr && interface[:status] != "Down"
307
- end
308
- end
309
-
310
- def bridged_config(args)
311
- options = args[0] || {}
312
- options = {} if !options.is_a?(Hash)
313
-
314
- return {
315
- :adapter => nil,
316
- :mac => nil,
317
- :bridge => nil,
318
- :auto_config => true
319
- }.merge(options)
320
- end
321
-
322
- def bridged_adapter(config)
323
- # Find the bridged interfaces that are available
324
- bridgedifs = @env[:vm].driver.read_bridged_interfaces
325
- bridgedifs.delete_if { |interface| interface[:status] == "Down" }
326
-
327
- # The name of the chosen bridge interface will be assigned to this
328
- # variable.
329
- chosen_bridge = nil
330
-
331
- if config[:bridge]
332
- @logger.debug("Bridge was directly specified in config, searching for: #{config[:bridge]}")
333
-
334
- # Search for a matching bridged interface
335
- bridgedifs.each do |interface|
336
- if interface[:name].downcase == config[:bridge].downcase
337
- @logger.debug("Specific bridge found as configured in the Vagrantfile. Using it.")
338
- chosen_bridge = interface[:name]
339
- break
340
- end
341
- end
342
-
343
- # If one wasn't found, then we notify the user here.
344
- if !chosen_bridge
345
- @env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.specific_not_found",
346
- :bridge => config[:bridge])
347
- end
348
- end
349
-
350
- # If we still don't have a bridge chosen (this means that one wasn't
351
- # specified in the Vagrantfile, or the bridge specified in the Vagrantfile
352
- # wasn't found), then we fall back to the normal means of searchign for a
353
- # bridged network.
354
- if !chosen_bridge
355
- if bridgedifs.length == 1
356
- # One bridgable interface? Just use it.
357
- chosen_bridge = bridgedifs[0][:name]
358
- @logger.debug("Only one bridged interface available. Using it by default.")
359
- else
360
- # More than one bridgable interface requires a user decision, so
361
- # show options to choose from.
362
- @env[:ui].info I18n.t("vagrant.actions.vm.bridged_networking.available",
363
- :prefix => false)
364
- bridgedifs.each_index do |index|
365
- interface = bridgedifs[index]
366
- @env[:ui].info("#{index + 1}) #{interface[:name]}", :prefix => false)
367
- end
368
-
369
- # The range of valid choices
370
- valid = Range.new(1, bridgedifs.length)
371
-
372
- # The choice that the user has chosen as the bridging interface
373
- choice = nil
374
- while !valid.include?(choice)
375
- choice = @env[:ui].ask("What interface should the network bridge to? ")
376
- choice = choice.to_i
377
- end
378
-
379
- chosen_bridge = bridgedifs[choice - 1][:name]
380
- end
381
- end
382
-
383
- @logger.info("Bridging adapter #{config[:adapter]} to #{chosen_bridge}")
384
-
385
- # Given the choice we can now define the adapter we're using
386
- return {
387
- :adapter => config[:adapter],
388
- :type => :bridged,
389
- :bridge => chosen_bridge,
390
- :mac_address => config[:mac],
391
- :nic_type => config[:nic_type],
392
- }
393
- end
394
-
395
- def bridged_network_config(config)
396
- return {
397
- :type => :dhcp
398
- }
399
- end
400
- end
401
- end
402
- end
403
- end