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
@@ -0,0 +1,69 @@
1
+ module Vagrant
2
+ module Plugin
3
+ module V2
4
+ # This is the base class for a provider for the V2 API. A provider
5
+ # is responsible for creating compute resources to match the needs
6
+ # of a Vagrant-configured system.
7
+ class Provider
8
+ # Initialize the provider to represent the given machine.
9
+ #
10
+ # @param [Vagrant::Machine] machine The machine that this provider
11
+ # is responsible for.
12
+ def initialize(machine)
13
+ end
14
+
15
+ # This should return an action callable for the given name.
16
+ #
17
+ # @param [Symbol] name Name of the action.
18
+ # @return [Object] A callable action sequence object, whether it
19
+ # is a proc, object, etc.
20
+ def action(name)
21
+ nil
22
+ end
23
+
24
+ # This method is called if the underying machine ID changes. Providers
25
+ # can use this method to load in new data for the actual backing
26
+ # machine or to realize that the machine is now gone (the ID can
27
+ # become `nil`). No parameters are given, since the underlying machine
28
+ # is simply the machine instance given to this object. And no
29
+ # return value is necessary.
30
+ def machine_id_changed
31
+ end
32
+
33
+ # This should return a hash of information that explains how to
34
+ # SSH into the machine. If the machine is not at a point where
35
+ # SSH is even possible, then `nil` should be returned.
36
+ #
37
+ # The general structure of this returned hash should be the
38
+ # following:
39
+ #
40
+ # {
41
+ # :host => "1.2.3.4",
42
+ # :port => "22",
43
+ # :username => "mitchellh",
44
+ # :private_key_path => "/path/to/my/key"
45
+ # }
46
+ #
47
+ # **Note:** Vagrant only supports private key based authentication,
48
+ # mainly for the reason that there is no easy way to exec into an
49
+ # `ssh` prompt with a password, whereas we can pass a private key
50
+ # via commandline.
51
+ #
52
+ # @return [Hash] SSH information. For the structure of this hash
53
+ # read the accompanying documentation for this method.
54
+ def ssh_info
55
+ nil
56
+ end
57
+
58
+ # This should return the state of the machine within this provider.
59
+ # The state must be an instance of {MachineState}. Please read the
60
+ # documentation of that class for more information.
61
+ #
62
+ # @return [MachineState]
63
+ def state
64
+ nil
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,47 @@
1
+ module Vagrant
2
+ module Plugin
3
+ module V2
4
+ # This is the base class for a provisioner for the V2 API. A provisioner
5
+ # is primarily responsible for installing software on a Vagrant guest.
6
+ class Provisioner
7
+ attr_reader :machine
8
+ attr_reader :config
9
+
10
+ # Initializes the provisioner with the machine that it will be
11
+ # provisioning along with the provisioner configuration (if there
12
+ # is any).
13
+ #
14
+ # The provisioner should _not_ do anything at this point except
15
+ # initialize internal state.
16
+ #
17
+ # @param [Machine] machine The machine that this will be provisioning.
18
+ # @param [Object] config Provisioner configuration, if one was set.
19
+ def initialize(machine, config)
20
+ @machine = machine
21
+ @config = config
22
+ end
23
+
24
+ # Called with the root configuration of the machine so the provisioner
25
+ # can add some configuration on top of the machine.
26
+ #
27
+ # During this step, and this step only, the provisioner should modify
28
+ # the root machine configuration to add any additional features it
29
+ # may need. Examples include sharing folders, networking, and so on.
30
+ # This step is guaranteed to be called before any of those steps are
31
+ # done so the provisioner may do that.
32
+ #
33
+ # No return value is expected.
34
+ def configure(root_config)
35
+ end
36
+
37
+ # This is the method called when the actual provisioning should be
38
+ # done. The communicator is guaranteed to be ready at this point,
39
+ # and any shared folders or networks are already setup.
40
+ #
41
+ # No return value is expected.
42
+ def provision
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -2,43 +2,62 @@ module Vagrant
2
2
  # Register components in a single location that can be queried.
3
3
  #
4
4
  # This allows certain components (such as guest systems, configuration
5
- # pieces, etc.) to be registered and queried.
5
+ # pieces, etc.) to be registered and queried, lazily.
6
6
  class Registry
7
7
  def initialize
8
- @actions = {}
8
+ @items = {}
9
9
  @results_cache = {}
10
10
  end
