vagrant 1.0.7 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (416) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -43
  3. data/Gemfile +2 -1
  4. data/LICENSE.txt +22 -0
  5. data/README.md +3 -90
  6. data/Rakefile +1 -18
  7. data/bin/vagrant +2 -58
  8. data/message.txt +17 -0
  9. data/vagrant.gemspec +20 -69
  10. metadata +43 -655
  11. data/.yardopts +0 -1
  12. data/CHANGELOG.md +0 -723
  13. data/LICENSE +0 -21
  14. data/config/default.rb +0 -30
  15. data/contrib/README.md +0 -12
  16. data/contrib/emacs/vagrant.el +0 -8
  17. data/contrib/vim/vagrantfile.vim +0 -9
  18. data/keys/README.md +0 -17
  19. data/keys/vagrant +0 -27
  20. data/keys/vagrant.pub +0 -1
  21. data/lib/vagrant.rb +0 -197
  22. data/lib/vagrant/action.rb +0 -63
  23. data/lib/vagrant/action/box/destroy.rb +0 -25
  24. data/lib/vagrant/action/box/download.rb +0 -84
  25. data/lib/vagrant/action/box/package.rb +0 -19
  26. data/lib/vagrant/action/box/unpackage.rb +0 -61
  27. data/lib/vagrant/action/box/verify.rb +0 -23
  28. data/lib/vagrant/action/builder.rb +0 -128
  29. data/lib/vagrant/action/builtin.rb +0 -171
  30. data/lib/vagrant/action/env/set.rb +0 -21
  31. data/lib/vagrant/action/environment.rb +0 -12
  32. data/lib/vagrant/action/general/check_virtualbox.rb +0 -28
  33. data/lib/vagrant/action/general/package.rb +0 -101
  34. data/lib/vagrant/action/general/validate.rb +0 -18
  35. data/lib/vagrant/action/runner.rb +0 -53
  36. data/lib/vagrant/action/vm/boot.rb +0 -53
  37. data/lib/vagrant/action/vm/check_accessible.rb +0 -23
  38. data/lib/vagrant/action/vm/check_box.rb +0 -33
  39. data/lib/vagrant/action/vm/check_guest_additions.rb +0 -38
  40. data/lib/vagrant/action/vm/check_port_collisions.rb +0 -89
  41. data/lib/vagrant/action/vm/clean_machine_folder.rb +0 -43
  42. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +0 -18
  43. data/lib/vagrant/action/vm/clear_network_interfaces.rb +0 -31
  44. data/lib/vagrant/action/vm/clear_shared_folders.rb +0 -18
  45. data/lib/vagrant/action/vm/customize.rb +0 -36
  46. data/lib/vagrant/action/vm/default_name.rb +0 -22
  47. data/lib/vagrant/action/vm/destroy.rb +0 -19
  48. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +0 -20
  49. data/lib/vagrant/action/vm/discard_state.rb +0 -22
  50. data/lib/vagrant/action/vm/export.rb +0 -57
  51. data/lib/vagrant/action/vm/forward_ports.rb +0 -92
  52. data/lib/vagrant/action/vm/halt.rb +0 -32
  53. data/lib/vagrant/action/vm/host_name.rb +0 -21
  54. data/lib/vagrant/action/vm/import.rb +0 -48
  55. data/lib/vagrant/action/vm/match_mac_address.rb +0 -21
  56. data/lib/vagrant/action/vm/network.rb +0 -403
  57. data/lib/vagrant/action/vm/nfs.rb +0 -196
  58. data/lib/vagrant/action/vm/package.rb +0 -23
  59. data/lib/vagrant/action/vm/package_vagrantfile.rb +0 -36
  60. data/lib/vagrant/action/vm/provision.rb +0 -61
  61. data/lib/vagrant/action/vm/provisioner_cleanup.rb +0 -26
  62. data/lib/vagrant/action/vm/prune_nfs_exports.rb +0 -20
  63. data/lib/vagrant/action/vm/resume.rb +0 -20
  64. data/lib/vagrant/action/vm/sane_defaults.rb +0 -78
  65. data/lib/vagrant/action/vm/setup_package_files.rb +0 -54
  66. data/lib/vagrant/action/vm/share_folders.rb +0 -114
  67. data/lib/vagrant/action/vm/suspend.rb +0 -20
  68. data/lib/vagrant/action/warden.rb +0 -92
  69. data/lib/vagrant/box.rb +0 -44
  70. data/lib/vagrant/box_collection.rb +0 -58
  71. data/lib/vagrant/cli.rb +0 -76
  72. data/lib/vagrant/command.rb +0 -24
  73. data/lib/vagrant/command/base.rb +0 -167
  74. data/lib/vagrant/command/box.rb +0 -58
  75. data/lib/vagrant/command/box_add.rb +0 -37
  76. data/lib/vagrant/command/box_list.rb +0 -28
  77. data/lib/vagrant/command/box_remove.rb +0 -27
  78. data/lib/vagrant/command/box_repackage.rb +0 -27
  79. data/lib/vagrant/command/destroy.rb +0 -64
  80. data/lib/vagrant/command/gem.rb +0 -39
  81. data/lib/vagrant/command/halt.rb +0 -39
  82. data/lib/vagrant/command/init.rb +0 -40
  83. data/lib/vagrant/command/package.rb +0 -75
  84. data/lib/vagrant/command/provision.rb +0 -40
  85. data/lib/vagrant/command/reload.rb +0 -39
  86. data/lib/vagrant/command/resume.rb +0 -33
  87. data/lib/vagrant/command/ssh.rb +0 -90
  88. data/lib/vagrant/command/ssh_config.rb +0 -51
  89. data/lib/vagrant/command/start_mixins.rb +0 -26
  90. data/lib/vagrant/command/status.rb +0 -36
  91. data/lib/vagrant/command/suspend.rb +0 -33
  92. data/lib/vagrant/command/up.rb +0 -40
  93. data/lib/vagrant/communication.rb +0 -7
  94. data/lib/vagrant/communication/base.rb +0 -56
  95. data/lib/vagrant/communication/ssh.rb +0 -230
  96. data/lib/vagrant/config.rb +0 -49
  97. data/lib/vagrant/config/base.rb +0 -82
  98. data/lib/vagrant/config/container.rb +0 -37
  99. data/lib/vagrant/config/error_recorder.rb +0 -19
  100. data/lib/vagrant/config/loader.rb +0 -127
  101. data/lib/vagrant/config/nfs.rb +0 -8
  102. data/lib/vagrant/config/package.rb +0 -7
  103. data/lib/vagrant/config/ssh.rb +0 -27
  104. data/lib/vagrant/config/top.rb +0 -72
  105. data/lib/vagrant/config/vagrant.rb +0 -14
  106. data/lib/vagrant/config/vm.rb +0 -168
  107. data/lib/vagrant/config/vm/provisioner.rb +0 -52
  108. data/lib/vagrant/config/vm/sub_vm.rb +0 -17
  109. data/lib/vagrant/data_store.rb +0 -92
  110. data/lib/vagrant/downloaders.rb +0 -7
  111. data/lib/vagrant/downloaders/base.rb +0 -25
  112. data/lib/vagrant/downloaders/file.rb +0 -22
  113. data/lib/vagrant/downloaders/http.rb +0 -97
  114. data/lib/vagrant/driver.rb +0 -8
  115. data/lib/vagrant/driver/virtualbox.rb +0 -134
  116. data/lib/vagrant/driver/virtualbox_4_0.rb +0 -459
  117. data/lib/vagrant/driver/virtualbox_4_1.rb +0 -459
  118. data/lib/vagrant/driver/virtualbox_4_2.rb +0 -606
  119. data/lib/vagrant/driver/virtualbox_base.rb +0 -326
  120. data/lib/vagrant/environment.rb +0 -522
  121. data/lib/vagrant/errors.rb +0 -445
  122. data/lib/vagrant/guest.rb +0 -18
  123. data/lib/vagrant/guest/arch.rb +0 -56
  124. data/lib/vagrant/guest/base.rb +0 -99
  125. data/lib/vagrant/guest/debian.rb +0 -64
  126. data/lib/vagrant/guest/fedora.rb +0 -66
  127. data/lib/vagrant/guest/freebsd.rb +0 -86
  128. data/lib/vagrant/guest/gentoo.rb +0 -46
  129. data/lib/vagrant/guest/linux.rb +0 -118
  130. data/lib/vagrant/guest/linux/config.rb +0 -19
  131. data/lib/vagrant/guest/linux/error.rb +0 -9
  132. data/lib/vagrant/guest/openbsd.rb +0 -20
  133. data/lib/vagrant/guest/redhat.rb +0 -67
  134. data/lib/vagrant/guest/solaris.rb +0 -118
  135. data/lib/vagrant/guest/suse.rb +0 -17
  136. data/lib/vagrant/guest/ubuntu.rb +0 -23
  137. data/lib/vagrant/hosts.rb +0 -37
  138. data/lib/vagrant/hosts/arch.rb +0 -55
  139. data/lib/vagrant/hosts/base.rb +0 -66
  140. data/lib/vagrant/hosts/bsd.rb +0 -97
  141. data/lib/vagrant/hosts/fedora.rb +0 -47
  142. data/lib/vagrant/hosts/freebsd.rb +0 -41
  143. data/lib/vagrant/hosts/gentoo.rb +0 -20
  144. data/lib/vagrant/hosts/linux.rb +0 -94
  145. data/lib/vagrant/hosts/opensuse.rb +0 -30
  146. data/lib/vagrant/hosts/windows.rb +0 -16
  147. data/lib/vagrant/plugin.rb +0 -81
  148. data/lib/vagrant/provisioners.rb +0 -12
  149. data/lib/vagrant/provisioners/base.rb +0 -44
  150. data/lib/vagrant/provisioners/chef.rb +0 -168
  151. data/lib/vagrant/provisioners/chef_client.rb +0 -132
  152. data/lib/vagrant/provisioners/chef_solo.rb +0 -234
  153. data/lib/vagrant/provisioners/puppet.rb +0 -176
  154. data/lib/vagrant/provisioners/puppet_server.rb +0 -78
  155. data/lib/vagrant/provisioners/shell.rb +0 -103
  156. data/lib/vagrant/registry.rb +0 -52
  157. data/lib/vagrant/ssh.rb +0 -126
  158. data/lib/vagrant/test_helpers.rb +0 -154
  159. data/lib/vagrant/ui.rb +0 -168
  160. data/lib/vagrant/util.rb +0 -12
  161. data/lib/vagrant/util/ansi_escape_code_remover.rb +0 -34
  162. data/lib/vagrant/util/busy.rb +0 -59
  163. data/lib/vagrant/util/counter.rb +0 -24
  164. data/lib/vagrant/util/file_checksum.rb +0 -38
  165. data/lib/vagrant/util/file_mode.rb +0 -12
  166. data/lib/vagrant/util/hash_with_indifferent_access.rb +0 -63
  167. data/lib/vagrant/util/is_port_open.rb +0 -38
  168. data/lib/vagrant/util/line_ending_helpers.rb +0 -14
  169. data/lib/vagrant/util/network_ip.rb +0 -28
  170. data/lib/vagrant/util/platform.rb +0 -68
  171. data/lib/vagrant/util/retryable.rb +0 -25
  172. data/lib/vagrant/util/safe_exec.rb +0 -36
  173. data/lib/vagrant/util/safe_puts.rb +0 -31
  174. data/lib/vagrant/util/stacked_proc_runner.rb +0 -35
  175. data/lib/vagrant/util/subprocess.rb +0 -247
  176. data/lib/vagrant/util/template_renderer.rb +0 -83
  177. data/lib/vagrant/version.rb +0 -6
  178. data/lib/vagrant/vm.rb +0 -195
  179. data/tasks/acceptance.rake +0 -113
  180. data/tasks/bundler.rake +0 -3
  181. data/tasks/test.rake +0 -20
  182. data/templates/commands/init/Vagrantfile.erb +0 -99
  183. data/templates/commands/ssh_config/config.erb +0 -15
  184. data/templates/config/validation_failed.erb +0 -7
  185. data/templates/guests/arch/network_dhcp.erb +0 -7
  186. data/templates/guests/arch/network_static.erb +0 -7
  187. data/templates/guests/debian/network_dhcp.erb +0 -6
  188. data/templates/guests/debian/network_static.erb +0 -7
  189. data/templates/guests/fedora/network_dhcp.erb +0 -6
  190. data/templates/guests/fedora/network_static.erb +0 -13
  191. data/templates/guests/freebsd/network_dhcp.erb +0 -3
  192. data/templates/guests/freebsd/network_static.erb +0 -3
  193. data/templates/guests/gentoo/network_dhcp.erb +0 -4
  194. data/templates/guests/gentoo/network_static.erb +0 -4
  195. data/templates/guests/redhat/network_dhcp.erb +0 -6
  196. data/templates/guests/redhat/network_static.erb +0 -7
  197. data/templates/locales/en.yml +0 -759
  198. data/templates/nfs/exports.erb +0 -5
  199. data/templates/nfs/exports_freebsd.erb +0 -5
  200. data/templates/nfs/exports_linux.erb +0 -5
  201. data/templates/package_Vagrantfile.erb +0 -11
  202. data/templates/provisioners/chef_client/client.erb +0 -32
  203. data/templates/provisioners/chef_solo/solo.erb +0 -25
  204. data/test/acceptance/base.rb +0 -48
  205. data/test/acceptance/box_test.rb +0 -99
  206. data/test/acceptance/destroy_test.rb +0 -37
  207. data/test/acceptance/halt_test.rb +0 -72
  208. data/test/acceptance/init_test.rb +0 -33
  209. data/test/acceptance/networking/host_only_test.rb +0 -37
  210. data/test/acceptance/networking/port_forward_test.rb +0 -125
  211. data/test/acceptance/package_test.rb +0 -46
  212. data/test/acceptance/provisioning/basic_test.rb +0 -61
  213. data/test/acceptance/provisioning/chef_solo_test.rb +0 -37
  214. data/test/acceptance/provisioning/shell_test.rb +0 -53
  215. data/test/acceptance/resume_test.rb +0 -17
  216. data/test/acceptance/shared_folders_test.rb +0 -84
  217. data/test/acceptance/skeletons/chef_solo_basic/README.md +0 -3
  218. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +0 -5
  219. data/test/acceptance/skeletons/chef_solo_json/README.md +0 -3
  220. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +0 -6
  221. data/test/acceptance/skeletons/provisioner_multi/README.md +0 -3
  222. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +0 -5
  223. data/test/acceptance/ssh_test.rb +0 -46
  224. data/test/acceptance/support/config.rb +0 -42
  225. data/test/acceptance/support/isolated_environment.rb +0 -117
  226. data/test/acceptance/support/matchers/have_color.rb +0 -9
  227. data/test/acceptance/support/matchers/match_output.rb +0 -14
  228. data/test/acceptance/support/matchers/succeed.rb +0 -14
  229. data/test/acceptance/support/network_tests.rb +0 -29
  230. data/test/acceptance/support/output.rb +0 -95
  231. data/test/acceptance/support/shared/base_context.rb +0 -72
  232. data/test/acceptance/support/shared/command_examples.rb +0 -33
  233. data/test/acceptance/support/virtualbox.rb +0 -36
  234. data/test/acceptance/suspend_test.rb +0 -56
  235. data/test/acceptance/up_basic_test.rb +0 -33
  236. data/test/acceptance/up_with_box_url.rb +0 -40
  237. data/test/acceptance/vagrant_test.rb +0 -47
  238. data/test/acceptance/version_test.rb +0 -15
  239. data/test/buildbot/README.md +0 -72
  240. data/test/buildbot/buildbot_config/__init__.py +0 -0
  241. data/test/buildbot/buildbot_config/config/__init__.py +0 -0
  242. data/test/buildbot/buildbot_config/config/loader.py +0 -24
  243. data/test/buildbot/buildbot_config/config/master.py +0 -24
  244. data/test/buildbot/buildbot_config/config/slave.py +0 -22
  245. data/test/buildbot/buildbot_config/master/__init__.py +0 -6
  246. data/test/buildbot/buildbot_config/master/builders.py +0 -78
  247. data/test/buildbot/buildbot_config/master/buildsteps.py +0 -100
  248. data/test/buildbot/buildbot_config/master/change_sources.py +0 -8
  249. data/test/buildbot/buildbot_config/master/schedulers.py +0 -32
  250. data/test/buildbot/buildbot_config/master/slaves.py +0 -60
  251. data/test/buildbot/buildbot_config/master/status.py +0 -52
  252. data/test/buildbot/master/Makefile.sample +0 -28
  253. data/test/buildbot/master/buildbot.tac +0 -36
  254. data/test/buildbot/master/master.cfg +0 -67
  255. data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
  256. data/test/buildbot/master/public_html/default.css +0 -545
  257. data/test/buildbot/master/public_html/favicon.ico +0 -0
  258. data/test/buildbot/master/public_html/robots.txt +0 -10
  259. data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +0 -356
  260. data/test/buildbot/master/public_html/static/css/prettify.css +0 -97
  261. data/test/buildbot/master/public_html/static/css/syntax.css +0 -60
  262. data/test/buildbot/master/public_html/static/css/vagrant.base.css +0 -205
  263. data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
  264. data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
  265. data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
  266. data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
  267. data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
  268. data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
  269. data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
  270. data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
  271. data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
  272. data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
  273. data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
  274. data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
  275. data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
  276. data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
  277. data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +0 -80
  278. data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +0 -4
  279. data/test/buildbot/master/templates/authfail.html +0 -9
  280. data/test/buildbot/master/templates/build.html +0 -205
  281. data/test/buildbot/master/templates/builder.html +0 -118
  282. data/test/buildbot/master/templates/builders.html +0 -33
  283. data/test/buildbot/master/templates/buildslave.html +0 -72
  284. data/test/buildbot/master/templates/buildslaves.html +0 -70
  285. data/test/buildbot/master/templates/change.html +0 -15
  286. data/test/buildbot/master/templates/layouts/base.html +0 -58
  287. data/test/buildbot/master/templates/macros/box.html +0 -37
  288. data/test/buildbot/master/templates/macros/build_line.html +0 -50
  289. data/test/buildbot/master/templates/macros/change.html +0 -81
  290. data/test/buildbot/master/templates/macros/forms.html +0 -300
  291. data/test/buildbot/master/templates/root.html +0 -42
  292. data/test/buildbot/master/templates/waterfall.html +0 -53
  293. data/test/buildbot/requirements.txt +0 -4
  294. data/test/buildbot/scripts/deploy.sh +0 -38
  295. data/test/buildbot/scripts/setup.sh +0 -107
  296. data/test/buildbot/slave/buildbot.tac +0 -43
  297. data/test/buildbot/slave/info/admin +0 -1
  298. data/test/buildbot/slave/info/host +0 -1
  299. data/test/buildbot/tests/__init__.py +0 -0
  300. data/test/buildbot/tests/master/__init__.py +0 -0
  301. data/test/buildbot/tests/master/test_slaves.py +0 -41
  302. data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
  303. data/test/config/acceptance_boxes.yml +0 -7
  304. data/test/support/isolated_environment.rb +0 -46
  305. data/test/support/tempdir.rb +0 -34
  306. data/test/unit/base.rb +0 -21
  307. data/test/unit/support/isolated_environment.rb +0 -47
  308. data/test/unit/support/shared/base_context.rb +0 -30
  309. data/test/unit/vagrant/action/builder_test.rb +0 -156
  310. data/test/unit/vagrant/action/environment_test.rb +0 -16
  311. data/test/unit/vagrant/action/runner_test.rb +0 -65
  312. data/test/unit/vagrant/action/warden_test.rb +0 -92
  313. data/test/unit/vagrant/box_collection_test.rb +0 -56
  314. data/test/unit/vagrant/box_test.rb +0 -34
  315. data/test/unit/vagrant/command/base_test.rb +0 -150
  316. data/test/unit/vagrant/config/base_test.rb +0 -48
  317. data/test/unit/vagrant/config/loader_test.rb +0 -79
  318. data/test/unit/vagrant/config/ssh_test.rb +0 -17
  319. data/test/unit/vagrant/config/top_test.rb +0 -69
  320. data/test/unit/vagrant/config/vm_test.rb +0 -71
  321. data/test/unit/vagrant/config_test.rb +0 -27
  322. data/test/unit/vagrant/data_store_test.rb +0 -79
  323. data/test/unit/vagrant/downloaders/base_test.rb +0 -18
  324. data/test/unit/vagrant/downloaders/file_test.rb +0 -75
  325. data/test/unit/vagrant/downloaders/http_test.rb +0 -19
  326. data/test/unit/vagrant/environment_test.rb +0 -220
  327. data/test/unit/vagrant/hosts_test.rb +0 -36
  328. data/test/unit/vagrant/registry_test.rb +0 -74
  329. data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +0 -16
  330. data/test/unit/vagrant/util/file_checksum_test.rb +0 -23
  331. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +0 -38
  332. data/test/unit/vagrant/util/is_port_open_test.rb +0 -53
  333. data/test/unit/vagrant/util/line_endings_helper_test.rb +0 -16
  334. data/test/unit/vagrant/util/network_ip_test.rb +0 -17
  335. data/test/unit/vagrant/util/retryable_test.rb +0 -106
  336. data/test/unit/vagrant_test.rb +0 -27
  337. data/test/unit_legacy/locales/en.yml +0 -8
  338. data/test/unit_legacy/test_helper.rb +0 -32
  339. data/test/unit_legacy/vagrant/action/box/destroy_test.rb +0 -18
  340. data/test/unit_legacy/vagrant/action/box/download_test.rb +0 -125
  341. data/test/unit_legacy/vagrant/action/box/package_test.rb +0 -25
  342. data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +0 -84
  343. data/test/unit_legacy/vagrant/action/box/verify_test.rb +0 -30
  344. data/test/unit_legacy/vagrant/action/env/set_test.rb +0 -24
  345. data/test/unit_legacy/vagrant/action/general/package_test.rb +0 -268
  346. data/test/unit_legacy/vagrant/action/general/validate_test.rb +0 -31
  347. data/test/unit_legacy/vagrant/action/vm/boot_test.rb +0 -66
  348. data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +0 -61
  349. data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +0 -61
  350. data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +0 -9
  351. data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +0 -84
  352. data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -52
  353. data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +0 -22
  354. data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +0 -40
  355. data/test/unit_legacy/vagrant/action/vm/customize_test.rb +0 -37
  356. data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +0 -25
  357. data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -49
  358. data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +0 -45
  359. data/test/unit_legacy/vagrant/action/vm/export_test.rb +0 -107
  360. data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +0 -77
  361. data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +0 -197
  362. data/test/unit_legacy/vagrant/action/vm/halt_test.rb +0 -79
  363. data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +0 -36
  364. data/test/unit_legacy/vagrant/action/vm/import_test.rb +0 -66
  365. data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +0 -40
  366. data/test/unit_legacy/vagrant/action/vm/modify_test.rb +0 -38
  367. data/test/unit_legacy/vagrant/action/vm/network_test.rb +0 -286
  368. data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +0 -26
  369. data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +0 -260
  370. data/test/unit_legacy/vagrant/action/vm/package_test.rb +0 -25
  371. data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +0 -46
  372. data/test/unit_legacy/vagrant/action/vm/provision_test.rb +0 -65
  373. data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +0 -56
  374. data/test/unit_legacy/vagrant/action/vm/resume_test.rb +0 -35
  375. data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +0 -144
  376. data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +0 -35
  377. data/test/unit_legacy/vagrant/action_test.rb +0 -89
  378. data/test/unit_legacy/vagrant/box_collection_test.rb +0 -45
  379. data/test/unit_legacy/vagrant/box_test.rb +0 -74
  380. data/test/unit_legacy/vagrant/cli_test.rb +0 -35
  381. data/test/unit_legacy/vagrant/command/base_test.rb +0 -23
  382. data/test/unit_legacy/vagrant/command/group_base_test.rb +0 -15
  383. data/test/unit_legacy/vagrant/command/helpers_test.rb +0 -88
  384. data/test/unit_legacy/vagrant/command/init_test.rb +0 -10
  385. data/test/unit_legacy/vagrant/command/package_test.rb +0 -27
  386. data/test/unit_legacy/vagrant/config/base_test.rb +0 -52
  387. data/test/unit_legacy/vagrant/config/error_recorder_test.rb +0 -18
  388. data/test/unit_legacy/vagrant/config/ssh_test.rb +0 -12
  389. data/test/unit_legacy/vagrant/config/vagrant_test.rb +0 -35
  390. data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +0 -92
  391. data/test/unit_legacy/vagrant/config/vm_test.rb +0 -47
  392. data/test/unit_legacy/vagrant/config_test.rb +0 -148
  393. data/test/unit_legacy/vagrant/downloaders/http_test.rb +0 -93
  394. data/test/unit_legacy/vagrant/environment_test.rb +0 -539
  395. data/test/unit_legacy/vagrant/errors_test.rb +0 -42
  396. data/test/unit_legacy/vagrant/hosts/base_test.rb +0 -46
  397. data/test/unit_legacy/vagrant/hosts/bsd_test.rb +0 -53
  398. data/test/unit_legacy/vagrant/hosts/linux_test.rb +0 -54
  399. data/test/unit_legacy/vagrant/plugin_test.rb +0 -9
  400. data/test/unit_legacy/vagrant/provisioners/base_test.rb +0 -63
  401. data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +0 -190
  402. data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +0 -115
  403. data/test/unit_legacy/vagrant/provisioners/chef_test.rb +0 -209
  404. data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +0 -68
  405. data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +0 -182
  406. data/test/unit_legacy/vagrant/provisioners/shell_test.rb +0 -79
  407. data/test/unit_legacy/vagrant/ssh/session_test.rb +0 -40
  408. data/test/unit_legacy/vagrant/ssh_test.rb +0 -304
  409. data/test/unit_legacy/vagrant/systems/base_test.rb +0 -18
  410. data/test/unit_legacy/vagrant/systems/linux_test.rb +0 -104
  411. data/test/unit_legacy/vagrant/util/busy_test.rb +0 -106
  412. data/test/unit_legacy/vagrant/util/counter_test.rb +0 -29
  413. data/test/unit_legacy/vagrant/util/platform_test.rb +0 -18
  414. data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +0 -43
  415. data/test/unit_legacy/vagrant/util/template_renderer_test.rb +0 -145
  416. data/test/unit_legacy/vagrant/vm_test.rb +0 -300
