vagrant-fixed-ssh 1.0.7

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 (413) hide show
  1. data/.gitignore +46 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +723 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +22 -0
  6. data/README.md +121 -0
  7. data/Rakefile +18 -0
  8. data/bin/vagrant +60 -0
  9. data/config/default.rb +30 -0
  10. data/contrib/README.md +12 -0
  11. data/contrib/emacs/vagrant.el +8 -0
  12. data/contrib/vim/vagrantfile.vim +9 -0
  13. data/keys/README.md +17 -0
  14. data/keys/vagrant +27 -0
  15. data/keys/vagrant.pub +1 -0
  16. data/lib/vagrant.rb +197 -0
  17. data/lib/vagrant/action.rb +63 -0
  18. data/lib/vagrant/action/box/destroy.rb +25 -0
  19. data/lib/vagrant/action/box/download.rb +84 -0
  20. data/lib/vagrant/action/box/package.rb +19 -0
  21. data/lib/vagrant/action/box/unpackage.rb +61 -0
  22. data/lib/vagrant/action/box/verify.rb +23 -0
  23. data/lib/vagrant/action/builder.rb +128 -0
  24. data/lib/vagrant/action/builtin.rb +171 -0
  25. data/lib/vagrant/action/env/set.rb +21 -0
  26. data/lib/vagrant/action/environment.rb +12 -0
  27. data/lib/vagrant/action/general/check_virtualbox.rb +28 -0
  28. data/lib/vagrant/action/general/package.rb +101 -0
  29. data/lib/vagrant/action/general/validate.rb +18 -0
  30. data/lib/vagrant/action/runner.rb +53 -0
  31. data/lib/vagrant/action/vm/boot.rb +53 -0
  32. data/lib/vagrant/action/vm/check_accessible.rb +23 -0
  33. data/lib/vagrant/action/vm/check_box.rb +33 -0
  34. data/lib/vagrant/action/vm/check_guest_additions.rb +38 -0
  35. data/lib/vagrant/action/vm/check_port_collisions.rb +89 -0
  36. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  37. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +18 -0
  38. data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
  39. data/lib/vagrant/action/vm/clear_shared_folders.rb +18 -0
  40. data/lib/vagrant/action/vm/customize.rb +36 -0
  41. data/lib/vagrant/action/vm/default_name.rb +22 -0
  42. data/lib/vagrant/action/vm/destroy.rb +19 -0
  43. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +20 -0
  44. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  45. data/lib/vagrant/action/vm/export.rb +57 -0
  46. data/lib/vagrant/action/vm/forward_ports.rb +92 -0
  47. data/lib/vagrant/action/vm/halt.rb +32 -0
  48. data/lib/vagrant/action/vm/host_name.rb +21 -0
  49. data/lib/vagrant/action/vm/import.rb +48 -0
  50. data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
  51. data/lib/vagrant/action/vm/network.rb +403 -0
  52. data/lib/vagrant/action/vm/nfs.rb +196 -0
  53. data/lib/vagrant/action/vm/package.rb +23 -0
  54. data/lib/vagrant/action/vm/package_vagrantfile.rb +36 -0
  55. data/lib/vagrant/action/vm/provision.rb +61 -0
  56. data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
  57. data/lib/vagrant/action/vm/prune_nfs_exports.rb +20 -0
  58. data/lib/vagrant/action/vm/resume.rb +20 -0
  59. data/lib/vagrant/action/vm/sane_defaults.rb +78 -0
  60. data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
  61. data/lib/vagrant/action/vm/share_folders.rb +114 -0
  62. data/lib/vagrant/action/vm/suspend.rb +20 -0
  63. data/lib/vagrant/action/warden.rb +92 -0
  64. data/lib/vagrant/box.rb +44 -0
  65. data/lib/vagrant/box_collection.rb +58 -0
  66. data/lib/vagrant/cli.rb +76 -0
  67. data/lib/vagrant/command.rb +24 -0
  68. data/lib/vagrant/command/base.rb +167 -0
  69. data/lib/vagrant/command/box.rb +58 -0
  70. data/lib/vagrant/command/box_add.rb +37 -0
  71. data/lib/vagrant/command/box_list.rb +28 -0
  72. data/lib/vagrant/command/box_remove.rb +27 -0
  73. data/lib/vagrant/command/box_repackage.rb +27 -0
  74. data/lib/vagrant/command/destroy.rb +64 -0
  75. data/lib/vagrant/command/gem.rb +39 -0
  76. data/lib/vagrant/command/halt.rb +39 -0
  77. data/lib/vagrant/command/init.rb +40 -0
  78. data/lib/vagrant/command/package.rb +75 -0
  79. data/lib/vagrant/command/provision.rb +40 -0
  80. data/lib/vagrant/command/reload.rb +39 -0
  81. data/lib/vagrant/command/resume.rb +33 -0
  82. data/lib/vagrant/command/ssh.rb +90 -0
  83. data/lib/vagrant/command/ssh_config.rb +51 -0
  84. data/lib/vagrant/command/start_mixins.rb +26 -0
  85. data/lib/vagrant/command/status.rb +36 -0
  86. data/lib/vagrant/command/suspend.rb +33 -0
  87. data/lib/vagrant/command/up.rb +40 -0
  88. data/lib/vagrant/communication.rb +7 -0
  89. data/lib/vagrant/communication/base.rb +56 -0
  90. data/lib/vagrant/communication/ssh.rb +230 -0
  91. data/lib/vagrant/config.rb +49 -0
  92. data/lib/vagrant/config/base.rb +82 -0
  93. data/lib/vagrant/config/container.rb +37 -0
  94. data/lib/vagrant/config/error_recorder.rb +19 -0
  95. data/lib/vagrant/config/loader.rb +127 -0
  96. data/lib/vagrant/config/nfs.rb +8 -0
  97. data/lib/vagrant/config/package.rb +7 -0
  98. data/lib/vagrant/config/ssh.rb +27 -0
  99. data/lib/vagrant/config/top.rb +72 -0
  100. data/lib/vagrant/config/vagrant.rb +14 -0
  101. data/lib/vagrant/config/vm.rb +168 -0
  102. data/lib/vagrant/config/vm/provisioner.rb +52 -0
  103. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  104. data/lib/vagrant/data_store.rb +92 -0
  105. data/lib/vagrant/downloaders.rb +7 -0
  106. data/lib/vagrant/downloaders/base.rb +25 -0
  107. data/lib/vagrant/downloaders/file.rb +22 -0
  108. data/lib/vagrant/downloaders/http.rb +97 -0
  109. data/lib/vagrant/driver.rb +8 -0
  110. data/lib/vagrant/driver/virtualbox.rb +134 -0
  111. data/lib/vagrant/driver/virtualbox_4_0.rb +459 -0
  112. data/lib/vagrant/driver/virtualbox_4_1.rb +459 -0
  113. data/lib/vagrant/driver/virtualbox_4_2.rb +606 -0
  114. data/lib/vagrant/driver/virtualbox_base.rb +326 -0
  115. data/lib/vagrant/environment.rb +522 -0
  116. data/lib/vagrant/errors.rb +445 -0
  117. data/lib/vagrant/guest.rb +18 -0
  118. data/lib/vagrant/guest/arch.rb +56 -0
  119. data/lib/vagrant/guest/base.rb +99 -0
  120. data/lib/vagrant/guest/debian.rb +64 -0
  121. data/lib/vagrant/guest/fedora.rb +66 -0
  122. data/lib/vagrant/guest/freebsd.rb +86 -0
  123. data/lib/vagrant/guest/gentoo.rb +46 -0
  124. data/lib/vagrant/guest/linux.rb +118 -0
  125. data/lib/vagrant/guest/linux/config.rb +19 -0
  126. data/lib/vagrant/guest/linux/error.rb +9 -0
  127. data/lib/vagrant/guest/openbsd.rb +20 -0
  128. data/lib/vagrant/guest/redhat.rb +67 -0
  129. data/lib/vagrant/guest/solaris.rb +118 -0
  130. data/lib/vagrant/guest/suse.rb +17 -0
  131. data/lib/vagrant/guest/ubuntu.rb +23 -0
  132. data/lib/vagrant/hosts.rb +37 -0
  133. data/lib/vagrant/hosts/arch.rb +55 -0
  134. data/lib/vagrant/hosts/base.rb +66 -0
  135. data/lib/vagrant/hosts/bsd.rb +97 -0
  136. data/lib/vagrant/hosts/fedora.rb +47 -0
  137. data/lib/vagrant/hosts/freebsd.rb +41 -0
  138. data/lib/vagrant/hosts/gentoo.rb +20 -0
  139. data/lib/vagrant/hosts/linux.rb +94 -0
  140. data/lib/vagrant/hosts/opensuse.rb +30 -0
  141. data/lib/vagrant/hosts/windows.rb +16 -0
  142. data/lib/vagrant/plugin.rb +81 -0
  143. data/lib/vagrant/provisioners.rb +12 -0
  144. data/lib/vagrant/provisioners/base.rb +44 -0
  145. data/lib/vagrant/provisioners/chef.rb +168 -0
  146. data/lib/vagrant/provisioners/chef_client.rb +132 -0
  147. data/lib/vagrant/provisioners/chef_solo.rb +234 -0
  148. data/lib/vagrant/provisioners/puppet.rb +176 -0
  149. data/lib/vagrant/provisioners/puppet_server.rb +78 -0
  150. data/lib/vagrant/provisioners/shell.rb +103 -0
  151. data/lib/vagrant/registry.rb +52 -0
  152. data/lib/vagrant/ssh.rb +126 -0
  153. data/lib/vagrant/test_helpers.rb +154 -0
  154. data/lib/vagrant/ui.rb +168 -0
  155. data/lib/vagrant/util.rb +12 -0
  156. data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
  157. data/lib/vagrant/util/busy.rb +59 -0
  158. data/lib/vagrant/util/counter.rb +24 -0
  159. data/lib/vagrant/util/file_checksum.rb +38 -0
  160. data/lib/vagrant/util/file_mode.rb +12 -0
  161. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  162. data/lib/vagrant/util/is_port_open.rb +38 -0
  163. data/lib/vagrant/util/line_ending_helpers.rb +14 -0
  164. data/lib/vagrant/util/network_ip.rb +28 -0
  165. data/lib/vagrant/util/platform.rb +68 -0
  166. data/lib/vagrant/util/retryable.rb +25 -0
  167. data/lib/vagrant/util/safe_exec.rb +36 -0
  168. data/lib/vagrant/util/safe_puts.rb +31 -0
  169. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  170. data/lib/vagrant/util/subprocess.rb +247 -0
  171. data/lib/vagrant/util/template_renderer.rb +83 -0
  172. data/lib/vagrant/version.rb +6 -0
  173. data/lib/vagrant/vm.rb +195 -0
  174. data/tasks/acceptance.rake +113 -0
  175. data/tasks/bundler.rake +3 -0
  176. data/tasks/test.rake +20 -0
  177. data/templates/commands/init/Vagrantfile.erb +99 -0
  178. data/templates/commands/ssh_config/config.erb +15 -0
  179. data/templates/config/validation_failed.erb +7 -0
  180. data/templates/guests/arch/network_dhcp.erb +7 -0
  181. data/templates/guests/arch/network_static.erb +7 -0
  182. data/templates/guests/debian/network_dhcp.erb +6 -0
  183. data/templates/guests/debian/network_static.erb +7 -0
  184. data/templates/guests/fedora/network_dhcp.erb +6 -0
  185. data/templates/guests/fedora/network_static.erb +13 -0
  186. data/templates/guests/freebsd/network_dhcp.erb +3 -0
  187. data/templates/guests/freebsd/network_static.erb +3 -0
  188. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  189. data/templates/guests/gentoo/network_static.erb +4 -0
  190. data/templates/guests/redhat/network_dhcp.erb +6 -0
  191. data/templates/guests/redhat/network_static.erb +7 -0
  192. data/templates/locales/en.yml +759 -0
  193. data/templates/nfs/exports.erb +5 -0
  194. data/templates/nfs/exports_freebsd.erb +5 -0
  195. data/templates/nfs/exports_linux.erb +5 -0
  196. data/templates/package_Vagrantfile.erb +11 -0
  197. data/templates/provisioners/chef_client/client.erb +32 -0
  198. data/templates/provisioners/chef_solo/solo.erb +25 -0
  199. data/test/acceptance/base.rb +48 -0
  200. data/test/acceptance/box_test.rb +99 -0
  201. data/test/acceptance/destroy_test.rb +37 -0
  202. data/test/acceptance/halt_test.rb +72 -0
  203. data/test/acceptance/init_test.rb +33 -0
  204. data/test/acceptance/networking/host_only_test.rb +37 -0
  205. data/test/acceptance/networking/port_forward_test.rb +125 -0
  206. data/test/acceptance/package_test.rb +46 -0
  207. data/test/acceptance/provisioning/basic_test.rb +61 -0
  208. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  209. data/test/acceptance/provisioning/shell_test.rb +53 -0
  210. data/test/acceptance/resume_test.rb +17 -0
  211. data/test/acceptance/shared_folders_test.rb +84 -0
  212. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  213. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  214. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  215. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  216. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  217. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  218. data/test/acceptance/ssh_test.rb +46 -0
  219. data/test/acceptance/support/config.rb +42 -0
  220. data/test/acceptance/support/isolated_environment.rb +117 -0
  221. data/test/acceptance/support/matchers/have_color.rb +9 -0
  222. data/test/acceptance/support/matchers/match_output.rb +14 -0
  223. data/test/acceptance/support/matchers/succeed.rb +14 -0
  224. data/test/acceptance/support/network_tests.rb +29 -0
  225. data/test/acceptance/support/output.rb +95 -0
  226. data/test/acceptance/support/shared/base_context.rb +72 -0
  227. data/test/acceptance/support/shared/command_examples.rb +33 -0
  228. data/test/acceptance/support/virtualbox.rb +36 -0
  229. data/test/acceptance/suspend_test.rb +56 -0
  230. data/test/acceptance/up_basic_test.rb +33 -0
  231. data/test/acceptance/up_with_box_url.rb +40 -0
  232. data/test/acceptance/vagrant_test.rb +47 -0
  233. data/test/acceptance/version_test.rb +15 -0
  234. data/test/buildbot/README.md +72 -0
  235. data/test/buildbot/buildbot_config/__init__.py +0 -0
  236. data/test/buildbot/buildbot_config/config/__init__.py +0 -0
  237. data/test/buildbot/buildbot_config/config/loader.py +24 -0
  238. data/test/buildbot/buildbot_config/config/master.py +24 -0
  239. data/test/buildbot/buildbot_config/config/slave.py +22 -0
  240. data/test/buildbot/buildbot_config/master/__init__.py +6 -0
  241. data/test/buildbot/buildbot_config/master/builders.py +78 -0
  242. data/test/buildbot/buildbot_config/master/buildsteps.py +100 -0
  243. data/test/buildbot/buildbot_config/master/change_sources.py +8 -0
  244. data/test/buildbot/buildbot_config/master/schedulers.py +32 -0
  245. data/test/buildbot/buildbot_config/master/slaves.py +60 -0
  246. data/test/buildbot/buildbot_config/master/status.py +52 -0
  247. data/test/buildbot/master/Makefile.sample +28 -0
  248. data/test/buildbot/master/buildbot.tac +36 -0
  249. data/test/buildbot/master/master.cfg +67 -0
  250. data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
  251. data/test/buildbot/master/public_html/default.css +545 -0
  252. data/test/buildbot/master/public_html/favicon.ico +0 -0
  253. data/test/buildbot/master/public_html/robots.txt +10 -0
  254. data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +356 -0
  255. data/test/buildbot/master/public_html/static/css/prettify.css +97 -0
  256. data/test/buildbot/master/public_html/static/css/syntax.css +60 -0
  257. data/test/buildbot/master/public_html/static/css/vagrant.base.css +205 -0
  258. data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
  259. data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
  260. data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
  261. data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
  262. data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
  263. data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
  264. data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
  265. data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
  266. data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
  267. data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
  268. data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
  269. data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
  270. data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
  271. data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
  272. data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +80 -0
  273. data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +4 -0
  274. data/test/buildbot/master/templates/authfail.html +9 -0
  275. data/test/buildbot/master/templates/build.html +205 -0
  276. data/test/buildbot/master/templates/builder.html +118 -0
  277. data/test/buildbot/master/templates/builders.html +33 -0
  278. data/test/buildbot/master/templates/buildslave.html +72 -0
  279. data/test/buildbot/master/templates/buildslaves.html +70 -0
  280. data/test/buildbot/master/templates/change.html +15 -0
  281. data/test/buildbot/master/templates/layouts/base.html +58 -0
  282. data/test/buildbot/master/templates/macros/box.html +37 -0
  283. data/test/buildbot/master/templates/macros/build_line.html +50 -0
  284. data/test/buildbot/master/templates/macros/change.html +81 -0
  285. data/test/buildbot/master/templates/macros/forms.html +300 -0
  286. data/test/buildbot/master/templates/root.html +42 -0
  287. data/test/buildbot/master/templates/waterfall.html +53 -0
  288. data/test/buildbot/requirements.txt +4 -0
  289. data/test/buildbot/scripts/deploy.sh +38 -0
  290. data/test/buildbot/scripts/setup.sh +107 -0
  291. data/test/buildbot/slave/buildbot.tac +43 -0
  292. data/test/buildbot/slave/info/admin +1 -0
  293. data/test/buildbot/slave/info/host +1 -0
  294. data/test/buildbot/tests/__init__.py +0 -0
  295. data/test/buildbot/tests/master/__init__.py +0 -0
  296. data/test/buildbot/tests/master/test_slaves.py +41 -0
  297. data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
  298. data/test/config/acceptance_boxes.yml +7 -0
  299. data/test/support/isolated_environment.rb +46 -0
  300. data/test/support/tempdir.rb +34 -0
  301. data/test/unit/base.rb +21 -0
  302. data/test/unit/support/isolated_environment.rb +47 -0
  303. data/test/unit/support/shared/base_context.rb +30 -0
  304. data/test/unit/vagrant/action/builder_test.rb +156 -0
  305. data/test/unit/vagrant/action/environment_test.rb +16 -0
  306. data/test/unit/vagrant/action/runner_test.rb +65 -0
  307. data/test/unit/vagrant/action/warden_test.rb +92 -0
  308. data/test/unit/vagrant/box_collection_test.rb +56 -0
  309. data/test/unit/vagrant/box_test.rb +34 -0
  310. data/test/unit/vagrant/command/base_test.rb +150 -0
  311. data/test/unit/vagrant/config/base_test.rb +48 -0
  312. data/test/unit/vagrant/config/loader_test.rb +79 -0
  313. data/test/unit/vagrant/config/ssh_test.rb +17 -0
  314. data/test/unit/vagrant/config/top_test.rb +69 -0
  315. data/test/unit/vagrant/config/vm_test.rb +71 -0
  316. data/test/unit/vagrant/config_test.rb +27 -0
  317. data/test/unit/vagrant/data_store_test.rb +79 -0
  318. data/test/unit/vagrant/downloaders/base_test.rb +18 -0
  319. data/test/unit/vagrant/downloaders/file_test.rb +75 -0
  320. data/test/unit/vagrant/downloaders/http_test.rb +19 -0
  321. data/test/unit/vagrant/environment_test.rb +220 -0
  322. data/test/unit/vagrant/hosts_test.rb +36 -0
  323. data/test/unit/vagrant/registry_test.rb +74 -0
  324. data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
  325. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  326. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
  327. data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
  328. data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
  329. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  330. data/test/unit/vagrant/util/retryable_test.rb +106 -0
  331. data/test/unit/vagrant_test.rb +27 -0
  332. data/test/unit_legacy/locales/en.yml +8 -0
  333. data/test/unit_legacy/test_helper.rb +32 -0
  334. data/test/unit_legacy/vagrant/action/box/destroy_test.rb +18 -0
  335. data/test/unit_legacy/vagrant/action/box/download_test.rb +125 -0
  336. data/test/unit_legacy/vagrant/action/box/package_test.rb +25 -0
  337. data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +84 -0
  338. data/test/unit_legacy/vagrant/action/box/verify_test.rb +30 -0
  339. data/test/unit_legacy/vagrant/action/env/set_test.rb +24 -0
  340. data/test/unit_legacy/vagrant/action/general/package_test.rb +268 -0
  341. data/test/unit_legacy/vagrant/action/general/validate_test.rb +31 -0
  342. data/test/unit_legacy/vagrant/action/vm/boot_test.rb +66 -0
  343. data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +61 -0
  344. data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +61 -0
  345. data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  346. data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  347. data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
  348. data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  349. data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
  350. data/test/unit_legacy/vagrant/action/vm/customize_test.rb +37 -0
  351. data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +25 -0
  352. data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  353. data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +45 -0
  354. data/test/unit_legacy/vagrant/action/vm/export_test.rb +107 -0
  355. data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
  356. data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +197 -0
  357. data/test/unit_legacy/vagrant/action/vm/halt_test.rb +79 -0
  358. data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +36 -0
  359. data/test/unit_legacy/vagrant/action/vm/import_test.rb +66 -0
  360. data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +40 -0
  361. data/test/unit_legacy/vagrant/action/vm/modify_test.rb +38 -0
  362. data/test/unit_legacy/vagrant/action/vm/network_test.rb +286 -0
  363. data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  364. data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +260 -0
  365. data/test/unit_legacy/vagrant/action/vm/package_test.rb +25 -0
  366. data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  367. data/test/unit_legacy/vagrant/action/vm/provision_test.rb +65 -0
  368. data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
  369. data/test/unit_legacy/vagrant/action/vm/resume_test.rb +35 -0
  370. data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +144 -0
  371. data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +35 -0
  372. data/test/unit_legacy/vagrant/action_test.rb +89 -0
  373. data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
  374. data/test/unit_legacy/vagrant/box_test.rb +74 -0
  375. data/test/unit_legacy/vagrant/cli_test.rb +35 -0
  376. data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
  377. data/test/unit_legacy/vagrant/command/group_base_test.rb +15 -0
  378. data/test/unit_legacy/vagrant/command/helpers_test.rb +88 -0
  379. data/test/unit_legacy/vagrant/command/init_test.rb +10 -0
  380. data/test/unit_legacy/vagrant/command/package_test.rb +27 -0
  381. data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
  382. data/test/unit_legacy/vagrant/config/error_recorder_test.rb +18 -0
  383. data/test/unit_legacy/vagrant/config/ssh_test.rb +12 -0
  384. data/test/unit_legacy/vagrant/config/vagrant_test.rb +35 -0
  385. data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +92 -0
  386. data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
  387. data/test/unit_legacy/vagrant/config_test.rb +148 -0
  388. data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
  389. data/test/unit_legacy/vagrant/environment_test.rb +539 -0
  390. data/test/unit_legacy/vagrant/errors_test.rb +42 -0
  391. data/test/unit_legacy/vagrant/hosts/base_test.rb +46 -0
  392. data/test/unit_legacy/vagrant/hosts/bsd_test.rb +53 -0
  393. data/test/unit_legacy/vagrant/hosts/linux_test.rb +54 -0
  394. data/test/unit_legacy/vagrant/plugin_test.rb +9 -0
  395. data/test/unit_legacy/vagrant/provisioners/base_test.rb +63 -0
  396. data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +190 -0
  397. data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +115 -0
  398. data/test/unit_legacy/vagrant/provisioners/chef_test.rb +209 -0
  399. data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +68 -0
  400. data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +182 -0
  401. data/test/unit_legacy/vagrant/provisioners/shell_test.rb +79 -0
  402. data/test/unit_legacy/vagrant/ssh/session_test.rb +40 -0
  403. data/test/unit_legacy/vagrant/ssh_test.rb +304 -0
  404. data/test/unit_legacy/vagrant/systems/base_test.rb +18 -0
  405. data/test/unit_legacy/vagrant/systems/linux_test.rb +104 -0
  406. data/test/unit_legacy/vagrant/util/busy_test.rb +106 -0
  407. data/test/unit_legacy/vagrant/util/counter_test.rb +29 -0
  408. data/test/unit_legacy/vagrant/util/platform_test.rb +18 -0
  409. data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +43 -0
  410. data/test/unit_legacy/vagrant/util/template_renderer_test.rb +145 -0
  411. data/test/unit_legacy/vagrant/vm_test.rb +300 -0
  412. data/vagrant-fixed-ssh.gemspec +70 -0
  413. metadata +712 -0