11
11
 
12
- # Register a callable by key.
12
+ # Register a key with a lazy-loaded value.
13
13
  #
14
- # The callable should be given in a block which will be lazily evaluated
15
- # when the action is needed.
16
- #
17
- # If an action by the given name already exists then it will be
18
- # overwritten.
19
- def register(key, value=nil, &block)
20
- block = lambda { value } if value
21
- @actions[key] = block
14
+ # If a key with the given name already exists, it is overwritten.
15
+ def register(key, &block)
16
+ raise ArgumentError, "block required" if !block_given?
17
+ @items[key] = block
22
18
  end
23
19
 
24
- # Get an action by the given key.
20
+ # Get a value by the given key.
25
21
  #
26
- # This will evaluate the block given to `register` and return the resulting
27
- # action stack.
22
+ # This will evaluate the block given to `register` and return the
23
+ # resulting value.
28
24
  def get(key)
29
- return nil if !@actions.has_key?(key)
25
+ return nil if !@items.has_key?(key)
30
26
  return @results_cache[key] if @results_cache.has_key?(key)
31
- @results_cache[key] = @actions[key].call
27
+ @results_cache[key] = @items[key].call
32
28
  end
33
29
  alias :[] :get
34
30
 
31
+ # Checks if the given key is registered with the registry.
32
+ #
33
+ # @return [Boolean]
34
+ def has_key?(key)
35
+ @items.has_key?(key)
36
+ end
37
+
35
38
  # Iterate over the keyspace.
36
39
  def each(&block)
37
- @actions.each do |key, _|
40
+ @items.each do |key, _|
38
41
  yield key, get(key)
39
42
  end
40
43
  end
41
44
 
45
+ # Merge one registry with another and return a completely new
46
+ # registry. Note that the result cache is completely busted, so
47
+ # any gets on the new registry will result in a cache miss.
48
+ def merge(other)
49
+ self.class.new.tap do |result|
50
+ result.merge!(self)
51
+ result.merge!(other)
52
+ end
53
+ end
54
+
55
+ # Like #{merge} but merges into self.
56
+ def merge!(other)
57
+ @items.merge!(other.__internal_state[:items])
58
+ self
59
+ end
60
+
42
61
  # Converts this registry to a hash
43
62
  def to_hash
44
63
  result = {}
@@ -48,5 +67,12 @@ module Vagrant
48
67
 
49
68
  result
50
69
  end
70
+
71
+ def __internal_state
72
+ {
73
+ :items => @items,
74
+ :results_cache => @results_cache
75
+ }
76
+ end
51
77
  end
52
78
  end
@@ -1,5 +1,6 @@
1
1
  require 'log4r'
2
2
 
3
+ require 'vagrant/util/file_util'
3
4
  require 'vagrant/util/file_mode'
4
5
  require 'vagrant/util/platform'
5
6
  require 'vagrant/util/safe_exec'
@@ -55,15 +56,18 @@ module Vagrant
55
56
  # Get the SSH information and cache it here
56
57
  ssh_info = info
57
58
 
58
- if Util::Platform.windows?
59
- raise Errors::SSHUnavailableWindows, :host => ssh_info[:host],
60
- :port => ssh_info[:port],
61
- :username => ssh_info[:username],
62
- :key_path => ssh_info[:private_key_path]
59
+ # Ensure the platform supports ssh. On Windows there are several programs which
60
+ # include ssh, notably git, mingw and cygwin, but make sure ssh is in the path!
61
+ if !Util::FileUtil.which("ssh")
62
+ if Util::Platform.windows?
63
+ raise Errors::SSHUnavailableWindows, :host => ssh_info[:host],
64
+ :port => ssh_info[:port],
65
+ :username => ssh_info[:username],
66
+ :key_path => ssh_info[:private_key_path]
67
+ end
68
+ raise Errors::SSHUnavailable
63
69
  end
64
70
 
65
- raise Errors::SSHUnavailable if !Kernel.system("which ssh > /dev/null 2>&1")
66
-
67
71
  # If plain mode is enabled then we don't do any authentication (we don't
68
72
  # set a user or an identity file)
69
73
  plain_mode = opts[:plain_mode]
@@ -76,10 +80,11 @@ module Vagrant
76
80
 
77
81
  # Command line options
