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,132 @@
1
+ require 'pathname'
2
+
3
+ require 'vagrant/provisioners/chef'
4
+
5
+ module Vagrant
6
+ module Provisioners
7
+ # This class implements provisioning via chef-client, allowing provisioning
8
+ # with a chef server.
9
+ class ChefClient < Chef
10
+ class Config < Chef::Config
11
+ attr_accessor :chef_server_url
12
+ attr_accessor :validation_key_path
13
+ attr_accessor :validation_client_name
14
+ attr_accessor :client_key_path
15
+ attr_accessor :file_cache_path
16
+ attr_accessor :file_backup_path
17
+ attr_accessor :environment
18
+ attr_accessor :encrypted_data_bag_secret_key_path
19
+ attr_accessor :encrypted_data_bag_secret
20
+
21
+ # Provide defaults in such a way that they won't override the instance
22
+ # variable. This is so merging continues to work properly.
23
+ def validation_client_name; @validation_client_name || "chef-validator"; end
24
+ def client_key_path; @client_key_path || "/etc/chef/client.pem"; end
25
+ def file_cache_path; @file_cache_path || "/srv/chef/file_store"; end
26
+ def file_backup_path; @file_backup_path || "/srv/chef/cache"; end
27
+ def encrypted_data_bag_secret; @encrypted_data_bag_secret || "/tmp/encrypted_data_bag_secret"; end
28
+
29
+ def validate(env, errors)
30
+ super
31
+
32
+ errors.add(I18n.t("vagrant.config.chef.server_url_empty")) if !chef_server_url || chef_server_url.strip == ""
33
+ errors.add(I18n.t("vagrant.config.chef.validation_key_path")) if !validation_key_path
34
+ errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if @run_list && @run_list.empty?
35
+ end
36
+ end
37
+
38
+ def self.config_class
39
+ Config
40
+ end
41
+
42
+ def prepare
43
+ raise ChefError, :server_validation_key_required if config.validation_key_path.nil?
44
+ raise ChefError, :server_validation_key_doesnt_exist if !File.file?(validation_key_path)
45
+ raise ChefError, :server_url_required if config.chef_server_url.nil?
46
+ end
47
+
48
+ def provision!
49
+ verify_binary(chef_binary_path("chef-client"))
50
+ chown_provisioning_folder
51
+ create_client_key_folder
52
+ upload_validation_key
53
+ upload_encrypted_data_bag_secret if config.encrypted_data_bag_secret_key_path
54
+ setup_json
55
+ setup_server_config
56
+ run_chef_client
57
+ end
58
+
59
+ def create_client_key_folder
60
+ env[:ui].info I18n.t("vagrant.provisioners.chef.client_key_folder")
61
+ path = Pathname.new(config.client_key_path)
62
+
63
+ env[:vm].channel.sudo("mkdir -p #{path.dirname}")
64
+ end
65
+
66
+ def upload_validation_key
67
+ env[:ui].info I18n.t("vagrant.provisioners.chef.upload_validation_key")
68
+ env[:vm].channel.upload(validation_key_path, guest_validation_key_path)
69
+ end
70
+
71
+ def upload_encrypted_data_bag_secret
72
+ env[:ui].info I18n.t("vagrant.provisioners.chef.upload_encrypted_data_bag_secret_key")
73
+ env[:vm].channel.upload(encrypted_data_bag_secret_key_path,
74
+ config.encrypted_data_bag_secret)
75
+ end
76
+
77
+ def setup_server_config
78
+ setup_config("provisioners/chef_client/client", "client.rb", {
79
+ :node_name => config.node_name,
80
+ :chef_server_url => config.chef_server_url,
81
+ :validation_client_name => config.validation_client_name,
82
+ :validation_key => guest_validation_key_path,
83
+ :client_key => config.client_key_path,
84
+ :file_cache_path => config.file_cache_path,
85
+ :file_backup_path => config.file_backup_path,
86
+ :environment => config.environment,
87
+ :encrypted_data_bag_secret => config.encrypted_data_bag_secret
88
+ })
89
+ end
90
+
91
+ def run_chef_client
92
+ command_env = config.binary_env ? "#{config.binary_env} " : ""
93
+ command = "#{command_env}#{chef_binary_path("chef-client")} -c #{config.provisioning_path}/client.rb -j #{config.provisioning_path}/dna.json"
94
+
95
+ config.attempts.times do |attempt|
96
+ if attempt == 0
97
+ env[:ui].info I18n.t("vagrant.provisioners.chef.running_client")
98
+ else
99
+ env[:ui].info I18n.t("vagrant.provisioners.chef.running_client_again")
100
+ end
101
+
102
+ exit_status = env[:vm].channel.sudo(command) do |type, data|
103
+ # Output the data with the proper color based on the stream.
104
+ color = type == :stdout ? :green : :red
105
+
106
+ # Note: Be sure to chomp the data to avoid the newlines that the
107
+ # Chef outputs.
108
+ env[:ui].info(data.chomp, :color => color, :prefix => false)
109
+ end
110
+
111
+ # There is no need to run Chef again if it converges
112
+ return if exit_status == 0
113
+ end
114
+
115
+ # If we reached this point then Chef never converged! Error.
116
+ raise ChefError, :no_convergence
117
+ end
118
+
119
+ def validation_key_path
120
+ File.expand_path(config.validation_key_path, env[:root_path])
121
+ end
122
+
123
+ def encrypted_data_bag_secret_key_path
124
+ File.expand_path(config.encrypted_data_bag_secret_key_path, env[:root_path])
125
+ end
126
+
127
+ def guest_validation_key_path
128
+ File.join(config.provisioning_path, "validation.pem")
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,234 @@
1
+ require "log4r"
2
+
3
+ require 'vagrant/provisioners/chef'
4
+
5
+ module Vagrant
6
+ module Provisioners
7
+ # This class implements provisioning via chef-solo.
8
+ class ChefSolo < Chef
9
+ extend Util::Counter
10
+ include Util::Counter
11
+
12
+ class Config < Chef::Config
13
+ attr_accessor :cookbooks_path
14
+ attr_accessor :roles_path
15
+ attr_accessor :data_bags_path
16
+ attr_accessor :recipe_url
17
+ attr_accessor :nfs
18
+ attr_accessor :encrypted_data_bag_secret_key_path
19
+ attr_accessor :encrypted_data_bag_secret
20
+
21
+ def encrypted_data_bag_secret; @encrypted_data_bag_secret || "/tmp/encrypted_data_bag_secret"; end
22
+
23
+ def initialize
24
+ super
25
+
26
+ @__default = ["cookbooks", [:vm, "cookbooks"]]
27
+ end
28
+
29
+ # Provide defaults in such a way that they won't override the instance
30
+ # variable. This is so merging continues to work properly.
31
+ def cookbooks_path
32
+ @cookbooks_path || _default_cookbook_path
33
+ end
34
+
35
+ # This stores a reference to the default cookbook path which is used
36
+ # later. Do not use this publicly. I apologize for not making it
37
+ # "protected" but it has to be called by Vagrant internals later.
38
+ def _default_cookbook_path
39
+ @__default
40
+ end
41
+
42
+ def nfs
43
+ @nfs || false
44
+ end
45
+
46
+ def validate(env, errors)
47
+ super
48
+
49
+ errors.add(I18n.t("vagrant.config.chef.cookbooks_path_empty")) if !cookbooks_path || [cookbooks_path].flatten.empty?
50
+ errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if !run_list || run_list.empty?
51
+ end
52
+ end
53
+
54
+ attr_reader :cookbook_folders
55
+ attr_reader :role_folders
56
+ attr_reader :data_bags_folders
57
+
58
+ def self.config_class
59
+ Config
60
+ end
61
+
62
+ def initialize(env, config)
63
+ super
64
+ @logger = Log4r::Logger.new("vagrant::provisioners::chef_solo")
65
+ end
66
+
67
+ def prepare
68
+ @cookbook_folders = expanded_folders(config.cookbooks_path, "cookbooks")
69
+ @role_folders = expanded_folders(config.roles_path, "roles")
70
+ @data_bags_folders = expanded_folders(config.data_bags_path, "data_bags")
71
+
72
+ share_folders("csc", @cookbook_folders)
73
+ share_folders("csr", @role_folders)
74
+ share_folders("csdb", @data_bags_folders)
75
+ end
76
+
77
+ def provision!
78
+ # Verify that the proper shared folders exist.
79
+ check = []
80
+ [@cookbook_folders, @role_folders, @data_bags_folders].each do |folders|
81
+ folders.each do |type, local_path, remote_path|
82
+ # We only care about checking folders that have a local path, meaning
83
+ # they were shared from the local machine, rather than assumed to
84
+ # exist on the VM.
85
+ check << remote_path if local_path
86
+ end
87
+ end
88
+
89
+ verify_shared_folders(check)
90
+
91
+ verify_binary(chef_binary_path("chef-solo"))
92
+ chown_provisioning_folder
93
+ upload_encrypted_data_bag_secret if config.encrypted_data_bag_secret_key_path
94
+ setup_json
95
+ setup_solo_config
96
+ run_chef_solo
97
+ end
98
+
99
+ # Converts paths to a list of properly expanded paths with types.
100
+ def expanded_folders(paths, appended_folder=nil)
101
+ return [] if paths.nil?
102
+
103
+ # Convert the path to an array if it is a string or just a single
104
+ # path element which contains the folder location (:host or :vm)
105
+ paths = [paths] if paths.is_a?(String) || paths.first.is_a?(Symbol)
106
+
107
+ results = []
108
+ paths.each do |path|
109
+ path = [:host, path] if !path.is_a?(Array)
110
+ type, path = path
111
+
112
+ # Create the local/remote path based on whether this is a host
113
+ # or VM path.
114
+ local_path = nil
115
+ remote_path = nil
116
+ if type == :host
117
+ # Get the expanded path that the host path points to
118
+ local_path = File.expand_path(path, env[:root_path])
119
+
120
+ # Super hacky but if we're expanded the default cookbook paths,
121
+ # and one of the host paths doesn't exist, then just ignore it,
122
+ # because that is fine.
123
+ if paths.equal?(config._default_cookbook_path) && !File.directory?(local_path)
124
+ @logger.info("'cookbooks' folder doesn't exist on defaults. Ignoring.")
125
+ next
126
+ end
127
+
128
+ # Path exists on the host, setup the remote path
129
+ remote_path = "#{config.provisioning_path}/chef-solo-#{get_and_update_counter(:cookbooks_path)}"
130
+ else
131
+ # Path already exists on the virtual machine. Expand it
132
+ # relative to where we're provisioning.
133
+ remote_path = File.expand_path(path, config.provisioning_path)
134
+
135
+ # Remove drive letter if running on a windows host. This is a bit
136
+ # of a hack but is the most portable way I can think of at the moment
137
+ # to achieve this. Otherwise, Vagrant attempts to share at some crazy
138
+ # path like /home/vagrant/c:/foo/bar
139
+ remote_path = remote_path.gsub(/^[a-zA-Z]:/, "")
140
+ end
141
+
142
+ # If we have specified a folder name to append then append it
143
+ remote_path += "/#{appended_folder}" if appended_folder
144
+
145
+ # Append the result
146
+ results << [type, local_path, remote_path]
147
+ end
148
+
149
+ results
150
+ end
151
+
152
+ # Shares the given folders with the given prefix. The folders should
153
+ # be of the structure resulting from the `expanded_folders` function.
154
+ def share_folders(prefix, folders)
155
+ folders.each do |type, local_path, remote_path|
156
+ if type == :host
157
+ env[:vm].config.vm.share_folder("v-#{prefix}-#{self.class.get_and_update_counter(:shared_folder)}",
158
+ remote_path, local_path, :nfs => config.nfs)
159
+ end
160
+ end
161
+ end
162
+
163
+ def upload_encrypted_data_bag_secret
164
+ env[:ui].info I18n.t("vagrant.provisioners.chef.upload_encrypted_data_bag_secret_key")
165
+ env[:vm].channel.upload(encrypted_data_bag_secret_key_path,
166
+ config.encrypted_data_bag_secret)
167
+ end
168
+
169
+ def setup_solo_config
170
+ cookbooks_path = guest_paths(@cookbook_folders)
171
+ roles_path = guest_paths(@role_folders).first
172
+ data_bags_path = guest_paths(@data_bags_folders).first
173
+
174
+ setup_config("provisioners/chef_solo/solo", "solo.rb", {
175
+ :node_name => config.node_name,
176
+ :provisioning_path => config.provisioning_path,
177
+ :cookbooks_path => cookbooks_path,
178
+ :recipe_url => config.recipe_url,
179
+ :roles_path => roles_path,
180
+ :data_bags_path => data_bags_path,
181
+ :encrypted_data_bag_secret => config.encrypted_data_bag_secret,
182
+ })
183
+ end
184
+
185
+ def run_chef_solo
186
+ command_env = config.binary_env ? "#{config.binary_env} " : ""
187
+ command = "#{command_env}#{chef_binary_path("chef-solo")} -c #{config.provisioning_path}/solo.rb -j #{config.provisioning_path}/dna.json"
188
+
189
+ config.attempts.times do |attempt|
190
+ if attempt == 0
191
+ env[:ui].info I18n.t("vagrant.provisioners.chef.running_solo")
192
+ else
193
+ env[:ui].info I18n.t("vagrant.provisioners.chef.running_solo_again")
194
+ end
195
+
196
+ exit_status = env[:vm].channel.sudo(command, :error_check => false) do |type, data|
197
+ # Output the data with the proper color based on the stream.
198
+ color = type == :stdout ? :green : :red
199
+
200
+ # Note: Be sure to chomp the data to avoid the newlines that the
201
+ # Chef outputs.
202
+ env[:ui].info(data.chomp, :color => color, :prefix => false)
203
+ end
204
+
205
+ # There is no need to run Chef again if it converges
206
+ return if exit_status == 0
207
+ end
208
+
209
+ # If we reached this point then Chef never converged! Error.
210
+ raise ChefError, :no_convergence
211
+ end
212
+
213
+ def verify_shared_folders(folders)
214
+ folders.each do |folder|
215
+ @logger.debug("Checking for shared folder: #{folder}")
216
+ if !env[:vm].channel.test("test -d #{folder}")
217
+ raise ChefError, :missing_shared_folders
218
+ end
219
+ end
220
+ end
221
+
222
+ def encrypted_data_bag_secret_key_path
223
+ File.expand_path(config.encrypted_data_bag_secret_key_path, env[:root_path])
224
+ end
225
+
226
+ protected
227
+
228
+ # Extracts only the remote paths from a list of folders
229
+ def guest_paths(folders)
230
+ folders.map { |parts| parts[2] }
231
+ end
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,176 @@
1
+ require "log4r"
2
+
3
+ module Vagrant
4
+ module Provisioners
5
+ class PuppetError < Vagrant::Errors::VagrantError
6
+ error_namespace("vagrant.provisioners.puppet")
7
+ end
8
+
9
+ class Puppet < Base
10
+ class Config < Vagrant::Config::Base
11
+ attr_accessor :manifest_file
12
+ attr_accessor :manifests_path
13
+ attr_accessor :module_path
14
+ attr_accessor :pp_path
15
+ attr_accessor :options
16
+ attr_accessor :facter
17
+
18
+ def manifest_file; @manifest_file || "default.pp"; end
19
+ def manifests_path; @manifests_path || "manifests"; end
20
+ def pp_path; @pp_path || "/tmp/vagrant-puppet"; end
21
+ def options; @options ||= []; end
22
+ def facter; @facter ||= {}; end
23
+
24
+ # Returns the manifests path expanded relative to the root path of the
25
+ # environment.
26
+ def expanded_manifests_path(root_path)
27
+ Pathname.new(manifests_path).expand_path(root_path)
28
+ end
29
+
30
+ # Returns the module paths as an array of paths expanded relative to the
31
+ # root path.
32
+ def expanded_module_paths(root_path)
33
+ return [] if !module_path
34
+
35
+ # Get all the paths and expand them relative to the root path, returning
36
+ # the array of expanded paths
37
+ paths = module_path
38
+ paths = [paths] if !paths.is_a?(Array)
39
+ paths.map do |path|
40
+ Pathname.new(path).expand_path(root_path)
41
+ end
42
+ end
43
+
44
+ def validate(env, errors)
45
+ # Calculate the manifests and module paths based on env
46
+ this_expanded_manifests_path = expanded_manifests_path(env.root_path)
47
+ this_expanded_module_paths = expanded_module_paths(env.root_path)
48
+
49
+ # Manifests path/file validation
50
+ if !this_expanded_manifests_path.directory?
51
+ errors.add(I18n.t("vagrant.provisioners.puppet.manifests_path_missing",
52
+ :path => this_expanded_manifests_path))
53
+ else
54
+ expanded_manifest_file = this_expanded_manifests_path.join(manifest_file)
55
+ if !expanded_manifest_file.file?
56
+ errors.add(I18n.t("vagrant.provisioners.puppet.manifest_missing",
57
+ :manifest => expanded_manifest_file.to_s))
58
+ end
59
+ end
60
+
61
+ # Module paths validation
62
+ this_expanded_module_paths.each do |path|
63
+ if !path.directory?
64
+ errors.add(I18n.t("vagrant.provisioners.puppet.module_path_missing", :path => path))
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ def self.config_class
71
+ Config
72
+ end
73
+
74
+ def initialize(env, config)
75
+ super
76
+
77
+ @logger = Log4r::Logger.new("vagrant::provisioners::puppet")
78
+ end
79
+
80
+ def prepare
81
+ # Calculate the paths we're going to use based on the environment
82
+ @expanded_manifests_path = config.expanded_manifests_path(env[:root_path])
83
+ @expanded_module_paths = config.expanded_module_paths(env[:root_path])
84
+ @manifest_file = File.join(manifests_guest_path, config.manifest_file)
85
+
86
+ set_module_paths
87
+ share_manifests
88
+ share_module_paths
89
+ end
90
+
91
+ def provision!
92
+ # Check that the shared folders are properly shared
93
+ check = [manifests_guest_path]
94
+ @module_paths.each do |host_path, guest_path|
95
+ check << guest_path
96
+ end
97
+
98
+ verify_shared_folders(check)
99
+
100
+ # Verify Puppet is installed and run it
101
+ verify_binary("puppet")
102
+ run_puppet_client
103
+ end
104
+
105
+ def share_manifests
106
+ env[:vm].config.vm.share_folder("manifests", manifests_guest_path, @expanded_manifests_path)
107
+ end
108
+
109
+ def share_module_paths
110
+ count = 0
111
+ @module_paths.each do |from, to|
112
+ # Sorry for the cryptic key here, but VirtualBox has a strange limit on
113
+ # maximum size for it and its something small (around 10)
114
+ env[:vm].config.vm.share_folder("v-pp-m#{count}", to, from)
115
+ count += 1
116
+ end
117
+ end
118
+
119
+ def set_module_paths
120
+ @module_paths = []
121
+ @expanded_module_paths.each_with_index do |path, i|
122
+ @module_paths << [path, File.join(config.pp_path, "modules-#{i}")]
123
+ end
124
+ end
125
+
126
+ def manifests_guest_path
127
+ File.join(config.pp_path, "manifests")
128
+ end
129
+
130
+ def verify_binary(binary)
131
+ env[:vm].channel.sudo("which #{binary}",
132
+ :error_class => PuppetError,
133
+ :error_key => :not_detected,
134
+ :binary => binary)
135
+ end
136
+
137
+ def run_puppet_client
138
+ options = [config.options].flatten
139
+ module_paths = @module_paths.map { |_, to| to }
140
+ options << "--modulepath '#{module_paths.join(':')}'" if !@module_paths.empty?
141
+ options << @manifest_file
142
+ options = options.join(" ")
143
+
144
+ # Build up the custom facts if we have any
145
+ facter = ""
146
+ if !config.facter.empty?
147
+ facts = []
148
+ config.facter.each do |key, value|
149
+ facts << "FACTER_#{key}='#{value}'"
150
+ end
151
+
152
+ facter = "#{facts.join(" ")} "
153
+ end
154
+
155
+ command = "cd #{manifests_guest_path} && #{facter}puppet apply #{options} --detailed-exitcodes || [ $? -eq 2 ]"
156
+
157
+ env[:ui].info I18n.t("vagrant.provisioners.puppet.running_puppet",
158
+ :manifest => @manifest_file)
159
+
160
+ env[:vm].channel.sudo(command) do |type, data|
161
+ env[:ui].info(data.chomp, :prefix => false)
162
+ end
163
+ end
164
+
165
+ def verify_shared_folders(folders)
166
+ folders.each do |folder|
167
+ @logger.debug("Checking for shared folder: #{folder}")
168
+ if !env[:vm].channel.test("test -d #{folder}")
169
+ raise PuppetError, :missing_shared_folders
170
+ end
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
176
+