@@ -1,326 +0,0 @@
1
- require 'log4r'
2
-
3
- require 'vagrant/util/busy'
4
- require 'vagrant/util/platform'
5
- require 'vagrant/util/retryable'
6
- require 'vagrant/util/subprocess'
7
-
8
- module Vagrant
9
- module Driver
10
- # Base class for all VirtualBox drivers.
11
- #
12
- # This class provides useful tools for things such as executing
13
- # VBoxManage and handling SIGINTs and so on.
14
- class VirtualBoxBase
15
- # Include this so we can use `Subprocess` more easily.
16
- include Vagrant::Util
17
- include Vagrant::Util::Retryable
18
-
19
- def initialize
20
- @logger = Log4r::Logger.new("vagrant::driver::virtualbox_base")
21
-
22
- # This flag is used to keep track of interrupted state (SIGINT)
23
- @interrupted = false
24
-
25
- # Set the path to VBoxManage
26
- @vboxmanage_path = "VBoxManage"
27
-
28
- if Util::Platform.windows?
29
- @logger.debug("Windows. Trying VBOX_INSTALL_PATH for VBoxManage")
30
-
31
- # On Windows, we use the VBOX_INSTALL_PATH environmental
32
- # variable to find VBoxManage.
33
- if ENV.has_key?("VBOX_INSTALL_PATH")
34
- # The path usually ends with a \ but we make sure here
35
- path = ENV["VBOX_INSTALL_PATH"]
36
- path += "\\" if !path.end_with?("\\")
37
- @vboxmanage_path = "#{path}VBoxManage.exe"
38
- end
39
- end
40
-
41
- @logger.info("VBoxManage path: #{@vboxmanage_path}")
42
- end
43
-
44
- # Clears the forwarded ports that have been set on the virtual machine.
45
- def clear_forwarded_ports
46
- end
47
-
48
- # Clears the shared folders that have been set on the virtual machine.
49
- def clear_shared_folders
50
- end
51
-
52
- # Creates a DHCP server for a host only network.
53
- #
54
- # @param [String] network Name of the host-only network.
55
- # @param [Hash] options Options for the DHCP server.
56
- def create_dhcp_server(network, options)
57
- end
58
-
59
- # Creates a host only network with the given options.
60
- #
61
- # @param [Hash] options Options to create the host only network.
62
- # @return [Hash] The details of the host only network, including
63
- # keys `:name`, `:ip`, and `:netmask`
64
- def create_host_only_network(options)
65
- end
66
-
67
- # Deletes the virtual machine references by this driver.
68
- def delete
69
- end
70
-
71
- # Deletes any host only networks that aren't being used for anything.
72
- def delete_unused_host_only_networks
73
- end
74
-
75
- # Discards any saved state associated with this VM.
76
- def discard_saved_state
77
- end
78
-
79
- # Enables network adapters on the VM.
80
- #
81
- # The format of each adapter specification should be like so:
82
- #
83
- # {
84
- # :type => :hostonly,
85
- # :hostonly => "vboxnet0",
86
- # :mac_address => "tubes"
87
- # }
88
- #
89
- # This must support setting up both host only and bridged networks.
90
- #
91
- # @param [Array<Hash>] adapters Array of adapters to enable.
92
- def enable_adapters(adapters)
93
- end
94
-
95
- # Execute a raw command straight through to VBoxManage.
96
- #
97
- # @param [Array] command Command to execute.
98
- def execute_command(command)
99
- end
100
-
101
- # Exports the virtual machine to the given path.
102
- #
103
- # @param [String] path Path to the OVF file.
104
- # @yield [progress] Yields the block with the progress of the export.
105
- def export(path)
106
- end
107
-
108
- # Forwards a set of ports for a VM.
109
- #
110
- # This will not affect any previously set forwarded ports,
111
- # so be sure to delete those if you need to.
112
- #
113
- # The format of each port hash should be the following:
114
- #
115
- # {
116
- # :name => "foo",
117
- # :hostport => 8500,
118
- # :guestport => 80,
119
- # :adapter => 1,
120
- # :protocol => "tcp"
121
- # }
122
- #
123
- # Note that "adapter" and "protocol" are optional and will default
124
- # to 1 and "tcp" respectively.
125
- #
126
- # @param [Array<Hash>] ports An array of ports to set. See documentation
127
- # for more information on the format.
128
- def forward_ports(ports)
129
- end
130
-
131
- # Halts the virtual machine (pulls the plug).
132
- def halt
133
- end
134
-
135
- # Imports the VM from an OVF file.
136
- #
137
- # @param [String] ovf Path to the OVF file.
138
- # @return [String] UUID of the imported VM.
139
- def import(ovf)
140
- end
141
-
142
- # Returns a list of forwarded ports for a VM.
143
- #
144
- # @param [String] uuid UUID of the VM to read from, or `nil` if this
145
- # VM.
146
- # @param [Boolean] active_only If true, only VMs that are running will
147
- # be checked.
148
- # @return [Array<Array>]
149
- def read_forwarded_ports(uuid=nil, active_only=false)
150
- end
151
-
152
- # Returns a list of bridged interfaces.
153
- #
154
- # @return [Hash]
155
- def read_bridged_interfaces
156
- end
157
-
158
- # Returns the guest additions version that is installed on this VM.
159
- #
160
- # @return [String]
161
- def read_guest_additions_version
162
- end
163
-
164
- # Returns a list of available host only interfaces.
165
- #
166
- # @return [Hash]
167
- def read_host_only_interfaces
168
- end
169
-
170
- # Returns the MAC address of the first network interface.
171
- #
172
- # @return [String]
173
- def read_mac_address
174
- end
175
-
176
- # Returns the folder where VirtualBox places it's VMs.
177
- #
178
- # @return [String]
179
- def read_machine_folder
180
- end
181
-
182
- # Returns a list of network interfaces of the VM.
183
- #
184
- # @return [Hash]
185
- def read_network_interfaces
186
- end
187
-
188
- # Returns the current state of this VM.
189
- #
190
- # @return [Symbol]
191
- def read_state
192
- end
193
-
194
- # Returns a list of all forwarded ports in use by active
195
- # virtual machines.
196
- #
197
- # @return [Array]
198
- def read_used_ports
199
- end
200
-
201
- # Returns a list of all UUIDs of virtual machines currently
202
- # known by VirtualBox.
203
- #
204
- # @return [Array<String>]
205
- def read_vms
206
- end
207
-
208
- # Sets the MAC address of the first network adapter.
209
- #
210
- # @param [String] mac MAC address without any spaces/hyphens.
211
- def set_mac_address(mac)
212
- end
213
-
214
- # Share a set of folders on this VM.
215
- #
216
- # @param [Array<Hash>] folders
217
- def share_folders(folders)
218
- end
219
-
220
- # Reads the SSH port of this VM.
221
- #
222
- # @param [Integer] expected Expected guest port of SSH.
223
- def ssh_port(expected)
224
- end
225
-
226
- # Starts the virtual machine.
227
- #
228
- # @param [String] mode Mode to boot the VM. Either "headless"
229
- # or "gui"
230
- def start(mode)
231
- end
232
-
233
- # Suspend the virtual machine.
234
- def suspend
235
- end
236
-
237
- # Verifies that the driver is ready to accept work.
238
- #
239
- # This should raise a VagrantError if things are not ready.
240
- def verify!
241
- end
242
-
243
- # Verifies that an image can be imported properly.
244
- #
245
- # @param [String] path Path to an OVF file.
246
- # @return [Boolean]
247
- def verify_image(path)
248
- end
249
-
250
- # Checks if a VM with the given UUID exists.
251
- #
252
- # @return [Boolean]
253
- def vm_exists?(uuid)
254
- end
255
-
256
- # Execute the given subcommand for VBoxManage and return the output.
257
- def execute(*command, &block)
258
- # Get the options hash if it exists
259
- opts = {}
260
- opts = command.pop if command.last.is_a?(Hash)
261
-
262
- tries = 0
263
- tries = 3 if opts[:retryable]
264
-
265
- # Variable to store our execution result
266
- r = nil
267
-
268
- retryable(:on => Errors::VBoxManageError, :tries => tries, :sleep => 1) do
269
- # Execute the command
270
- r = raw(*command, &block)
271
-
272
- # If the command was a failure, then raise an exception that is
273
- # nicely handled by Vagrant.
274
- if r.exit_code != 0
275
- if @interrupted
276
- @logger.info("Exit code != 0, but interrupted. Ignoring.")
277
- else
278
- raise Errors::VBoxManageError, :command => command.inspect
279
- end
280
- else
281
- # Sometimes, VBoxManage fails but doesn't actual return a non-zero
282
- # exit code. For this we inspect the output and determine if an error
283
- # occurred.
284
- if r.stderr =~ /VBoxManage: error:/
285
- @logger.info("VBoxManage error text found, assuming error.")
286
- raise Errors::VBoxManageError, :command => command.inspect
287
- end
288
- end
289
- end
290
-
291
- # Return the output, making sure to replace any Windows-style
292
- # newlines with Unix-style.
293
- r.stdout.gsub("\r\n", "\n")
294
- end
295
-
296
- # Executes a command and returns the raw result object.
297
- def raw(*command, &block)
298
- int_callback = lambda do
299
- @interrupted = true
300
- @logger.info("Interrupted.")
301
- end
302
-
303
- # The following is a workaround for a combined VirtualBox and
304
- # Mac OS X 10.8 bug:
305
- #
306
- # Remove the DYLD_LIBRARY_PATH environmental variable on Mac. This
307
- # is to fix a bug in Mac OS X 10.8 where a warning is printed to the
308
- # console if this is set when executing certain programs, which
309
- # can cause some VBoxManage commands to break because they work
310
- # by just reading stdout and don't expect the OS to just inject
311
- # garbage into it.
312
- old_dyld_lib_path = ENV.delete("DYLD_LIBRARY_PATH")
313
- old_ld_lib_path = ENV.delete("LD_LIBRARY_PATH")
314
-
315
- Util::Busy.busy(int_callback) do
316
- Subprocess.execute(@vboxmanage_path, *command, &block)
317
- end
318
- ensure
319
- # Reset the library path if it was set before. See above comments
320
- # for more information on why this was unset in the first place.
321
- ENV["DYLD_LIBRARY_PATH"] = old_dyld_lib_path if old_dyld_lib_path
322
- ENV["LD_LIBRARY_PATH"] = old_ld_lib_path if old_ld_lib_path
323
- end
324
- end
325
- end
326
- end
@@ -1,522 +0,0 @@
1
- require 'pathname'
2
- require 'fileutils'
3
-
4
- require 'log4r'
5
- require 'rubygems' # This is needed for plugin loading below.
6
-
7
- require 'vagrant/util/file_mode'
8
- require 'vagrant/util/platform'
9
-
10
- module Vagrant
11
- # Represents a single Vagrant environment. A "Vagrant environment" is
12
- # defined as basically a folder with a "Vagrantfile." This class allows
13
- # access to the VMs, CLI, etc. all in the scope of this environment.
14
- class Environment
15
- HOME_SUBDIRS = ["tmp", "boxes", "gems"]
16
- DEFAULT_VM = :default
17
- DEFAULT_HOME = "~/.vagrant.d"
18
-
19
- # The `cwd` that this environment represents
20
- attr_reader :cwd
21
-
22
- # The valid name for a Vagrantfile for this environment.
23
- attr_reader :vagrantfile_name
24
-
25
- # The {UI} object to communicate with the outside world.
26
- attr_reader :ui
27
-
28
- # The directory to the "home" folder that Vagrant will use to store
29
- # global state.
30
- attr_reader :home_path
31
-
32
- # The directory where temporary files for Vagrant go.
33
- attr_reader :tmp_path
34
-
35
- # The directory where boxes are stored.
36
- attr_reader :boxes_path
37
-
38
- # The path where the plugins are stored (gems)
39
- attr_reader :gems_path
40
-
41
- # The path to the default private key
42
- attr_reader :default_private_key_path
43
-
44
- # Initializes a new environment with the given options. The options
45
- # is a hash where the main available key is `cwd`, which defines where
46
- # the environment represents. There are other options available but
47
- # they shouldn't be used in general. If `cwd` is nil, then it defaults
48
- # to the `Dir.pwd` (which is the cwd of the executing process).
49
- def initialize(opts=nil)
50
- opts = {
51
- :cwd => nil,
52
- :vagrantfile_name => nil,
53
- :lock_path => nil,
54
- :ui_class => nil,
55
- :home_path => nil
56
- }.merge(opts || {})
57
-
58
- # Set the default working directory to look for the vagrantfile
59
- opts[:cwd] ||= ENV["VAGRANT_CWD"] if ENV.has_key?("VAGRANT_CWD")
60
- opts[:cwd] ||= Dir.pwd
61
- opts[:cwd] = Pathname.new(opts[:cwd])
62
- raise Errors::EnvironmentNonExistentCWD if !opts[:cwd].directory?
63
-
64
- # Set the Vagrantfile name up. We append "Vagrantfile" and "vagrantfile" so that
65
- # those continue to work as well, but anything custom will take precedence.
66
- opts[:vagrantfile_name] ||= []
67
- opts[:vagrantfile_name] = [opts[:vagrantfile_name]] if !opts[:vagrantfile_name].is_a?(Array)
68
- opts[:vagrantfile_name] += ["Vagrantfile", "vagrantfile"]
69
-
70
- # Set instance variables for all the configuration parameters.
71
- @cwd = opts[:cwd]
72
- @vagrantfile_name = opts[:vagrantfile_name]
73
- @lock_path = opts[:lock_path]
74
- @home_path = opts[:home_path]
75
-
76
- ui_class = opts[:ui_class] || UI::Silent
77
- @ui = ui_class.new("vagrant")
78
-
79
- @loaded = false
80
- @lock_acquired = false
81
-
82
- @logger = Log4r::Logger.new("vagrant::environment")
83
- @logger.info("Environment initialized (#{self})")
84
- @logger.info(" - cwd: #{cwd}")
85
-
86
- # Setup the home directory
87
- setup_home_path
88
- @tmp_path = @home_path.join("tmp")
89
- @boxes_path = @home_path.join("boxes")
90
- @gems_path = @home_path.join("gems")
91
-
92
- # Setup the default private key
93
- @default_private_key_path = @home_path.join("insecure_private_key")
94
- copy_insecure_private_key
95
-
96
- # Load the plugins
97
- load_plugins
98
- end
99
-
100
- #---------------------------------------------------------------
101
- # Helpers
102
- #---------------------------------------------------------------
103
-
104
- # The path to the `dotfile`, which contains the persisted UUID of
105
- # the VM if it exists.
106
- #
107
- # @return [Pathname]
108
- def dotfile_path
109
- return nil if !root_path
110
- root_path.join(config.global.vagrant.dotfile_name)
111
- end
112
-
113
- # Returns the collection of boxes for the environment.
114
- #
115
- # @return [BoxCollection]
116
- def boxes
117
- @_boxes ||= BoxCollection.new(boxes_path, action_runner)
118
- end
119
-
120
- # Returns the VMs associated with this environment.
121
- #
122
- # @return [Hash<Symbol,VM>]
123
- def vms
124
- load! if !loaded?
125
- @vms ||= load_vms!
126
- end
127
-
128
- # Returns the VMs associated with this environment, in the order
129
- # that they were defined.
130
- #
131
- # @return [Array<VM>]
132
- def vms_ordered
133
- return @vms.values if !multivm?
134
- @vms_enum ||= config.global.vm.defined_vm_keys.map { |name| @vms[name] }
135
- end
136
-
137
- # Returns the primary VM associated with this environment. This
138
- # method is only applicable for multi-VM environments. This can
139
- # potentially be nil if no primary VM is specified.
140
- #
141
- # @return [VM]
142
- def primary_vm
143
- return vms.values.first if !multivm?
144
-
145
- config.global.vm.defined_vms.each do |name, subvm|
146
- return vms[name] if subvm.options[:primary]
147
- end
148
-
149
- nil
150
- end
151
-
152
- # Returns a boolean whether this environment represents a multi-VM
153
- # environment or not. This will work even when called on child
154
- # environments.
155
- #
156
- # @return [Bool]
157
- def multivm?
158
- vms.length > 1 || vms.keys.first != DEFAULT_VM
159
- end
160
-
161
- # Makes a call to the CLI with the given arguments as if they
162
- # came from the real command line (sometimes they do!). An example:
163
- #
164
- # env.cli("package", "--vagrantfile", "Vagrantfile")
165
- #
166
- def cli(*args)
167
- CLI.new(args.flatten, self).execute
168
- end
169
-
170
- # Returns the host object associated with this environment.
171
- #
172
- # @return [Hosts::Base]
173
- def host
174
- return @host if defined?(@host)
175
-
176
- # Attempt to figure out the host class. Note that the order
177
- # matters here, so please don't touch. Specifically: The symbol
178
- # check is done after the detect check because the symbol check
179
- # will return nil, and we don't want to trigger a detect load.
180
- host_klass = config.global.vagrant.host
181
- host_klass = Hosts.detect(Vagrant.hosts) if host_klass.nil? || host_klass == :detect
182
- host_klass = Vagrant.hosts.get(host_klass) if host_klass.is_a?(Symbol)
183
-
184
- # If no host class is detected, we use the base class.
185
- host_klass ||= Hosts::Base
186
-
187
- @host ||= host_klass.new(@ui)
188
- end
189
-
190
- # Action runner for executing actions in the context of this environment.
191
- #
192
- # @return [Action::Runner]
193
- def action_runner
194
- @action_runner ||= Action::Runner.new(action_registry) do
195
- {
196
- :action_runner => action_runner,
197
- :box_collection => boxes,
198
- :global_config => config.global,
199
- :host => host,
200
- :root_path => root_path,
201
- :tmp_path => tmp_path,
202
- :ui => @ui
203
- }
204
- end
205
- end
206
-
207
- # Action registry for registering new actions with this environment.
208
- #
209
- # @return [Registry]
210
- def action_registry
211
- # For now we return the global built-in actions registry. In the future
212
- # we may want to create an isolated registry that inherits from this
213
- # global one, but for now there isn't a use case that calls for it.
214
- Vagrant.actions
215
- end
216
-
217
- # Loads on initial access and reads data from the global data store.
218
- # The global data store is global to Vagrant everywhere (in every environment),
219
- # so it can be used to store system-wide information. Note that "system-wide"
220
- # typically means "for this user" since the location of the global data
221
- # store is in the home directory.
222
- #
223
- # @return [DataStore]
224
- def global_data
225
- @global_data ||= DataStore.new(File.expand_path("global_data.json", home_path))
226
- end
227
-
228
- # Loads (on initial access) and reads data from the local data
229
- # store. This file is always at the root path as the file "~/.vagrant"
230
- # and contains a JSON dump of a hash. See {DataStore} for more
231
- # information.
232
- #
233
- # @return [DataStore]
234
- def local_data
235
- @local_data ||= DataStore.new(dotfile_path)
236
- end
237
-
238
- # The root path is the path where the top-most (loaded last)
239
- # Vagrantfile resides. It can be considered the project root for
240
- # this environment.
241
- #
242
- # @return [String]
243
- def root_path
244
- return @root_path if defined?(@root_path)
245
-
246
- root_finder = lambda do |path|
247
- # Note: To remain compatible with Ruby 1.8, we have to use
248
- # a `find` here instead of an `each`.
249
- found = vagrantfile_name.find do |rootfile|
250
- File.exist?(File.join(path.to_s, rootfile))
251
- end
252
-
253
- return path if found
254
- return nil if path.root? || !File.exist?(path)
255
- root_finder.call(path.parent)
256
- end
257
-
258
- @root_path = root_finder.call(cwd)
259
- end
260
-
261
- # This returns the path which Vagrant uses to determine the location
262
- # of the file lock. This is specific to each operating system.
263
- def lock_path
264
- @lock_path || tmp_path.join("vagrant.lock")
265
- end
266
-
267
- # This locks Vagrant for the duration of the block passed to this
268
- # method. During this time, any other environment which attempts
269
- # to lock which points to the same lock file will fail.
270
- def lock
271
- # This allows multiple locks in the same process to be nested
272
- return yield if @lock_acquired
273
-
274
- File.open(lock_path, "w+") do |f|
275
- # The file locking fails only if it returns "false." If it
276
- # succeeds it returns a 0, so we must explicitly check for
277
- # the proper error case.
278
- raise Errors::EnvironmentLockedError if f.flock(File::LOCK_EX | File::LOCK_NB) === false
279
-
280
- begin
281
- # Mark that we have a lock
282
- @lock_acquired = true
283
-
284
- yield
285
- ensure
286
- # We need to make sure that no matter what this is always
287
- # reset to false so we don't think we have a lock when we
288
- # actually don't.
289
- @lock_acquired = false
290
- end
291
- end
292
- end
293
-
294
- #---------------------------------------------------------------
295
- # Config Methods
296
- #---------------------------------------------------------------
297
-
298
- # The configuration object represented by this environment. This
299
- # will trigger the environment to load if it hasn't loaded yet (see
300
- # {#load!}).
301
- #
302
- # @return [Config::Container]
303
- def config
304
- load! if !loaded?
305
- @config
306
- end
307
-
308
- #---------------------------------------------------------------
309
- # Load Methods
310
- #---------------------------------------------------------------
311
-
312
- # Returns a boolean representing if the environment has been
313
- # loaded or not.
314
- #
315
- # @return [Bool]
316
- def loaded?
317
- !!@loaded
318
- end
319
-
320
- # Loads this entire environment, setting up the instance variables
321
- # such as `vm`, `config`, etc. on this environment. The order this
322
- # method calls its other methods is very particular.
323
- def load!
324
- if !loaded?
325
- @loaded = true
326
- @logger.info("Loading configuration...")
327
- load_config!
328
- end
329
-
330
- self
331
- end
332
-
333
- # Reloads the configuration of this environment.
334
- def reload!
335
- # Reload the configuration
336
- load_config!
337
-
338
- # Clear the VMs because this can now be diferent due to configuration
339
- @vms = nil
340
- end
341
-
342
- # Loads this environment's configuration and stores it in the {#config}
343
- # variable. The configuration loaded by this method is specified to
344
- # this environment, meaning that it will use the given root directory
345
- # to load the Vagrantfile into that context.
346
- def load_config!
347
- # Initialize the config loader
348
- config_loader = Config::Loader.new
349
- config_loader.load_order = [:default, :box, :home, :root, :vm]
350
-
351
- inner_load = lambda do |*args|
352
- # This is for Ruby 1.8.7 compatibility. Ruby 1.8.7 doesn't allow
353
- # default arguments for lambdas, so we get around by doing a *args
354
- # and setting the args here.
355
- subvm = args[0]
356
- box = args[1]
357
-
358
- # Default Vagrantfile first. This is the Vagrantfile that ships
359
- # with Vagrant.
360
- config_loader.set(:default, File.expand_path("config/default.rb", Vagrant.source_root))
361
-
362
- if box
363
- # We load the box Vagrantfile
364
- box_vagrantfile = find_vagrantfile(box.directory)
365
- config_loader.set(:box, box_vagrantfile) if box_vagrantfile
366
- end
367
-
368
- if home_path
369
- # Load the home Vagrantfile
370
- home_vagrantfile = find_vagrantfile(home_path)
371
- config_loader.set(:home, home_vagrantfile) if home_vagrantfile
372
- end
373
-
374
- if root_path
375
- # Load the Vagrantfile in this directory
376
- root_vagrantfile = find_vagrantfile(root_path)
377
- config_loader.set(:root, root_vagrantfile) if root_vagrantfile
378
- end
379
-
380
- if subvm
381
- # We have subvm configuration, so set that up as well.
382
- config_loader.set(:vm, subvm.proc_stack)
383
- end
384
-
385
- # Execute the configuration stack and store the result as the final
386
- # value in the config ivar.
387
- config_loader.load
388
- end
389
-
390
- # For the global configuration, we only need to load the configuration
391
- # in a single pass, since nothing is conditional on the configuration.
392
- global = inner_load.call
393
-
394
- # For each virtual machine represented by this environment, we have
395
- # to load the configuration in two-passes. We do this because the
396
- # first pass is used to determine the box for the VM. The second pass
397
- # is used to also load the box Vagrantfile.
398
- defined_vm_keys = global.vm.defined_vm_keys.dup
399
- defined_vms = global.vm.defined_vms.dup
400
-
401
- # If this isn't a multi-VM environment, then setup the default VM
402
- # to simply be our configuration.
403
- if defined_vm_keys.empty?
404
- defined_vm_keys << DEFAULT_VM
405
- defined_vms[DEFAULT_VM] = Config::VMConfig::SubVM.new
406
- end
407
-
408
- vm_configs = defined_vm_keys.map do |vm_name|
409
- @logger.debug("Loading configuration for VM: #{vm_name}")
410
-
411
- subvm = defined_vms[vm_name]
412
-
413
- # First pass, first run.
414
- config = inner_load[subvm]
415
-
416
- # Second pass, with the box
417
- config = inner_load[subvm, boxes.find(config.vm.box)]
418
- config.vm.name = vm_name
419
-
420
- # Return the final configuration for this VM
421
- config
422
- end
423
-
424
- # Finally, we have our configuration. Set it and forget it.
425
- @config = Config::Container.new(global, vm_configs)
426
- end
427
-
428
- # Loads the persisted VM (if it exists) for this environment.
429
- def load_vms!
430
- result = {}
431
-
432
- # Load all the virtual machine instances.
433
- config.vms.each do |name|
434
- result[name] = Vagrant::VM.new(name, self, config.for_vm(name))
435
- end
436
-
437
- result
438
- end
439
-
440
- # This sets the `@home_path` variable properly.
441
- #
442
- # @return [Pathname]
443
- def setup_home_path
444
- @home_path = Pathname.new(File.expand_path(@home_path ||
445
- ENV["VAGRANT_HOME"] ||
446
- DEFAULT_HOME))
447
- @logger.info("Home path: #{@home_path}")
448
-
449
- # If the setup_version file exists, then we can't load because we're
450
- # not forward compatible. It means they ran a future version of Vagrant.
451
- raise Errors::IncompatibleWithFutureVersion, :path => @home_path.to_s if \
452
- @home_path.join("setup_version").file?
453
-
454
- # Setup the array of necessary home directories
455
- dirs = [@home_path]
456
- dirs += HOME_SUBDIRS.collect { |subdir| @home_path.join(subdir) }
457
-
458
- # Go through each required directory, creating it if it doesn't exist
459
- dirs.each do |dir|
460
- next if File.directory?(dir)
461
-
462
- begin
463
- @logger.info("Creating: #{dir}")
464
- FileUtils.mkdir_p(dir)
465
- rescue Errno::EACCES
466
- raise Errors::HomeDirectoryNotAccessible, :home_path => @home_path.to_s
467
- end
468
- end
469
- end
470
-
471
- protected
472
-
473
- # This method copies the private key into the home directory if it
474
- # doesn't already exist.
475
- #
476
- # This must be done because `ssh` requires that the key is chmod
477
- # 0600, but if Vagrant is installed as a separate user, then the
478
- # effective uid won't be able to read the key. So the key is copied
479
- # to the home directory and chmod 0600.
480
- def copy_insecure_private_key
481
- if !@default_private_key_path.exist?
482
- @logger.info("Copying private key to home directory")
483
- FileUtils.cp(File.expand_path("keys/vagrant", Vagrant.source_root),
484
- @default_private_key_path)
485
- end
486
-
487
- if !Util::Platform.windows?
488
- # On Windows, permissions don't matter as much, so don't worry
489
- # about doing chmod.
490
- if Util::FileMode.from_octal(@default_private_key_path.stat.mode) != "600"
491
- @logger.info("Changing permissions on private key to 0600")
492
- @default_private_key_path.chmod(0600)
493
- end
494
- end
495
- end
496
-
497
- # Finds the Vagrantfile in the given directory.
498
- #
499
- # @param [Pathname] path Path to search in.
500
- # @return [Pathname]
501
- def find_vagrantfile(search_path)
502
- @vagrantfile_name.each do |vagrantfile|
503
- current_path = search_path.join(vagrantfile)
504
- return current_path if current_path.exist?
505
- end
506
-
507
- nil
508
- end
509
-
510
- # Loads the Vagrant plugins by properly setting up RubyGems so that
511
- # our private gem repository is on the path.
512
- def load_plugins
513
- # Add our private gem path to the gem path and reset the paths
514
- # that Rubygems knows about.
515
- ENV["GEM_PATH"] = "#{@gems_path}#{::File::PATH_SEPARATOR}#{ENV["GEM_PATH"]}"
516
- ::Gem.clear_paths
517
-
518
- # Load the plugins
519
- Plugin.load!
520
- end
521
- end
522
- end