78
82
  command_options = ["-p", options[:port].to_s, "-o", "UserKnownHostsFile=/dev/null",
79
- "-o", "StrictHostKeyChecking=no", "-o", "LogLevel=ERROR"]
83
+ "-o", "StrictHostKeyChecking=no", "-o", "LogLevel=QUIET"]
80
84
 
81
85
  # Solaris/OpenSolaris/Illumos uses SunSSH which doesn't support the IdentitiesOnly option
82
- command_options += ["-o", "IdentitiesOnly=yes"] unless Util::Platform.solaris?
86
+ # (Also don't use it in plain mode, it'll skip user agents.)
87
+ command_options += ["-o", "IdentitiesOnly=yes"] if !(Util::Platform.solaris? || plain_mode)
83
88
 
84
89
  command_options += ["-i", options[:private_key_path]] if !plain_mode
85
90
  command_options += ["-o", "ForwardAgent=yes"] if ssh_info[:forward_agent]
@@ -113,6 +118,7 @@ module Vagrant
113
118
  @logger.info("Attempting to correct key permissions to 0600")
114
119
  File.chmod(0600, key_path)
115
120
 
121
+ stat = File.stat(key_path)
116
122
  if Util::FileMode.from_octal(stat.mode) != "600"
117
123
  raise Errors::SSHKeyBadPermissions, :key_path => key_path
118
124
  end
@@ -14,7 +14,7 @@ module Vagrant
14
14
  class Interface
15
15
  attr_accessor :resource
16
16
 
17
- def initialize(resource)
17
+ def initialize(resource=nil)
18
18
  @logger = Log4r::Logger.new("vagrant::ui::interface")
19
19
  @resource = resource
20
20
  end
@@ -73,8 +73,11 @@ module Vagrant
73
73
  # Output the data
74
74
  say(:info, message, opts)
75
75
 
76
- # Get the results and chomp off the newline
77
- $stdin.gets.chomp
76
+ # Get the results and chomp off the newline. We do a logical OR
77
+ # here because `gets` can return a nil, for example in the case
78
+ # that ctrl-D is pressed on the input.
79
+ input = $stdin.gets || ""
80
+ input.chomp
78
81
  end
79
82
 
80
83
  # This is used to output progress reports to the UI.
@@ -96,7 +99,6 @@ module Vagrant
96
99
  def clear_line
97
100
  reset = "\r"
98
101
  reset += "\e[0K" unless Util::Platform.windows?
99
- reset
100
102
 
101
103
  info(reset, :new_line => false)
102
104
  end
@@ -123,7 +125,7 @@ module Vagrant
123
125
  # This is called by `say` to format the message for output.
124
126
  def format_message(type, message, opts=nil)
125
127
  opts ||= {}
126
- message = "[#{@resource}] #{message}" if opts[:prefix]
128
+ message = "[#{@resource}] #{message}" if @resource && opts[:prefix]
127
129
  message
128
130
  end
129
131
  end
@@ -29,7 +29,7 @@ module Vagrant
29
29
  # to connect.
30
30
  return true
31
31
  end
32
- rescue Timeout::Error, Errno::ECONNREFUSED, Errno::EHOSTUNREACH
32
+ rescue Timeout::Error, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ENETUNREACH
33
33
  # Any of the above exceptions signal that the port is closed.
34
34
  return false
35
35
  end
@@ -1,6 +1,8 @@
1
1
  require 'rbconfig'
2
2
  require 'tempfile'
3
3
 
4
+ require "vagrant/util/subprocess"
5
+
4
6
  module Vagrant
5
7
  module Util
6
8
  # This class just contains some platform checking code.
@@ -14,6 +16,10 @@ module Vagrant
14
16
  platform.include?("darwin9")
15
17
  end
16
18
 
19
+ def cygwin?
20
+ platform.include?("cygwin")
21
+ end
22
+
17
23
  [:darwin, :bsd, :freebsd, :linux, :solaris].each do |type|
18
24
  define_method("#{type}?") do
19
25
  platform.include?(type.to_s)
@@ -44,6 +50,19 @@ module Vagrant
44
50
  !bit64?
45
51
  end
46
52
 
53
+ # This takes as input a path as a string and converts it into
54
+ # a platform-friendly version of the path. This is most important
55
+ # when using the path in shell environments with Cygwin.
56
+ #
57
+ # @param [String] path
58
+ # @return [String]
59
+ def platform_path(path)
60
+ return path if !cygwin?
61
+
62
+ process = Subprocess.execute("cygpath", "-u", path.to_s)
63
+ process.stdout.chomp
64
+ end
65
+
47
66
  # Returns a boolean noting whether the terminal supports color.
