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,459 @@
1
+ require 'log4r'
2
+
3
+ require 'vagrant/driver/virtualbox_base'
4
+
5
+ module Vagrant
6
+ module Driver
7
+ # Driver for VirtualBox 4.1.x
8
+ class VirtualBox_4_1 < VirtualBoxBase
9
+ def initialize(uuid)
10
+ super()
11
+
12
+ @logger = Log4r::Logger.new("vagrant::driver::virtualbox_4_1")
13
+ @uuid = uuid
14
+ end
15
+
16
+ def clear_forwarded_ports
17
+ args = []
18
+ read_forwarded_ports(@uuid).each do |nic, name, _, _|
19
+ args.concat(["--natpf#{nic}", "delete", name])
20
+ end
21
+
22
+ execute("modifyvm", @uuid, *args) if !args.empty?
23
+ end
24
+
25
+ def clear_shared_folders
26
+ info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
27
+ info.split("\n").each do |line|
28
+ if line =~ /^SharedFolderNameMachineMapping\d+="(.+?)"$/
29
+ execute("sharedfolder", "remove", @uuid, "--name", $1.to_s)
30
+ end
31
+ end
32
+ end
33
+
34
+ def create_dhcp_server(network, options)
35
+ execute("dhcpserver", "add", "--ifname", network,
36
+ "--ip", options[:dhcp_ip],
37
+ "--netmask", options[:netmask],
38
+ "--lowerip", options[:dhcp_lower],
39
+ "--upperip", options[:dhcp_upper],
40
+ "--enable")
41
+ end
42
+
43
+ def create_host_only_network(options)
44
+ # Create the interface
45
+ execute("hostonlyif", "create") =~ /^Interface '(.+?)' was successfully created$/
46
+ name = $1.to_s
47
+
48
+ # Configure it
49
+ execute("hostonlyif", "ipconfig", name,
50
+ "--ip", options[:adapter_ip],
51
+ "--netmask", options[:netmask])
52
+
53
+ # Return the details
54
+ return {
55
+ :name => name,
56
+ :ip => options[:adapter_ip],
57
+ :netmask => options[:netmask],
58
+ :dhcp => nil
59
+ }
60
+ end
61
+
62
+ def delete
63
+ execute("unregistervm", @uuid, "--delete")
64
+ end
65
+
66
+ def delete_unused_host_only_networks
67
+ networks = []
68
+ execute("list", "hostonlyifs").split("\n").each do |line|
69
+ networks << $1.to_s if line =~ /^Name:\s+(.+?)$/
70
+ end
71
+
72
+ execute("list", "vms").split("\n").each do |line|
73
+ if line =~ /^".+?"\s+\{(.+?)\}$/
74
+ info = execute("showvminfo", $1.to_s, "--machinereadable", :retryable => true)
75
+ info.split("\n").each do |line|
76
+ if line =~ /^hostonlyadapter\d+="(.+?)"$/
77
+ networks.delete($1.to_s)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ networks.each do |name|
84
+ # First try to remove any DHCP servers attached. We use `raw` because
85
+ # it is okay if this fails. It usually means that a DHCP server was
86
+ # never attached.
87
+ raw("dhcpserver", "remove", "--ifname", name)
88
+
89
+ # Delete the actual host only network interface.
90
+ execute("hostonlyif", "remove", name)
91
+ end
92
+ end
93
+
94
+ def discard_saved_state
95
+ execute("discardstate", @uuid)
96
+ end
97
+
98
+ def enable_adapters(adapters)
99
+ args = []
100
+ adapters.each do |adapter|
101
+ args.concat(["--nic#{adapter[:adapter]}", adapter[:type].to_s])
102
+
103
+ if adapter[:bridge]
104
+ args.concat(["--bridgeadapter#{adapter[:adapter]}",
105
+ adapter[:bridge]])
106
+ end
107
+
108
+ if adapter[:hostonly]
109
+ args.concat(["--hostonlyadapter#{adapter[:adapter]}",
110
+ adapter[:hostonly]])
111
+ end
112
+
113
+ if adapter[:mac_address]
114
+ args.concat(["--macaddress#{adapter[:adapter]}",
115
+ adapter[:mac_address]])
116
+ end
117
+
118
+ if adapter[:nic_type]
119
+ args.concat(["--nictype#{adapter[:adapter]}", adapter[:nic_type].to_s])
120
+ end
121
+ end
122
+
123
+ execute("modifyvm", @uuid, *args)
124
+ end
125
+
126
+ def execute_command(command)
127
+ raw(*command)
128
+ end
129
+
130
+ def export(path)
131
+ # TODO: Progress
132
+ execute("export", @uuid, "--output", path.to_s)
133
+ end
134
+
135
+ def forward_ports(ports)
136
+ args = []
137
+ ports.each do |options|
138
+ pf_builder = [options[:name],
139
+ options[:protocol] || "tcp",
140
+ "",
141
+ options[:hostport],
142
+ "",
143
+ options[:guestport]]
144
+
145
+ args.concat(["--natpf#{options[:adapter] || 1}",
146
+ pf_builder.join(",")])
147
+ end
148
+
149
+ execute("modifyvm", @uuid, *args) if !args.empty?
150
+ end
151
+
152
+ def halt
153
+ execute("controlvm", @uuid, "poweroff")
154
+ end
155
+
156
+ def import(ovf)
157
+ output = ""
158
+ total = ""
159
+ last = 0
160
+ execute("import", ovf) do |type, data|
161
+ if type == :stdout
162
+ # Keep track of the stdout so that we can get the VM name
163
+ output << data
164
+ elsif type == :stderr
165
+ # Append the data so we can see the full view
166
+ total << data
167
+
168
+ # Break up the lines. We can't get the progress until we see an "OK"
169
+ lines = total.split("\n")
170
+ if lines.include?("OK.")
171
+ # The progress of the import will be in the last line. Do a greedy
172
+ # regular expression to find what we're looking for.
173
+ if lines.last =~ /.+(\d{2})%/
174
+ current = $1.to_i
175
+ if current > last
176
+ last = current
177
+ yield current if block_given?
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
183
+
184
+ # Find the name of the VM name
185
+ if output !~ /Suggested VM name "(.+?)"/
186
+ @logger.error("Couldn't find VM name in the output.")
187
+ return nil
188
+ end
189
+
190
+ name = $1.to_s
191
+
192
+ output = execute("list", "vms")
193
+ if output =~ /^"#{Regexp.escape(name)}" \{(.+?)\}$/
194
+ return $1.to_s
195
+ end
196
+
197
+ nil
198
+ end
199
+
200
+ def read_forwarded_ports(uuid=nil, active_only=false)
201
+ uuid ||= @uuid
202
+
203
+ @logger.debug("read_forward_ports: uuid=#{uuid} active_only=#{active_only}")
204
+
205
+ results = []
206
+ current_nic = nil
207
+ info = execute("showvminfo", uuid, "--machinereadable", :retryable => true)
208
+ info.split("\n").each do |line|
209
+ # This is how we find the nic that a FP is attached to,
210
+ # since this comes first.
211
+ current_nic = $1.to_i if line =~ /^nic(\d+)=".+?"$/
212
+
213
+ # If we care about active VMs only, then we check the state
214
+ # to verify the VM is running.
215
+ if active_only && line =~ /^VMState="(.+?)"$/ && $1.to_s != "running"
216
+ return []
217
+ end
218
+
219
+ # Parse out the forwarded port information
220
+ if line =~ /^Forwarding.+?="(.+?),.+?,.*?,(.+?),.*?,(.+?)"$/
221
+ result = [current_nic, $1.to_s, $2.to_i, $3.to_i]
222
+ @logger.debug(" - #{result.inspect}")
223
+ results << result
224
+ end
225
+ end
226
+
227
+ results
228
+ end
229
+
230
+ def read_bridged_interfaces
231
+ execute("list", "bridgedifs").split("\n\n").collect do |block|
232
+ info = {}
233
+
234
+ block.split("\n").each do |line|
235
+ if line =~ /^Name:\s+(.+?)$/
236
+ info[:name] = $1.to_s
237
+ elsif line =~ /^IPAddress:\s+(.+?)$/
238
+ info[:ip] = $1.to_s
239
+ elsif line =~ /^NetworkMask:\s+(.+?)$/
240
+ info[:netmask] = $1.to_s
241
+ elsif line =~ /^Status:\s+(.+?)$/
242
+ info[:status] = $1.to_s
243
+ end
244
+ end
245
+
246
+ # Return the info to build up the results
247
+ info
248
+ end
249
+ end
250
+
251
+ def read_guest_additions_version
252
+ output = execute("guestproperty", "get", @uuid, "/VirtualBox/GuestAdd/Version",
253
+ :retryable => true)
254
+ if output =~ /^Value: (.+?)$/
255
+ # Split the version by _ since some distro versions modify it
256
+ # to look like this: 4.1.2_ubuntu, and the distro part isn't
257
+ # too important.
258
+ value = $1.to_s
259
+ return value.split("_").first
260
+ end
261
+
262
+ return nil
263
+ end
264
+
265
+ def read_host_only_interfaces
266
+ dhcp = {}
267
+ execute("list", "dhcpservers", :retryable => true).split("\n\n").each do |block|
268
+ info = {}
269
+
270
+ block.split("\n").each do |line|
271
+ if line =~ /^NetworkName:\s+HostInterfaceNetworking-(.+?)$/
272
+ info[:network] = $1.to_s
273
+ elsif line =~ /^IP:\s+(.+?)$/
274
+ info[:ip] = $1.to_s
275
+ elsif line =~ /^lowerIPAddress:\s+(.+?)$/
276
+ info[:lower] = $1.to_s
277
+ elsif line =~ /^upperIPAddress:\s+(.+?)$/
278
+ info[:upper] = $1.to_s
279
+ end
280
+ end
281
+
282
+ # Set the DHCP info
283
+ dhcp[info[:network]] = info
284
+ end
285
+
286
+ execute("list", "hostonlyifs", :retryable => true).split("\n\n").collect do |block|
287
+ info = {}
288
+
289
+ block.split("\n").each do |line|
290
+ if line =~ /^Name:\s+(.+?)$/
291
+ info[:name] = $1.to_s
292
+ elsif line =~ /^IPAddress:\s+(.+?)$/
293
+ info[:ip] = $1.to_s
294
+ elsif line =~ /^NetworkMask:\s+(.+?)$/
295
+ info[:netmask] = $1.to_s
296
+ elsif line =~ /^Status:\s+(.+?)$/
297
+ info[:status] = $1.to_s
298
+ end
299
+ end
300
+
301
+ # Set the DHCP info if it exists
302
+ info[:dhcp] = dhcp[info[:name]] if dhcp[info[:name]]
303
+
304
+ info
305
+ end
306
+ end
307
+
308
+ def read_mac_address
309
+ info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
310
+ info.split("\n").each do |line|
311
+ return $1.to_s if line =~ /^macaddress1="(.+?)"$/
312
+ end
313
+
314
+ nil
315
+ end
316
+
317
+ def read_machine_folder
318
+ execute("list", "systemproperties", :retryable => true).split("\n").each do |line|
319
+ if line =~ /^Default machine folder:\s+(.+?)$/i
320
+ return $1.to_s
321
+ end
322
+ end
323
+
324
+ nil
325
+ end
326
+
327
+ def read_network_interfaces
328
+ nics = {}
329
+ info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
330
+ info.split("\n").each do |line|
331
+ if line =~ /^nic(\d+)="(.+?)"$/
332
+ adapter = $1.to_i
333
+ type = $2.to_sym
334
+
335
+ nics[adapter] ||= {}
336
+ nics[adapter][:type] = type
337
+ elsif line =~ /^hostonlyadapter(\d+)="(.+?)"$/
338
+ adapter = $1.to_i
339
+ network = $2.to_s
340
+
341
+ nics[adapter] ||= {}
342
+ nics[adapter][:hostonly] = network
343
+ elsif line =~ /^bridgeadapter(\d+)="(.+?)"$/
344
+ adapter = $1.to_i
345
+ network = $2.to_s
346
+
347
+ nics[adapter] ||= {}
348
+ nics[adapter][:bridge] = network
349
+ end
350
+ end
351
+
352
+ nics
353
+ end
354
+
355
+ def read_state
356
+ output = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
357
+ if output =~ /^name="<inaccessible>"$/
358
+ return :inaccessible
359
+ elsif output =~ /^VMState="(.+?)"$/
360
+ return $1.to_sym
361
+ end
362
+
363
+ nil
364
+ end
365
+
366
+ def read_used_ports
367
+ ports = []
368
+ execute("list", "vms", :retryable => true).split("\n").each do |line|
369
+ if line =~ /^".+?" \{(.+?)\}$/
370
+ uuid = $1.to_s
371
+
372
+ # Ignore our own used ports
373
+ next if uuid == @uuid
374
+
375
+ read_forwarded_ports(uuid, true).each do |_, _, hostport, _|
376
+ ports << hostport
377
+ end
378
+ end
379
+ end
380
+
381
+ ports
382
+ end
383
+
384
+ def read_vms
385
+ results = []
386
+ execute("list", "vms", :retryable => true).split("\n").each do |line|
387
+ if line =~ /^".+?" \{(.+?)\}$/
388
+ results << $1.to_s
389
+ end
390
+ end
391
+
392
+ results
393
+ end
394
+
395
+ def set_mac_address(mac)
396
+ execute("modifyvm", @uuid, "--macaddress1", mac)
397
+ end
398
+
399
+ def set_name(name)
400
+ execute("modifyvm", @uuid, "--name", name)
401
+ end
402
+
403
+ def share_folders(folders)
404
+ folders.each do |folder|
405
+ args = ["--name",
406
+ folder[:name],
407
+ "--hostpath",
408
+ folder[:hostpath]]
409
+ args << "--transient" if folder.has_key?(:transient) && folder[:transient]
410
+ execute("sharedfolder", "add", @uuid, *args)
411
+ end
412
+ end
413
+
414
+ def ssh_port(expected_port)
415
+ @logger.debug("Searching for SSH port: #{expected_port.inspect}")
416
+
417
+ # Look for the forwarded port only by comparing the guest port
418
+ read_forwarded_ports.each do |_, _, hostport, guestport|
419
+ return hostport if guestport == expected_port
420
+ end
421
+
422
+ nil
423
+ end
424
+
425
+ def start(mode)
426
+ command = ["startvm", @uuid, "--type", mode.to_s]
427
+ r = raw(*command)
428
+
429
+ if r.exit_code == 0 || r.stdout =~ /VM ".+?" has been successfully started/
430
+ # Some systems return an exit code 1 for some reason. For that
431
+ # we depend on the output.
432
+ return true
433
+ end
434
+
435
+ # If we reached this point then it didn't work out.
436
+ raise Errors::VBoxManageError, :command => command.inspect
437
+ end
438
+
439
+ def suspend
440
+ execute("controlvm", @uuid, "savestate")
441
+ end
442
+
443
+ def verify!
444
+ # This command sometimes fails if kernel drivers aren't properly loaded
445
+ # so we just run the command and verify that it succeeded.
446
+ execute("list", "hostonlyifs")
447
+ end
448
+
449
+ def verify_image(path)
450
+ r = raw("import", path.to_s, "--dry-run")
451
+ return r.exit_code == 0
452
+ end
453
+
454
+ def vm_exists?(uuid)
455
+ raw("showvminfo", uuid).exit_code == 0
456
+ end
457
+ end
458
+ end
459
+ end