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,196 @@
1
+ require 'digest/md5'
2
+ require 'fileutils'
3
+ require 'pathname'
4
+
5
+ require 'log4r'
6
+
7
+ module Vagrant
8
+ module Action
9
+ module VM
10
+ # Enables NFS based shared folders. `nfsd` must already be installed
11
+ # on the host machine, and NFS client must already be installed on
12
+ # the guest machine.
13
+ #
14
+ # This is a two part process:
15
+ #
16
+ # 1. Adds an entry to `/etc/exports` on the host machine using
17
+ # the host class to export the proper folder to the proper
18
+ # machine.
19
+ # 2. After boot, runs `mount` on the guest to mount the shared
20
+ # folder.
21
+ #
22
+ class NFS
23
+ def initialize(app,env)
24
+ @logger = Log4r::Logger.new("vagrant::action::vm::nfs")
25
+ @app = app
26
+ @env = env
27
+
28
+ verify_settings if nfs_enabled?
29
+ end
30
+
31
+ def call(env)
32
+ @env = env
33
+
34
+ extract_folders
35
+
36
+ if !folders.empty?
37
+ prepare_folders
38
+ export_folders
39
+ end
40
+
41
+ @app.call(env)
42
+
43
+ mount_folders if !folders.empty?
44
+ end
45
+
46
+ # Returns the folders which are to be synced via NFS.
47
+ def folders
48
+ @folders ||= {}
49
+ end
50
+
51
+ # Removes the NFS enabled shared folders from the configuration,
52
+ # so they will no longer be mounted by the actual shared folder
53
+ # task.
54
+ def extract_folders
55
+ # Load the NFS enabled shared folders
56
+ @folders = {}
57
+ @env[:vm].config.vm.shared_folders.each do |key, opts|
58
+ if opts[:nfs]
59
+ # Duplicate the options, set the hostpath, and set disabled on the original
60
+ # options so the ShareFolders middleware doesn't try to mount it.
61
+ folder = opts.dup
62
+ hostpath = Pathname.new(opts[:hostpath]).expand_path(@env[:root_path])
63
+
64
+ if !hostpath.directory? && opts[:create]
65
+ # Host path doesn't exist, so let's create it.
66
+ @logger.debug("Host path doesn't exist, creating: #{hostpath}")
67
+
68
+ begin
69
+ FileUtils.mkpath(hostpath)
70
+ rescue Errno::EACCES
71
+ raise Errors::SharedFolderCreateFailed, :path => hostpath.to_s
72
+ end
73
+ end
74
+
75
+ # Set the hostpath now that it exists.
76
+ folder[:hostpath] = hostpath.to_s
77
+
78
+ # Assign the folder to our instance variable for later use
79
+ @folders[key] = folder
80
+
81
+ # Disable the folder so that regular shared folders don't try to
82
+ # mount it.
83
+ opts[:disabled] = true
84
+ end
85
+ end
86
+ end
87
+
88
+ # Prepares the settings for the NFS folders, such as setting the
89
+ # options on the NFS folders.
90
+ def prepare_folders
91
+ @folders = @folders.inject({}) do |acc, data|
92
+ key, opts = data
93
+ opts[:map_uid] = prepare_permission(:uid, opts)
94
+ opts[:map_gid] = prepare_permission(:gid, opts)
95
+ opts[:nfs_version] ||= 3
96
+
97
+ # The poor man's UUID. An MD5 hash here is sufficient since
98
+ # we need a 32 character "uuid" to represent the filesystem
99
+ # of an export. Hashing the host path is safe because two of
100
+ # the same host path will hash to the same fsid.
101
+ opts[:uuid] = Digest::MD5.hexdigest(opts[:hostpath])
102
+
103
+ acc[key] = opts
104
+ acc
105
+ end
106
+ end
107
+
108
+ # Prepares the UID/GID settings for a single folder.
109
+ def prepare_permission(perm, opts)
110
+ key = "map_#{perm}".to_sym
111
+ return nil if opts.has_key?(key) && opts[key].nil?
112
+
113
+ # The options on the hash get priority, then the default
114
+ # values
115
+ value = opts.has_key?(key) ? opts[key] : @env[:vm].config.nfs.send(key)
116
+ return value if value != :auto
117
+
118
+ # Get UID/GID from folder if we've made it this far
119
+ # (value == :auto)
120
+ stat = File.stat(opts[:hostpath])
121
+ return stat.send(perm)
122
+ end
123
+
124
+ # Uses the host class to export the folders via NFS. This typically
125
+ # involves adding a line to `/etc/exports` for this VM, but it is
126
+ # up to the host class to define the specific behavior.
127
+ def export_folders
128
+ @env[:ui].info I18n.t("vagrant.actions.vm.nfs.exporting")
129
+ @env[:host].nfs_export(@env[:vm].uuid, guest_ip, folders)
130
+ end
131
+
132
+ # Uses the system class to mount the NFS folders.
133
+ def mount_folders
134
+ @env[:ui].info I18n.t("vagrant.actions.vm.nfs.mounting")
135
+
136
+ # Only mount the folders which have a guest path specified
137
+ mount_folders = {}
138
+ folders.each do |name, opts|
139
+ if opts[:guestpath]
140
+ mount_folders[name] = opts.dup
141
+ end
142
+ end
143
+
144
+ @env[:vm].guest.mount_nfs(host_ip, mount_folders)
145
+ end
146
+
147
+ # Returns the IP address of the first host only network adapter
148
+ #
149
+ # @return [String]
150
+ def host_ip
151
+ @env[:vm].driver.read_network_interfaces.each do |adapter, opts|
152
+ if opts[:type] == :hostonly
153
+ @env[:vm].driver.read_host_only_interfaces.each do |interface|
154
+ if interface[:name] == opts[:hostonly]
155
+ return interface[:ip]
156
+ end
157
+ end
158
+ end
159
+ end
160
+
161
+ nil
162
+ end
163
+
164
+ # Returns the IP address of the guest by looking at the first
165
+ # enabled host only network.
166
+ #
167
+ # @return [String]
168
+ def guest_ip
169
+ @env[:vm].config.vm.networks.each do |type, args|
170
+ if type == :hostonly && args[0].is_a?(String)
171
+ return args[0]
172
+ end
173
+ end
174
+
175
+ nil
176
+ end
177
+
178
+ # Checks if there are any NFS enabled shared folders.
179
+ def nfs_enabled?
180
+ @env[:vm].config.vm.shared_folders.each do |key, opts|
181
+ return true if opts[:nfs]
182
+ end
183
+
184
+ false
185
+ end
186
+
187
+ # Verifies that the host is set and supports NFS.
188
+ def verify_settings
189
+ raise Errors::NFSHostRequired if @env[:host].nil?
190
+ raise Errors::NFSNotSupported if !@env[:host].nfs?
191
+ raise Errors::NFSNoHostNetwork if !guest_ip
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
@@ -0,0 +1,23 @@
1
+ require 'vagrant/action/general/package'
2
+
3
+ module Vagrant
4
+ module Action
5
+ module VM
6
+ # A subclass of {General::Package} which simply makes sure that
7
+ # the package directory is set to the directory which the VM
8
+ # was exported to.
9
+ class Package < General::Package
10
+ # Doing this so that we can test that the parent is properly
11
+ # called in the unit tests.
12
+ alias_method :general_call, :call
13
+ def call(env)
14
+ # Just match up a couple environmental variables so that
15
+ # the superclass will do the right thing. Then, call the
16
+ # superclass
17
+ env["package.directory"] = env["export.temp_dir"]
18
+ general_call(env)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,36 @@
1
+ require 'vagrant/util/template_renderer'
2
+
3
+ module Vagrant
4
+ module Action
5
+ module VM
6
+ # Puts a generated Vagrantfile into the package directory so that
7
+ # it can be included in the package.
8
+ class PackageVagrantfile
9
+ # For TemplateRenderer
10
+ include Util
11
+
12
+ def initialize(app, env)
13
+ @app = app
14
+ @env = env
15
+ end
16
+
17
+ def call(env)
18
+ @env = env
19
+ create_vagrantfile
20
+ @app.call(env)
21
+ end
22
+
23
+ # This method creates the auto-generated Vagrantfile at the root of the
24
+ # box. This Vagrantfile contains the MAC address so that the user doesn't
25
+ # have to worry about it.
26
+ def create_vagrantfile
27
+ File.open(File.join(@env["export.temp_dir"], "Vagrantfile"), "w") do |f|
28
+ f.write(TemplateRenderer.render("package_Vagrantfile", {
29
+ :base_mac => @env["vm"].driver.read_mac_address
30
+ }))
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,61 @@
1
+ require "log4r"
2
+
3
+ module Vagrant
4
+ module Action
5
+ module VM
6
+ class Provision
7
+ def initialize(app, env)
8
+ @logger = Log4r::Logger.new("vagrant::action::vm::provision")
9
+ @app = app
10
+
11
+ env["provision.enabled"] = true if !env.has_key?("provision.enabled")
12
+ end
13
+
14
+ def call(env)
15
+ @env = env
16
+
17
+ provisioners = nil
18
+
19
+ # We set this here so that even if this value is changed in the future,
20
+ # it stays constant to what we expect here in this moment.
21
+ enabled = env["provision.enabled"]
22
+ # Instantiate and prepare the provisioners. Preparation must happen here
23
+ # so that shared folders and such can properly take effect.
24
+ provisioners = enabled_provisioners
25
+ provisioners.map { |p| p.prepare }
26
+
27
+ @app.call(env)
28
+
29
+ if enabled
30
+ # Take prepared provisioners and run the provisioning
31
+ provisioners.each do |instance|
32
+ @env[:ui].info I18n.t("vagrant.actions.vm.provision.beginning",
33
+ :provisioner => instance.class)
34
+ instance.provision!
35
+ end
36
+ end
37
+ end
38
+
39
+ def enabled_provisioners
40
+ enabled = []
41
+ @env[:vm].config.vm.provisioners.each do |provisioner|
42
+ if @env["provision.types"]
43
+ # If we've specified types of provisioners to enable, then we
44
+ # only use those provisioners, and skip any that we haven't
45
+ # specified.
46
+ if !@env["provision.types"].include?(provisioner.shortcut.to_s)
47
+ @logger.debug("Skipping provisioner: #{provisioner.shortcut}")
48
+ next
49
+ end
50
+ end
51
+
52
+ enabled << provisioner.provisioner.new(@env, provisioner.config)
53
+ end
54
+
55
+ # Return the enable provisioners
56
+ enabled
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,26 @@
1
+ module Vagrant
2
+ module Action
3
+ module VM
4
+ class ProvisionerCleanup
5
+ def initialize(app, env)
6
+ @app = app
7
+ @env = env
8
+ end
9
+
10
+ def call(env)
11
+ enabled_provisioners.each do |instance|
12
+ instance.cleanup
13
+ end
14
+
15
+ @app.call(env)
16
+ end
17
+
18
+ def enabled_provisioners
19
+ @env[:vm].config.vm.provisioners.map do |provisioner|
20
+ provisioner.provisioner.new(@env, provisioner.config)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ module Vagrant
2
+ module Action
3
+ module VM
4
+ class PruneNFSExports
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ if env[:host]
11
+ valid_ids = env[:vm].driver.read_vms
12
+ env[:host].nfs_prune(valid_ids)
13
+ end
14
+
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Vagrant
2
+ module Action
3
+ module VM
4
+ class Resume
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ if env[:vm].state == :saved
11
+ env[:ui].info I18n.t("vagrant.actions.vm.resume.resuming")
12
+ env[:action_runner].run(Boot, env)
13
+ end
14
+
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,78 @@
1
+ require "log4r"
2
+
3
+ module Vagrant
4
+ module Action
5
+ module VM
6
+ # This middleware enforces some sane defaults on the virtualbox
7
+ # VM which help with performance, stability, and in some cases
8
+ # behavior.
9
+ class SaneDefaults
10
+ def initialize(app, env)
11
+ @logger = Log4r::Logger.new("vagrant::action::vm::sanedefaults")
12
+ @app = app
13
+ end
14
+
15
+ def call(env)
16
+ # Set the env on an instance variable so we can access it in
17
+ # helpers.
18
+ @env = env
19
+
20
+ # Enable the host IO cache on the sata controller. Note that
21
+ # if this fails then its not a big deal, so we don't raise any
22
+ # errors. The Host IO cache vastly improves disk IO performance
23
+ # for VMs.
24
+ command = [
25
+ "storagectl", env[:vm].uuid,
26
+ "--name", "SATA Controller",
27
+ "--hostiocache", "on"
28
+ ]
29
+ attempt_and_log(command, "Enabling the Host I/O cache on the SATA controller...")
30
+
31
+ enable_dns_proxy = true
32
+ begin
33
+ contents = File.read("/etc/resolv.conf")
34
+
35
+ if contents =~ /^nameserver 127\.0\.(0|1)\.1$/
36
+ # The use of both natdnsproxy and natdnshostresolver break on
37
+ # Ubuntu 12.04 that uses resolvconf with localhost. When used
38
+ # VirtualBox will give the client dns server 10.0.2.3, while
39
+ # not binding to that address itself. Therefore disable this
40
+ # feature if host uses the resolvconf server 127.0.0.1
41
+ @logger.info("Disabling DNS proxy since resolv.conf contains 127.0.0.1")
42
+ enable_dns_proxy = false
43
+ end
44
+ rescue Errno::ENOENT; end
45
+
46
+ # Enable/disable the NAT DNS proxy as necessary
47
+ if enable_dns_proxy
48
+ command = [
49
+ "modifyvm", env[:vm].uuid,
50
+ "--natdnsproxy1", "on"
51
+ ]
52
+ attempt_and_log(command, "Enable the NAT DNS proxy on adapter 1...")
53
+ else
54
+ command = [ "modifyvm", env[:vm].uuid, "--natdnsproxy1", "off" ]
55
+ attempt_and_log(command, "Disable the NAT DNS proxy on adapter 1...")
56
+ command = [ "modifyvm", env[:vm].uuid, "--natdnshostresolver1", "off" ]
57
+ attempt_and_log(command, "Disable the NAT DNS resolver on adapter 1...")
58
+ end
59
+
60
+ @app.call(env)
61
+ end
62
+
63
+ protected
64
+
65
+ # This is just a helper method that executes a single command, logs
66
+ # the given string to the log, and also includes the exit status in
67
+ # the log message.
68
+ #
69
+ # @param [Array] command Command to run
70
+ # @param [String] log Log message to write.
71
+ def attempt_and_log(command, log)
72
+ result = @env[:vm].driver.execute_command(command)
73
+ @logger.info("#{log} (exit status = #{result.exit_code})")
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end