48
67
  # output.
49
68
  def terminal_supports_colors?
@@ -1,3 +1,5 @@
1
+ require "log4r"
2
+
1
3
  module Vagrant
2
4
  module Util
3
5
  module Retryable
@@ -8,12 +10,16 @@ module Vagrant
8
10
  # This code is adapted slightly from the following blog post:
9
11
  # http://blog.codefront.net/2008/01/14/retrying-code-blocks-in-ruby-on-exceptions-whatever/
10
12
  def retryable(opts=nil)
11
- opts = { :tries => 1, :on => Exception }.merge(opts || {})
13
+ logger = nil
14
+ opts = { :tries => 1, :on => Exception }.merge(opts || {})
12
15
 
13
16
  begin
14
17
  return yield
15
- rescue *opts[:on]
18
+ rescue *opts[:on] => e
16
19
  if (opts[:tries] -= 1) > 0
20
+ logger = Log4r::Logger.new("vagrant::util::retryable")
21
+ logger.info("Retryable exception raised: #{e.inspect}")
22
+
17
23
  sleep opts[:sleep].to_f if opts[:sleep]
18
24
  retry
19
25
  end
@@ -6,8 +6,8 @@ module Vagrant
6
6
  # This issue causes `exec` to fail if there is more than one system
7
7
  # thread. In that case, `safe_exec` automatically falls back to
8
8
  # forking.
9
- module SafeExec
10
- def safe_exec(command, *args)
9
+ class SafeExec
10
+ def self.exec(command, *args)
11
11
  # Create a list of things to rescue from. Since this is OS
12
12
  # specific, we need to do some defined? checks here to make
13
13
  # sure they exist.