@@ -0,0 +1,54 @@
1
+ require 'pathname'
2
+
3
+ module Vagrant
4
+ module Action
5
+ module VM
6
+ # Sets up the mapping of files to copy into the package and verifies
7
+ # that the files can be properly copied.
8
+ class SetupPackageFiles
9
+ def initialize(app, env)
10
+ @app = app
11
+
12
+ env["package.include"] ||= []
13
+ env["package.vagrantfile"] ||= nil
14
+ end
15
+
16
+ def call(env)
17
+ files = {}
18
+ env["package.include"].each do |file|
19
+ source = Pathname.new(file)
20
+ dest = nil
21
+
22
+ # If the source is relative then we add the file as-is to the include
23
+ # directory. Otherwise, we copy only the file into the root of the
24
+ # include directory. Kind of strange, but seems to match what people
25
+ # expect based on history.
26
+ if source.relative?
27
+ dest = source
28
+ else
29
+ dest = source.basename
30
+ end
31
+
32
+ # Assign the mapping
33
+ files[file] = dest
34
+ end
35
+
36
+ if env["package.vagrantfile"]
37
+ # Vagrantfiles are treated special and mapped to a specific file
38
+ files[env["package.vagrantfile"]] = "_Vagrantfile"
39
+ end
40
+
41
+ # Verify the mapping
42
+ files.each do |from, _|
43
+ raise Errors::PackageIncludeMissing, :file => from if !File.exist?(from)
44
+ end
45
+
46
+ # Save the mapping
47
+ env["package.files"] = files
48
+
49
+ @app.call(env)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,114 @@
1
+ require 'pathname'
2
+
3
+ require 'log4r'
4
+
5
+ module Vagrant
6
+ module Action
7
+ module VM
8
+ class ShareFolders
9
+ def initialize(app, env)
10
+ @logger = Log4r::Logger.new("vagrant::action::vm::share_folders")
11
+ @app = app
12
+ end
13
+
14
+ def call(env)
15
+ @env = env
16
+
17
+ prepare_folders
18
+ create_metadata
19
+
20
+ @app.call(env)
21
+
22
+ mount_shared_folders
23
+ end
24
+
25
+ # This method returns an actual list of VirtualBox shared
26
+ # folders to create and their proper path.
27
+ def shared_folders
28
+ @env[:vm].config.vm.shared_folders.inject({}) do |acc, data|
29
+ key, value = data
30
+
31
+ next acc if value[:disabled]
32
+
33
+ # This to prevent overwriting the actual shared folders data
34
+ value = value.dup
35
+ acc[key] = value
36
+ acc
37
+ end
38
+ end
39
+
40
+ # Prepares the shared folders by verifying they exist and creating them
41
+ # if they don't.
42
+ def prepare_folders
43
+ shared_folders.each do |name, options|
44
+ hostpath = Pathname.new(options[:hostpath]).expand_path(@env[:root_path])
45
+
46
+ if !hostpath.directory? && options[:create]
47
+ # Host path doesn't exist, so let's create it.
48
+ @logger.debug("Host path doesn't exist, creating: #{hostpath}")
49
+
50
+ begin
51
+ hostpath.mkpath
52
+ rescue Errno::EACCES
53
+ raise Errors::SharedFolderCreateFailed, :path => hostpath.to_s
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ def create_metadata
60
+ @env[:ui].info I18n.t("vagrant.actions.vm.share_folders.creating")
61
+
62
+ folders = []
63
+ shared_folders.each do |name, data|
64
+ folders << {
65
+ :name => name,
66
+ :hostpath => File.expand_path(data[:hostpath], @env[:root_path]),
67
+ :transient => data[:transient]
68
+ }
69
+ end
70
+
71
+ @env[:vm].driver.share_folders(folders)
72
+ end
73
+
74
+ def mount_shared_folders
75
+ @env[:ui].info I18n.t("vagrant.actions.vm.share_folders.mounting")
76
+
77
+ # short guestpaths first, so we don't step on ourselves
78
+ folders = shared_folders.sort_by do |name, data|
79
+ if data[:guestpath]
80
+ data[:guestpath].length
81
+ else
82
+ # A long enough path to just do this at the end.
83
+ 10000
84
+ end
85
+ end
86
+
87
+ # Go through each folder and mount
88
+ folders.each do |name, data|
89
+ if data[:guestpath]
90
+ # Guest path specified, so mount the folder to specified point
91
+ @env[:ui].info(I18n.t("vagrant.actions.vm.share_folders.mounting_entry",
92
+ :name => name,
93
+ :guest_path => data[:guestpath]))
94
+
95
+ # Dup the data so we can pass it to the guest API
96
+ data = data.dup
97
+
98
+ # Calculate the owner and group
99
+ data[:owner] ||= @env[:vm].config.ssh.username
100
+ data[:group] ||= @env[:vm].config.ssh.username
101
+
102
+ # Mount the actual folder
103
+ @env[:vm].guest.mount_shared_folder(name, data[:guestpath], data)
104
+ else
105
+ # If no guest path is specified, then automounting is disabled
106
+ @env[:ui].info(I18n.t("vagrant.actions.vm.share_folders.nomount_entry",
107
+ :name => name))
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,20 @@
1
+ module Vagrant
2
+ module Action
3
+ module VM
4
+ class Suspend
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ if env[:vm].state == :running
11
+ env[:ui].info I18n.t("vagrant.actions.vm.suspend.suspending")
12
+ env[:vm].driver.suspend
13
+ end
14
+
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,92 @@
1
+ require "log4r"
2
+
3
+ module Vagrant
4
+ module Action
5
+ # The action warden is a middleware which injects itself between
6
+ # every other middleware, watching for exceptions which are raised
7
+ # and performing proper cleanup on every action by calling the `recover`
8
+ # method. The warden therefore allows middlewares to not worry about
9
+ # exceptional events, and by providing a simple callback, can clean up
10
+ # in any erroneous case.
11
+ #
12
+ # Warden will "just work" behind the scenes, and is not of particular
13
+ # interest except to those who are curious about the internal workings
14
+ # of Vagrant.
15
+ class Warden
16
+ attr_accessor :actions, :stack
17
+
18
+ def initialize(actions, env)
19
+ @stack = []
20
+ @actions = actions.map { |m| finalize_action(m, env) }
21
+ @logger = Log4r::Logger.new("vagrant::action::warden")
22
+ end
23
+
24
+ def call(env)
25
+ return if @actions.empty?
26
+
27
+ begin
28
+ # Call the next middleware in the sequence, appending to the stack
29
+ # of "recoverable" middlewares in case something goes wrong!
30
+ raise Errors::VagrantInterrupt if env[:interrupted]
31
+ action = @actions.shift
32
+ @logger.info("Calling action: #{action}")
33
+ @stack.unshift(action).first.call(env)
34
+ raise Errors::VagrantInterrupt if env[:interrupted]
35
+ rescue SystemExit
36
+ # This means that an "exit" or "abort" was called. In these cases,
37
+ # we just exit immediately.
38
+ raise
39
+ rescue Exception => e
40
+ @logger.error("Error occurred: #{e}")
41
+ env["vagrant.error"] = e
42
+
43
+ # Something went horribly wrong. Start the rescue chain then
44
+ # reraise the exception to properly kick us out of limbo here.
45
+ begin_rescue(env)
46
+ raise
47
+ end
48
+ end
49
+
50
+ # Begins the recovery sequence for all middlewares which have run.
51
+ # It does this by calling `recover` (if it exists) on each middleware
52
+ # which has already run, in reverse order.
53
+ def begin_rescue(env)
54
+ @stack.each do |act|
55
+ if act.respond_to?(:recover)
56
+ @logger.info("Calling recover: #{act}")
57
+ act.recover(env)
58
+ end
59
+ end
60
+
61
+ # Clear stack so that warden down the middleware chain doesn't
62
+ # rescue again.
63
+ @stack.clear
64
+ end
65
+
66
+ # A somewhat confusing function which simply initializes each
67
+ # middleware properly to call the next middleware in the sequence.
68
+ def finalize_action(action, env)
69
+ klass, args, block = action
70
+
71
+ # Default the arguments to an empty array. Otherwise in Ruby 1.8
72
+ # a `nil` args will actually pass `nil` into the class.
73
+ args ||= []
74
+
75
+ if klass.is_a?(Class)
76
+ # A action klass which is to be instantiated with the
77
+ # app, env, and any arguments given
78
+ klass.new(self, env, *args, &block)
79
+ elsif klass.respond_to?(:call)
80
+ # Make it a lambda which calls the item then forwards
81
+ # up the chain
82
+ lambda do |e|
83
+ klass.call(e)
84
+ self.call(e)
85
+ end
86
+ else
87
+ raise "Invalid action: #{action.inspect}"
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,44 @@
1
+ module Vagrant
2
+ # Represents a "box," which is simply a packaged vagrant environment.
3
+ # Boxes are simply `tar` files which contain an exported VirtualBox
4
+ # virtual machine, at the least. They are created with `vagrant package`
5
+ # and may contain additional files if specified by the creator. This
6
+ # class serves to help manage these boxes, although most of the logic
7
+ # is kicked out to middlewares.
8
+ class Box
9
+ # The name of the box.
10
+ attr_reader :name
11
+
12
+ # The directory where this box is stored
13
+ attr_reader :directory
14
+
15
+ # Creates a new box instance. Given an optional `name` parameter,
16
+ # newly created instance will have that name, otherwise it defaults
17
+ # to `nil`.
18
+ #
19
+ # **Note:** This method does not actually _create_ the box, but merely
20
+ # returns a new, abstract representation of it. To add a box, see {#add}.
21
+ def initialize(name, directory, action_runner)
22
+ @name = name
23
+ @directory = directory
24
+ @action_runner = action_runner
25
+ end
26
+
27
+ # Begins the process of destroying this box. This cannot be undone!
28
+ def destroy
29
+ @action_runner.run(:box_remove, { :box_name => @name, :box_directory => @directory })
30
+ end
31
+
32
+ # Begins sequence to repackage this box.
33
+ def repackage(options=nil)
34
+ @action_runner.run(:box_repackage, { :box_name => @name, :box_directory => @directory })
35
+ end
36
+
37
+ # Implemented for comparison with other boxes. Comparison is implemented
38
+ # by simply comparing name.
39
+ def <=>(other)
40
+ return super if !other.is_a?(self.class)
41
+ name <=> other.name
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,58 @@
1
+ require 'forwardable'
2
+
3
+ module Vagrant
4
+ # Represents a collection of boxes, providing helpful methods for
5
+ # finding boxes.
6
+ class BoxCollection
7
+ include Enumerable
8
+ extend Forwardable
9
+ def_delegators :@boxes, :length, :each
10
+
11
+ # The directory that the boxes are being searched for.
12
+ attr_reader :directory
13
+
14
+ # Initializes the class to search for boxes in the given directory.
15
+ def initialize(directory, action_runner)
16
+ @directory = directory
17
+ @boxes = []
18
+ @action_runner = action_runner
19
+
20
+ reload!
21
+ end
22
+
23
+ # Find a box in the collection by the given name. The name must
24
+ # be a string, for now.
25
+ def find(name)
26
+ @boxes.each do |box|
27
+ return box if box.name == name
28
+ end
29
+
30
+ nil
31
+ end
32
+
33
+ # Adds a box to this collection with the given name and located
34
+ # at the given URL.
35
+ def add(name, url)
36
+ raise Errors::BoxAlreadyExists, :name => name if find(name)
37
+
38
+ @action_runner.run(:box_add,
39
+ :box_name => name,
40
+ :box_url => url,
41
+ :box_directory => @directory.join(name))
42
+ end
43
+
44
+ # Loads the list of all boxes from the source. This modifies the
45
+ # current array.
46
+ def reload!
47
+ @boxes.clear
48
+
49
+ Dir.open(@directory) do |dir|
50
+ dir.each do |d|
51
+ next if d == "." || d == ".." || !@directory.join(d).directory?
52
+ @boxes << Box.new(d, @directory.join(d), @action_runner)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+
@@ -0,0 +1,76 @@
1
+ require 'log4r'
2
+ require 'optparse'
3
+
4
+ module Vagrant
5
+ # Manages the command line interface to Vagrant.
6
+ class CLI < Command::Base
7
+ def initialize(argv, env)
8
+ super
9
+
10
+ @logger = Log4r::Logger.new("vagrant::cli")
11
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
12
+
13
+ @logger.info("CLI: #{@main_args.inspect} #{@sub_command.inspect} #{@sub_args.inspect}")
14
+ end
15
+
16
+ def execute
17
+ if @main_args.include?("-v") || @main_args.include?("--version")
18
+ # Version short-circuits the whole thing. Just print
19
+ # the version and exit.
20
+ @env.ui.info(I18n.t("vagrant.commands.version.output",
21
+ :version => Vagrant::VERSION),
22
+ :prefix => false)
23
+
24
+ return 0
25
+ elsif @main_args.include?("-h") || @main_args.include?("--help")
26
+ # Help is next in short-circuiting everything. Print
27
+ # the help and exit.
28
+ help
29
+ return 0
30
+ end
31
+
32
+ # If we reached this far then we must have a subcommand. If not,
33
+ # then we also just print the help and exit.
34
+ command_class = Vagrant.commands.get(@sub_command.to_sym) if @sub_command
35
+ if !command_class || !@sub_command
36
+ help
37
+ return 0
38
+ end
39
+ @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
40
+
41
+ # Initialize and execute the command class, returning the exit status.
42
+ result = command_class.new(@sub_args, @env).execute
43
+ result = 0 if !result.is_a?(Fixnum)
44
+ return result
45
+ end
46
+
47
+ # This prints out the help for the CLI.
48
+ def help
49
+ # We use the optionparser for this. Its just easier. We don't use
50
+ # an optionparser above because I don't think the performance hits
51
+ # of creating a whole object are worth checking only a couple flags.
52
+ opts = OptionParser.new do |opts|
53
+ opts.banner = "Usage: vagrant [-v] [-h] command [<args>]"
54
+ opts.separator ""
55
+ opts.on("-v", "--version", "Print the version and exit.")
56
+ opts.on("-h", "--help", "Print this help.")
57
+ opts.separator ""
58
+ opts.separator "Available subcommands:"
59
+
60
+ # Add the available subcommands as separators in order to print them
61
+ # out as well.
62
+ keys = []
63
+ Vagrant.commands.each { |key, value| keys << key.to_s }
64
+
65
+ keys.sort.each do |key|
66
+ opts.separator " #{key}"
67
+ end
68
+
69
+ opts.separator ""
70
+ opts.separator "For help on any individual command run `vagrant COMMAND -h`"
71
+ end
72
+
73
+ @env.ui.info(opts.help, :prefix => false)
74
+ end
75
+ end
76
+ end