@@ -0,0 +1,45 @@
1
+ module Vagrant
2
+ module Util
3
+ # This allows for hash options to be overridden by a scope key
4
+ # prefix. An example speaks best here. Imagine the following hash:
5
+ #
6
+ # original = {
7
+ # :id => "foo",
8
+ # :mitchellh__id => "bar",
9
+ # :mitchellh__other => "foo"
10
+ # }
11
+ #
12
+ # scoped = scoped_hash_override(original, "mitchellh")
13
+ #
14
+ # scoped == {
15
+ # :id => "bar",
16
+ # :other => "foo"
17
+ # }
18
+ #
19
+ module ScopedHashOverride
20
+ def scoped_hash_override(original, scope)
21
+ # Convert the scope to a string in case a symbol was given since
22
+ # we use string comparisons for everything.
23
+ scope = scope.to_s
24
+
25
+ # Shallow copy the hash for the result
26
+ result = original.dup
27
+
28
+ original.each do |key, value|
29
+ parts = key.to_s.split("__", 2)
30
+
31
+ # If we don't have the proper parts, then bail
32
+ next if parts.length != 2
33
+
34
+ # If this is our scope, then override
35
+ if parts[0] == scope
36
+ result[parts[1].to_sym] = value
37
+ result.delete(key)
38
+ end
39
+ end
40
+
41
+ result
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,126 @@
1
+ require "log4r"
2
+
3
+ require "vagrant/util/file_mode"
4
+ require "vagrant/util/platform"
5
+ require "vagrant/util/safe_exec"
6
+ require "vagrant/util/which"
7
+
8
+ module Vagrant
9
+ module Util
10
+ # This is a class that has helpers on it for dealing with SSH. These
11
+ # helpers don't depend on any part of Vagrant except what is given
12
+ # via the parameters.
13
+ class SSH
14
+ LOGGER = Log4r::Logger.new("vagrant::util::ssh")
15
+
16
+ # Checks that the permissions for a private key are valid, and fixes
17
+ # them if possible. SSH requires that permissions on the private key
18
+ # are 0600 on POSIX based systems. This will make a best effort to
19
+ # fix these permissions if they are not properly set.
20
+ #
21
+ # @param [Pathname] key_path The path to the private key.
22
+ def self.check_key_permissions(key_path)
23
+ # Don't do anything if we're on Windows, since Windows doesn't worry
24
+ # about key permissions.
25
+ return if Platform.windows?
26
+
27
+ LOGGER.debug("Checking key permissions: #{key_path}")
28
+ stat = key_path.stat
29
+
30
+ if stat.owned? && FileMode.from_octal(stat.mode) != "600"
31
+ LOGGER.info("Attempting to correct key permissions to 0600")
32
+ key_path.chmod(0600)
33
+
34
+ # Re-stat the file to get the new mode, and verify it worked
35
+ stat = key_path.stat
36
+ if FileMode.from_octal(stat.mode) != "600"
37
+ raise Errors::SSHKeyBadPermissions, :key_path => key_path
38
+ end
39
+ end
40
+ rescue Errno::EPERM
41
+ # This shouldn't happen since we verify we own the file, but
42
+ # it is possible in theory, so we raise an error.
43
+ raise Errors::SSHKeyBadPermissions, :key_path => key_path
44
+ end
45
+
46
+ # Halts the running of this process and replaces it with a full-fledged
47
+ # SSH shell into a remote machine.
48
+ #
49
+ # Note: This method NEVER returns. The process ends after this.
50
+ #
51
+ # @param [Hash] ssh_info This is the SSH information. For the keys
52
+ # required please see the documentation of {Machine#ssh_info}.
53
+ # @param [Hash] opts These are additional options that are supported
54
+ # by exec.
55
+ def self.exec(ssh_info, opts={})
56
+ # Ensure the platform supports ssh. On Windows there are several programs which
57
+ # include ssh, notably git, mingw and cygwin, but make sure ssh is in the path!
58
+ if !Which.which("ssh")
59
+ if Platform.windows?
60
+ raise Errors::SSHUnavailableWindows,
61
+ :host => ssh_info[:host],
62
+ :port => ssh_info[:port],
63
+ :username => ssh_info[:username],
64
+ :key_path => ssh_info[:private_key_path]
65
+ end
66
+
67
+ raise Errors::SSHUnavailable
68
+ end
69
+
70
+ # If plain mode is enabled then we don't do any authentication (we don't
71
+ # set a user or an identity file)
72
+ plain_mode = opts[:plain_mode]
73
+
74
+ options = {}
75
+ options[:host] = ssh_info[:host]
76
+ options[:port] = ssh_info[:port]
77
+ options[:username] = ssh_info[:username]
78
+ options[:private_key_path] = ssh_info[:private_key_path]
79
+
80
+ # Command line options
81
+ command_options = [
82
+ "-p", options[:port].to_s,
83
+ "-o", "LogLevel=FATAL",
84
+ "-o", "StrictHostKeyChecking=no",
85
+ "-o", "UserKnownHostsFile=/dev/null"]
86
+
87
+ # Solaris/OpenSolaris/Illumos uses SunSSH which doesn't support the
88
+ # IdentitiesOnly option. Also, we don't enable it in plain mode so
89
+ # that SSH properly searches our identities and tries to do it itself.
90
+ if !Platform.solaris? && !plain_mode
91
+ command_options += ["-o", "IdentitiesOnly=yes"]
92
+ end
93
+
94
+ # If we're not in plain mode, attach the private key path.
95
+ command_options += ["-i", options[:private_key_path].to_s] if !plain_mode
96
+
97
+ if ssh_info[:forward_x11]
98
+ # Both are required so that no warnings are shown regarding X11
99
+ command_options += [
100
+ "-o", "ForwardX11=yes",
101
+ "-o", "ForwardX11Trusted=yes"]
102
+ end
103
+
104
+ # Configurables -- extra_args should always be last due to the way the
105
+ # ssh args parser works. e.g. if the user wants to use the -t option,
106
+ # any shell command(s) she'd like to run on the remote server would
107
+ # have to be the last part of the 'ssh' command:
108
+ #
109
+ # $ ssh localhost -t -p 2222 "cd mydirectory; bash"
110
+ #
111
+ # Without having extra_args be last, the user loses this ability
112
+ command_options += ["-o", "ForwardAgent=yes"] if ssh_info[:forward_agent]
113
+ command_options.concat(opts[:extra_args]) if opts[:extra_args]
114
+
115
+ # Build up the host string for connecting
116
+ host_string = options[:host]
117
+ host_string = "#{options[:username]}@#{host_string}" if !plain_mode
118
+ command_options.unshift(host_string)
119
+
120
+ # Invoke SSH with all our options
121
+ LOGGER.info("Invoking SSH: #{command_options.inspect}")
122
+ SafeExec.exec("ssh", *command_options)
123
+ end
124
+ end
125
+ end
126
+ end