vagrant 0.8.10 → 0.9.0

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 (324) hide show
  1. data/CHANGELOG.md +77 -1
  2. data/Gemfile +0 -14
  3. data/LICENSE +1 -1
  4. data/bin/vagrant +47 -20
  5. data/config/default.rb +6 -14
  6. data/lib/vagrant.rb +132 -5
  7. data/lib/vagrant/action.rb +45 -123
  8. data/lib/vagrant/action/box/destroy.rb +7 -3
  9. data/lib/vagrant/action/box/download.rb +8 -8
  10. data/lib/vagrant/action/box/package.rb +2 -2
  11. data/lib/vagrant/action/box/unpackage.rb +13 -7
  12. data/lib/vagrant/action/box/verify.rb +5 -5
  13. data/lib/vagrant/action/builder.rb +23 -19
  14. data/lib/vagrant/action/builtin.rb +117 -79
  15. data/lib/vagrant/action/env/set.rb +7 -4
  16. data/lib/vagrant/action/environment.rb +3 -41
  17. data/lib/vagrant/action/general/package.rb +14 -29
  18. data/lib/vagrant/action/general/validate.rb +2 -2
  19. data/lib/vagrant/action/runner.rb +53 -0
  20. data/lib/vagrant/action/vm/boot.rb +9 -9
  21. data/lib/vagrant/action/vm/check_accessible.rb +2 -2
  22. data/lib/vagrant/action/vm/check_box.rb +10 -12
  23. data/lib/vagrant/action/vm/check_guest_additions.rb +8 -8
  24. data/lib/vagrant/action/vm/check_port_collisions.rb +85 -0
  25. data/lib/vagrant/action/vm/clean_machine_folder.rb +4 -4
  26. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +3 -11
  27. data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
  28. data/lib/vagrant/action/vm/clear_shared_folders.rb +2 -11
  29. data/lib/vagrant/action/vm/customize.rb +19 -9
  30. data/lib/vagrant/action/vm/destroy.rb +4 -4
  31. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +2 -12
  32. data/lib/vagrant/action/vm/discard_state.rb +4 -4
  33. data/lib/vagrant/action/vm/export.rb +13 -8
  34. data/lib/vagrant/action/vm/forward_ports.rb +55 -102
  35. data/lib/vagrant/action/vm/halt.rb +9 -6
  36. data/lib/vagrant/action/vm/host_name.rb +4 -4
  37. data/lib/vagrant/action/vm/import.rb +19 -10
  38. data/lib/vagrant/action/vm/match_mac_address.rb +4 -9
  39. data/lib/vagrant/action/vm/network.rb +300 -94
  40. data/lib/vagrant/action/vm/nfs.rb +41 -26
  41. data/lib/vagrant/action/vm/package.rb +1 -1
  42. data/lib/vagrant/action/vm/package_vagrantfile.rb +5 -2
  43. data/lib/vagrant/action/vm/provision.rb +42 -13
  44. data/lib/vagrant/action/vm/provisioner_cleanup.rb +2 -2
  45. data/lib/vagrant/action/vm/{clear_nfs_exports.rb → prune_nfs_exports.rb} +7 -7
  46. data/lib/vagrant/action/vm/resume.rb +4 -4
  47. data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
  48. data/lib/vagrant/action/vm/share_folders.rb +63 -39
  49. data/lib/vagrant/action/vm/suspend.rb +4 -4
  50. data/lib/vagrant/action/warden.rb +13 -6
  51. data/lib/vagrant/box.rb +9 -55
  52. data/lib/vagrant/box_collection.rb +22 -17
  53. data/lib/vagrant/cli.rb +62 -47
  54. data/lib/vagrant/command.rb +18 -20
  55. data/lib/vagrant/command/base.rb +135 -90
  56. data/lib/vagrant/command/box.rb +46 -21
  57. data/lib/vagrant/command/box_add.rb +33 -0
  58. data/lib/vagrant/command/box_list.rb +25 -0
  59. data/lib/vagrant/command/box_remove.rb +23 -0
  60. data/lib/vagrant/command/box_repackage.rb +23 -0
  61. data/lib/vagrant/command/destroy.rb +16 -5
  62. data/lib/vagrant/command/halt.rb +25 -7
  63. data/lib/vagrant/command/init.rb +30 -7
  64. data/lib/vagrant/command/package.rb +49 -18
  65. data/lib/vagrant/command/provision.rb +22 -9
  66. data/lib/vagrant/command/reload.rb +18 -5
  67. data/lib/vagrant/command/resume.rb +18 -5
  68. data/lib/vagrant/command/ssh.rb +69 -31
  69. data/lib/vagrant/command/ssh_config.rb +37 -22
  70. data/lib/vagrant/command/status.rb +22 -20
  71. data/lib/vagrant/command/suspend.rb +18 -5
  72. data/lib/vagrant/command/up.rb +41 -8
  73. data/lib/vagrant/communication.rb +7 -0
  74. data/lib/vagrant/communication/base.rb +56 -0
  75. data/lib/vagrant/communication/ssh.rb +200 -0
  76. data/lib/vagrant/config.rb +29 -103
  77. data/lib/vagrant/config/base.rb +18 -26
  78. data/lib/vagrant/config/container.rb +37 -0
  79. data/lib/vagrant/config/error_recorder.rb +1 -1
  80. data/lib/vagrant/config/loader.rb +125 -0
  81. data/lib/vagrant/config/nfs.rb +1 -3
  82. data/lib/vagrant/config/package.rb +1 -3
  83. data/lib/vagrant/config/ssh.rb +31 -16
  84. data/lib/vagrant/config/top.rb +36 -25
  85. data/lib/vagrant/config/vagrant.rb +2 -5
  86. data/lib/vagrant/config/vm.rb +115 -56
  87. data/lib/vagrant/config/vm/provisioner.rb +16 -20
  88. data/lib/vagrant/config/vm/sub_vm.rb +1 -1
  89. data/lib/vagrant/data_store.rb +23 -15
  90. data/lib/vagrant/downloaders/base.rb +7 -5
  91. data/lib/vagrant/downloaders/file.rb +4 -4
  92. data/lib/vagrant/downloaders/http.rb +4 -5
  93. data/lib/vagrant/driver.rb +7 -0
  94. data/lib/vagrant/driver/virtualbox.rb +121 -0
  95. data/lib/vagrant/driver/virtualbox_4_0.rb +411 -0
  96. data/lib/vagrant/driver/virtualbox_4_1.rb +411 -0
  97. data/lib/vagrant/driver/virtualbox_base.rb +284 -0
  98. data/lib/vagrant/environment.rb +221 -240
  99. data/lib/vagrant/errors.rb +74 -25
  100. data/lib/vagrant/guest.rb +16 -0
  101. data/lib/vagrant/guest/arch.rb +48 -0
  102. data/lib/vagrant/{systems → guest}/base.rb +30 -18
  103. data/lib/vagrant/guest/debian.rb +61 -0
  104. data/lib/vagrant/{systems → guest}/freebsd.rb +11 -18
  105. data/lib/vagrant/guest/gentoo.rb +32 -0
  106. data/lib/vagrant/guest/linux.rb +78 -0
  107. data/lib/vagrant/{systems → guest}/linux/config.rb +2 -4
  108. data/lib/vagrant/guest/linux/error.rb +9 -0
  109. data/lib/vagrant/guest/redhat.rb +66 -0
  110. data/lib/vagrant/guest/solaris.rb +114 -0
  111. data/lib/vagrant/{systems → guest}/suse.rb +2 -2
  112. data/lib/vagrant/guest/ubuntu.rb +23 -0
  113. data/lib/vagrant/hosts.rb +23 -6
  114. data/lib/vagrant/hosts/arch.rb +7 -3
  115. data/lib/vagrant/hosts/base.rb +36 -46
  116. data/lib/vagrant/hosts/bsd.rb +53 -16
  117. data/lib/vagrant/hosts/fedora.rb +14 -0
  118. data/lib/vagrant/hosts/freebsd.rb +6 -36
  119. data/lib/vagrant/hosts/linux.rb +45 -20
  120. data/lib/vagrant/hosts/windows.rb +16 -0
  121. data/lib/vagrant/provisioners.rb +10 -7
  122. data/lib/vagrant/provisioners/base.rb +11 -34
  123. data/lib/vagrant/provisioners/chef.rb +30 -26
  124. data/lib/vagrant/provisioners/chef_client.rb +37 -23
  125. data/lib/vagrant/provisioners/chef_solo.rb +61 -16
  126. data/lib/vagrant/provisioners/puppet.rb +70 -38
  127. data/lib/vagrant/provisioners/puppet_server.rb +12 -13
  128. data/lib/vagrant/provisioners/shell.rb +24 -24
  129. data/lib/vagrant/registry.rb +49 -0
  130. data/lib/vagrant/ssh.rb +82 -153
  131. data/lib/vagrant/ui.rb +118 -50
  132. data/lib/vagrant/util/busy.rb +1 -1
  133. data/lib/vagrant/util/file_mode.rb +12 -0
  134. data/lib/vagrant/util/network_ip.rb +28 -0
  135. data/lib/vagrant/util/platform.rb +1 -0
  136. data/lib/vagrant/util/subprocess.rb +227 -0
  137. data/lib/vagrant/version.rb +1 -1
  138. data/lib/vagrant/vm.rb +111 -97
  139. data/tasks/acceptance.rake +3 -3
  140. data/tasks/test.rake +7 -2
  141. data/templates/commands/init/Vagrantfile.erb +11 -4
  142. data/templates/{ssh_config.erb → commands/ssh_config/config.erb} +0 -0
  143. data/templates/guests/arch/network_dhcp.erb +7 -0
  144. data/templates/guests/arch/network_static.erb +7 -0
  145. data/templates/guests/debian/network_dhcp.erb +6 -0
  146. data/templates/guests/debian/network_static.erb +7 -0
  147. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  148. data/templates/guests/gentoo/network_static.erb +4 -0
  149. data/templates/guests/redhat/network_dhcp.erb +6 -0
  150. data/templates/guests/redhat/network_static.erb +7 -0
  151. data/templates/locales/en.yml +241 -122
  152. data/templates/{chef_server_client.erb → provisioners/chef_client/client.erb} +0 -0
  153. data/templates/{chef_solo_solo.erb → provisioners/chef_solo/solo.erb} +0 -0
  154. data/test/acceptance/base.rb +10 -10
  155. data/test/acceptance/box_test.rb +28 -6
  156. data/test/acceptance/destroy_test.rb +1 -1
  157. data/test/acceptance/halt_test.rb +4 -4
  158. data/test/acceptance/init_test.rb +3 -3
  159. data/test/acceptance/networking/host_only_test.rb +37 -0
  160. data/test/acceptance/networking/port_forward_test.rb +125 -0
  161. data/test/acceptance/package_test.rb +46 -0
  162. data/test/acceptance/provisioning/basic_test.rb +61 -0
  163. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  164. data/test/acceptance/provisioning/shell_test.rb +53 -0
  165. data/test/acceptance/resume_test.rb +1 -1
  166. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  167. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  168. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  169. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  170. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  171. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  172. data/test/acceptance/ssh_test.rb +7 -2
  173. data/test/acceptance/support/config.rb +1 -1
  174. data/test/acceptance/support/isolated_environment.rb +41 -150
  175. data/test/acceptance/support/matchers/match_output.rb +1 -1
  176. data/test/acceptance/support/matchers/succeed.rb +14 -0
  177. data/test/acceptance/support/network_tests.rb +29 -0
  178. data/test/acceptance/support/output.rb +9 -1
  179. data/test/acceptance/support/shared/base_context.rb +16 -9
  180. data/test/acceptance/support/shared/command_examples.rb +4 -4
  181. data/test/acceptance/suspend_test.rb +1 -1
  182. data/test/acceptance/up_basic_test.rb +26 -7
  183. data/test/acceptance/up_with_box_url.rb +1 -1
  184. data/test/acceptance/vagrant_test.rb +1 -1
  185. data/test/acceptance/version_test.rb +0 -5
  186. data/test/support/isolated_environment.rb +46 -0
  187. data/test/{acceptance/support → support}/tempdir.rb +0 -0
  188. data/test/unit/base.rb +21 -0
  189. data/test/unit/support/isolated_environment.rb +39 -0
  190. data/test/unit/support/shared/base_context.rb +30 -0
  191. data/test/unit/vagrant/action/builder_test.rb +126 -177
  192. data/test/unit/vagrant/action/environment_test.rb +10 -21
  193. data/test/unit/vagrant/action/runner_test.rb +65 -0
  194. data/test/unit/vagrant/action/warden_test.rb +64 -97
  195. data/test/unit/vagrant/box_collection_test.rb +44 -33
  196. data/test/unit/vagrant/box_test.rb +25 -65
  197. data/test/unit/vagrant/command/base_test.rb +141 -14
  198. data/test/unit/vagrant/config/base_test.rb +16 -43
  199. data/test/unit/vagrant/config/loader_test.rb +79 -0
  200. data/test/unit/vagrant/config/top_test.rb +69 -0
  201. data/test/unit/vagrant/config/vm_test.rb +62 -47
  202. data/test/unit/vagrant/config_test.rb +16 -151
  203. data/test/unit/vagrant/data_store_test.rb +43 -61
  204. data/test/unit/vagrant/downloaders/base_test.rb +12 -22
  205. data/test/unit/vagrant/downloaders/file_test.rb +58 -31
  206. data/test/unit/vagrant/downloaders/http_test.rb +12 -86
  207. data/test/unit/vagrant/environment_test.rb +107 -536
  208. data/test/unit/vagrant/hosts_test.rb +36 -0
  209. data/test/unit/vagrant/registry_test.rb +56 -0
  210. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  211. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +23 -24
  212. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  213. data/test/unit/vagrant/util/retryable_test.rb +90 -34
  214. data/test/unit/vagrant_test.rb +27 -0
  215. data/test/{unit → unit_legacy}/locales/en.yml +0 -0
  216. data/test/{unit → unit_legacy}/test_helper.rb +0 -0
  217. data/test/{unit → unit_legacy}/vagrant/action/box/destroy_test.rb +0 -0
  218. data/test/{unit → unit_legacy}/vagrant/action/box/download_test.rb +0 -0
  219. data/test/{unit → unit_legacy}/vagrant/action/box/package_test.rb +0 -0
  220. data/test/{unit → unit_legacy}/vagrant/action/box/unpackage_test.rb +0 -0
  221. data/test/{unit → unit_legacy}/vagrant/action/box/verify_test.rb +0 -0
  222. data/test/{unit → unit_legacy}/vagrant/action/env/set_test.rb +0 -0
  223. data/test/{unit → unit_legacy}/vagrant/action/general/package_test.rb +0 -0
  224. data/test/{unit → unit_legacy}/vagrant/action/general/validate_test.rb +0 -0
  225. data/test/{unit → unit_legacy}/vagrant/action/vm/boot_test.rb +0 -0
  226. data/test/{unit → unit_legacy}/vagrant/action/vm/check_accessible_test.rb +0 -0
  227. data/test/{unit → unit_legacy}/vagrant/action/vm/check_box_test.rb +0 -0
  228. data/test/{unit → unit_legacy}/vagrant/action/vm/check_guest_additions_test.rb +0 -0
  229. data/test/{unit → unit_legacy}/vagrant/action/vm/clean_machine_folder_test.rb +0 -0
  230. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -0
  231. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_nfs_exports_test.rb +0 -0
  232. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_shared_folders_test.rb +0 -0
  233. data/test/{unit → unit_legacy}/vagrant/action/vm/customize_test.rb +0 -0
  234. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_test.rb +0 -0
  235. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -0
  236. data/test/{unit → unit_legacy}/vagrant/action/vm/discard_state_test.rb +0 -0
  237. data/test/{unit → unit_legacy}/vagrant/action/vm/export_test.rb +0 -0
  238. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_helpers_test.rb +0 -0
  239. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_test.rb +0 -0
  240. data/test/{unit → unit_legacy}/vagrant/action/vm/halt_test.rb +0 -0
  241. data/test/{unit → unit_legacy}/vagrant/action/vm/host_name_test.rb +0 -0
  242. data/test/{unit → unit_legacy}/vagrant/action/vm/import_test.rb +0 -0
  243. data/test/{unit → unit_legacy}/vagrant/action/vm/match_mac_address_test.rb +0 -0
  244. data/test/{unit → unit_legacy}/vagrant/action/vm/modify_test.rb +0 -0
  245. data/test/{unit → unit_legacy}/vagrant/action/vm/network_test.rb +0 -0
  246. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_helpers_test.rb +0 -0
  247. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_test.rb +0 -0
  248. data/test/{unit → unit_legacy}/vagrant/action/vm/package_test.rb +0 -0
  249. data/test/{unit → unit_legacy}/vagrant/action/vm/package_vagrantfile_test.rb +0 -0
  250. data/test/{unit → unit_legacy}/vagrant/action/vm/provision_test.rb +0 -0
  251. data/test/{unit → unit_legacy}/vagrant/action/vm/provisioner_cleanup_test.rb +0 -0
  252. data/test/{unit → unit_legacy}/vagrant/action/vm/resume_test.rb +0 -0
  253. data/test/{unit → unit_legacy}/vagrant/action/vm/share_folders_test.rb +0 -0
  254. data/test/{unit → unit_legacy}/vagrant/action/vm/suspend_test.rb +0 -0
  255. data/test/{unit → unit_legacy}/vagrant/action_test.rb +0 -0
  256. data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
  257. data/test/unit_legacy/vagrant/box_test.rb +74 -0
  258. data/test/{unit → unit_legacy}/vagrant/cli_test.rb +0 -0
  259. data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
  260. data/test/{unit → unit_legacy}/vagrant/command/group_base_test.rb +0 -0
  261. data/test/{unit → unit_legacy}/vagrant/command/helpers_test.rb +0 -0
  262. data/test/{unit → unit_legacy}/vagrant/command/init_test.rb +0 -0
  263. data/test/{unit → unit_legacy}/vagrant/command/package_test.rb +0 -0
  264. data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
  265. data/test/{unit → unit_legacy}/vagrant/config/error_recorder_test.rb +0 -0
  266. data/test/{unit → unit_legacy}/vagrant/config/ssh_test.rb +0 -0
  267. data/test/{unit → unit_legacy}/vagrant/config/vagrant_test.rb +0 -0
  268. data/test/{unit → unit_legacy}/vagrant/config/vm/provisioner_test.rb +0 -0
  269. data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
  270. data/test/unit_legacy/vagrant/config_test.rb +148 -0
  271. data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
  272. data/test/unit_legacy/vagrant/environment_test.rb +539 -0
  273. data/test/{unit → unit_legacy}/vagrant/errors_test.rb +0 -0
  274. data/test/{unit → unit_legacy}/vagrant/hosts/base_test.rb +0 -0
  275. data/test/{unit → unit_legacy}/vagrant/hosts/bsd_test.rb +0 -0
  276. data/test/{unit → unit_legacy}/vagrant/hosts/linux_test.rb +0 -0
  277. data/test/{unit → unit_legacy}/vagrant/plugin_test.rb +0 -0
  278. data/test/{unit → unit_legacy}/vagrant/provisioners/base_test.rb +0 -0
  279. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_client_test.rb +0 -0
  280. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_solo_test.rb +0 -0
  281. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_test.rb +0 -0
  282. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_server_test.rb +0 -0
  283. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_test.rb +0 -0
  284. data/test/{unit → unit_legacy}/vagrant/provisioners/shell_test.rb +0 -0
  285. data/test/{unit → unit_legacy}/vagrant/ssh/session_test.rb +0 -0
  286. data/test/{unit → unit_legacy}/vagrant/ssh_test.rb +0 -0
  287. data/test/{unit → unit_legacy}/vagrant/systems/base_test.rb +0 -0
  288. data/test/{unit → unit_legacy}/vagrant/systems/linux_test.rb +0 -0
  289. data/test/{unit → unit_legacy}/vagrant/util/busy_test.rb +0 -0
  290. data/test/{unit → unit_legacy}/vagrant/util/counter_test.rb +0 -0
  291. data/test/{unit → unit_legacy}/vagrant/util/platform_test.rb +0 -0
  292. data/test/{unit → unit_legacy}/vagrant/util/stacked_proc_runner_test.rb +0 -0
  293. data/test/{unit → unit_legacy}/vagrant/util/template_renderer_test.rb +0 -0
  294. data/test/{unit → unit_legacy}/vagrant/vm_test.rb +0 -0
  295. data/vagrant.gemspec +7 -9
  296. metadata +214 -216
  297. data/keys/vagrant.ppk +0 -26
  298. data/lib/vagrant/action/box.rb +0 -11
  299. data/lib/vagrant/action/env.rb +0 -7
  300. data/lib/vagrant/action/general.rb +0 -8
  301. data/lib/vagrant/action/vm.rb +0 -34
  302. data/lib/vagrant/action/vm/forward_ports_helpers.rb +0 -28
  303. data/lib/vagrant/action/vm/modify.rb +0 -37
  304. data/lib/vagrant/action/vm/nfs_helpers.rb +0 -11
  305. data/lib/vagrant/command/group_base.rb +0 -107
  306. data/lib/vagrant/command/helpers.rb +0 -33
  307. data/lib/vagrant/command/named_base.rb +0 -14
  308. data/lib/vagrant/command/upgrade_to_060.rb +0 -45
  309. data/lib/vagrant/command/version.rb +0 -13
  310. data/lib/vagrant/ssh/session.rb +0 -136
  311. data/lib/vagrant/systems.rb +0 -13
  312. data/lib/vagrant/systems/arch.rb +0 -34
  313. data/lib/vagrant/systems/debian.rb +0 -36
  314. data/lib/vagrant/systems/gentoo.rb +0 -27
  315. data/lib/vagrant/systems/linux.rb +0 -82
  316. data/lib/vagrant/systems/linux/error.rb +0 -9
  317. data/lib/vagrant/systems/redhat.rb +0 -48
  318. data/lib/vagrant/systems/solaris.rb +0 -113
  319. data/lib/vagrant/systems/ubuntu.rb +0 -17
  320. data/templates/network_entry_arch.erb +0 -9
  321. data/templates/network_entry_debian.erb +0 -8
  322. data/templates/network_entry_gentoo.erb +0 -5
  323. data/templates/network_entry_redhat.erb +0 -9
  324. data/test/unit/vagrant/ui_test.rb +0 -29
@@ -1,7 +1,5 @@
1
- require File.expand_path("../nfs_helpers", __FILE__)
2
-
3
1
  module Vagrant
4
- class Action
2
+ module Action
5
3
  module VM
6
4
  # Enables NFS based shared folders. `nfsd` must already be installed
7
5
  # on the host machine, and NFS client must already be installed on
@@ -16,8 +14,6 @@ module Vagrant
16
14
  # folder.
17
15
  #
18
16
  class NFS
19
- include NFSHelpers
20
-
21
17
  def initialize(app,env)
22
18
  @app = app
23
19
  @env = env
@@ -32,7 +28,6 @@ module Vagrant
32
28
 
33
29
  if !folders.empty?
34
30
  prepare_folders
35
- clear_nfs_exports(env)
36
31
  export_folders
37
32
  end
38
33
 
@@ -42,7 +37,12 @@ module Vagrant
42
37
  end
43
38
 
44
39
  def recover(env)
45
- clear_nfs_exports(env) if env["vm"].created?
40
+ # Ignore any VagrantErrors, because they were expected and
41
+ # will cause the VM to stick around.
42
+ return if env["vagrant.error"].is_a?(Errors::VagrantError)
43
+
44
+ # Otherwise, clear the NFS exports.
45
+ clear_nfs_exports(env)
46
46
  end
47
47
 
48
48
  # Returns the folders which are to be synced via NFS.
@@ -55,14 +55,14 @@ module Vagrant
55
55
  # task.
56
56
  def extract_folders
57
57
  # Load the NFS enabled shared folders
58
- @folders = @env["config"].vm.shared_folders.inject({}) do |acc, data|
58
+ @folders = @env[:vm].config.vm.shared_folders.inject({}) do |acc, data|
59
59
  key, opts = data
60
60
 
61
61
  if opts[:nfs]
62
62
  # Duplicate the options, set the hostpath, and set disabled on the original
63
63
  # options so the ShareFolders middleware doesn't try to mount it.
64
64
  acc[key] = opts.dup
65
- acc[key][:hostpath] = File.expand_path(opts[:hostpath], @env.env.root_path)
65
+ acc[key][:hostpath] = File.expand_path(opts[:hostpath], @env[:root_path])
66
66
  opts[:disabled] = true
67
67
  end
68
68
 
@@ -91,7 +91,7 @@ module Vagrant
91
91
 
92
92
  # The options on the hash get priority, then the default
93
93
  # values
94
- value = opts.has_key?(key) ? opts[key] : @env["config"].nfs.send(key)
94
+ value = opts.has_key?(key) ? opts[key] : @env[:vm].config.nfs.send(key)
95
95
  return value if value != :auto
96
96
 
97
97
  # Get UID/GID from folder if we've made it this far
@@ -104,31 +104,40 @@ module Vagrant
104
104
  # involves adding a line to `/etc/exports` for this VM, but it is
105
105
  # up to the host class to define the specific behavior.
106
106
  def export_folders
107
- @env.ui.info I18n.t("vagrant.actions.vm.nfs.exporting")
108
-
109
- @env["host"].nfs_export(guest_ip, folders)
107
+ @env[:ui].info I18n.t("vagrant.actions.vm.nfs.exporting")
108
+ @env[:host].nfs_export(@env[:vm].uuid, guest_ip, folders)
110
109
  end
111
110
 
112
111
  # Uses the system class to mount the NFS folders.
113
112
  def mount_folders
114
- @env.ui.info I18n.t("vagrant.actions.vm.nfs.mounting")
113
+ @env[:ui].info I18n.t("vagrant.actions.vm.nfs.mounting")
115
114
 
116
115
  # Only mount the folders which have a guest path specified
117
- am_folders = folders.select { |name, folder| folder[:guestpath] }
118
- am_folders = Hash[*am_folders.flatten] if am_folders.is_a?(Array)
119
- @env["vm"].system.mount_nfs(host_ip, Hash[am_folders])
116
+ mount_folders = {}
117
+ folders.each do |name, opts|
118
+ if opts[:guestpath]
119
+ mount_folders[name] = opts.dup
120
+ end
121
+ end
122
+
123
+ @env[:vm].guest.mount_nfs(host_ip, mount_folders)
120
124
  end
121
125
 
122
126
  # Returns the IP address of the first host only network adapter
123
127
  #
124
128
  # @return [String]
125
129
  def host_ip
126
- interface = @env["vm"].vm.network_adapters.find do |adapter|
127
- adapter.host_interface_object
130
+ @env[:vm].driver.read_network_interfaces.each do |adapter, opts|
131
+ if opts[:type] == :hostonly
132
+ @env[:vm].driver.read_host_only_interfaces.each do |interface|
133
+ if interface[:name] == opts[:hostonly]
134
+ return interface[:ip]
135
+ end
136
+ end
137
+ end
128
138
  end
129
139
 
130
- return nil if !interface
131
- interface.host_interface_object.ip_address
140
+ nil
132
141
  end
133
142
 
134
143
  # Returns the IP address of the guest by looking at the first
@@ -136,12 +145,18 @@ module Vagrant
136
145
  #
137
146
  # @return [String]
138
147
  def guest_ip
139
- @env["config"].vm.network_options[1][:ip]
148
+ @env[:vm].config.vm.networks.each do |type, args|
149
+ if type == :hostonly && args[0].is_a?(String)
150
+ return args[0]
151
+ end
152
+ end
153
+
154
+ nil
140
155
  end
141
156
 
142
157
  # Checks if there are any NFS enabled shared folders.
143
158
  def nfs_enabled?
144
- @env["config"].vm.shared_folders.each do |key, opts|
159
+ @env[:vm].config.vm.shared_folders.each do |key, opts|
145
160
  return true if opts[:nfs]
146
161
  end
147
162
 
@@ -150,9 +165,9 @@ module Vagrant
150
165
 
151
166
  # Verifies that the host is set and supports NFS.
152
167
  def verify_settings
153
- raise Errors::NFSHostRequired if @env["host"].nil?
154
- raise Errors::NFSNotSupported if !@env["host"].nfs?
155
- raise Errors::NFSNoHostNetwork if @env["config"].vm.network_options.empty?
168
+ raise Errors::NFSHostRequired if @env[:host].nil?
169
+ raise Errors::NFSNotSupported if !@env[:host].nfs?
170
+ raise Errors::NFSNoHostNetwork if !guest_ip
156
171
  end
157
172
  end
158
173
  end
@@ -1,7 +1,7 @@
1
1
  require 'vagrant/action/general/package'
2
2
 
3
3
  module Vagrant
4
- class Action
4
+ module Action
5
5
  module VM
6
6
  # A subclass of {General::Package} which simply makes sure that
7
7
  # the package directory is set to the directory which the VM
@@ -1,9 +1,12 @@
1
+ require 'vagrant/util/template_renderer'
2
+
1
3
  module Vagrant
2
- class Action
4
+ module Action
3
5
  module VM
4
6
  # Puts a generated Vagrantfile into the package directory so that
5
7
  # it can be included in the package.
6
8
  class PackageVagrantfile
9
+ # For TemplateRenderer
7
10
  include Util
8
11
 
9
12
  def initialize(app, env)
@@ -23,7 +26,7 @@ module Vagrant
23
26
  def create_vagrantfile
24
27
  File.open(File.join(@env["export.temp_dir"], "Vagrantfile"), "w") do |f|
25
28
  f.write(TemplateRenderer.render("package_Vagrantfile", {
26
- :base_mac => @env["vm"].vm.network_adapters.first.mac_address
29
+ :base_mac => @env["vm"].driver.read_mac_address
27
30
  }))
28
31
  end
29
32
  end
@@ -1,32 +1,61 @@
1
+ require "log4r"
2
+
1
3
  module Vagrant
2
- class Action
4
+ module Action
3
5
  module VM
4
6
  class Provision
5
7
  def initialize(app, env)
8
+ @logger = Log4r::Logger.new("vagrant::action::vm::provision")
6
9
  @app = app
7
- @env = env
8
- @env["provision.enabled"] = true if !@env.has_key?("provision.enabled")
10
+
11
+ env["provision.enabled"] = true if !env.has_key?("provision.enabled")
9
12
  end
10
13
 
11
14
  def call(env)
12
- # Instantiate and prepare the provisioners. Preparation must happen here
13
- # so that shared folders and such can properly take effect.
14
- provisioners = enabled_provisioners
15
- provisioners.map { |p| p.prepare }
15
+ @env = env
16
+
17
+ provisioners = nil
18
+
19
+ # We set this here so that even if this value is changed in the future,
20
+ # it stays constant to what we expect here in this moment.
21
+ enabled = env["provision.enabled"]
22
+ if enabled
23
+ # Instantiate and prepare the provisioners. Preparation must happen here
24
+ # so that shared folders and such can properly take effect.
25
+ provisioners = enabled_provisioners
26
+ provisioners.map { |p| p.prepare }
27
+ end
16
28
 
17
29
  @app.call(env)
18
30
 
19
- # Take prepared provisioners and run the provisioning
20
- provisioners.each do |instance|
21
- @env.ui.info I18n.t("vagrant.actions.vm.provision.beginning", :provisioner => instance.class)
22
- instance.provision!
31
+ if enabled
32
+ # Take prepared provisioners and run the provisioning
33
+ provisioners.each do |instance|
34
+ @env[:ui].info I18n.t("vagrant.actions.vm.provision.beginning",
35
+ :provisioner => instance.class)
36
+ instance.provision!
37
+ end
23
38
  end
24
39
  end
25
40
 
26
41
  def enabled_provisioners
27
- @env["config"].vm.provisioners.map do |provisioner|
28
- provisioner.provisioner.new(@env, provisioner.config)
42
+ enabled = []
43
+ @env[:vm].config.vm.provisioners.each do |provisioner|
44
+ if @env["provision.types"]
45
+ # If we've specified types of provisioners to enable, then we
46
+ # only use those provisioners, and skip any that we haven't
47
+ # specified.
48
+ if !@env["provision.types"].include?(provisioner.shortcut.to_s)
49
+ @logger.debug("Skipping provisioner: #{provisioner.shortcut}")
50
+ next
51
+ end
52
+ end
53
+
54
+ enabled << provisioner.provisioner.new(@env, provisioner.config)
29
55
  end
56
+
57
+ # Return the enable provisioners
58
+ enabled
30
59
  end
31
60
  end
32
61
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  class ProvisionerCleanup
5
5
  def initialize(app, env)
@@ -16,7 +16,7 @@ module Vagrant
16
16
  end
17
17
 
18
18
  def enabled_provisioners
19
- @env["config"].vm.provisioners.map do |provisioner|
19
+ @env[:vm].config.vm.provisioners.map do |provisioner|
20
20
  provisioner.provisioner.new(@env, provisioner.config)
21
21
  end
22
22
  end
@@ -1,17 +1,17 @@
1
- require File.expand_path("../nfs_helpers", __FILE__)
2
-
3
1
  module Vagrant
4
- class Action
2
+ module Action
5
3
  module VM
6
- class ClearNFSExports
7
- include NFSHelpers
8
-
4
+ class PruneNFSExports
9
5
  def initialize(app, env)
10
6
  @app = app
11
7
  end
12
8
 
13
9
  def call(env)
14
- clear_nfs_exports(env)
10
+ if env[:host]
11
+ valid_ids = env[:vm].driver.read_vms
12
+ env[:host].nfs_prune(valid_ids)
13
+ end
14
+
15
15
  @app.call(env)
16
16
  end
17
17
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  class Resume
5
5
  def initialize(app, env)
@@ -7,9 +7,9 @@ module Vagrant
7
7
  end
8
8
 
9
9
  def call(env)
10
- if env["vm"].vm.saved?
11
- env.ui.info I18n.t("vagrant.actions.vm.resume.resuming")
12
- env["actions"].run(Boot)
10
+ if env[:vm].state == :saved
11
+ env[:ui].info I18n.t("vagrant.actions.vm.resume.resuming")
12
+ env[:action_runner].run(Boot, env)
13
13
  end
14
14
 
15
15
  @app.call(env)
@@ -0,0 +1,54 @@
1
+ require 'pathname'
2
+
3
+ module Vagrant
4
+ module Action
5
+ module VM
6
+ # Sets up the mapping of files to copy into the package and verifies
7
+ # that the files can be properly copied.
8
+ class SetupPackageFiles
9
+ def initialize(app, env)
10
+ @app = app
11
+
12
+ env["package.include"] ||= []
13
+ env["package.vagrantfile"] ||= nil
14
+ end
15
+
16
+ def call(env)
17
+ files = {}
18
+ env["package.include"].each do |file|
19
+ source = Pathname.new(file)
20
+ dest = nil
21
+
22
+ # If the source is relative then we add the file as-is to the include
23
+ # directory. Otherwise, we copy only the file into the root of the
24
+ # include directory. Kind of strange, but seems to match what people
25
+ # expect based on history.
26
+ if source.relative?
27
+ dest = source
28
+ else
29
+ dest = source.basename
30
+ end
31
+
32
+ # Assign the mapping
33
+ files[file] = dest
34
+ end
35
+
36
+ if env["package.vagrantfile"]
37
+ # Vagrantfiles are treated special and mapped to a specific file
38
+ files[env["package.vagrantfile"]] = "_Vagrantfile"
39
+ end
40
+
41
+ # Verify the mapping
42
+ files.each do |from, _|
43
+ raise Errors::PackageIncludeMissing, :file => from if !File.exist?(from)
44
+ end
45
+
46
+ # Save the mapping
47
+ env["package.files"] = files
48
+
49
+ @app.call(env)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,15 +1,20 @@
1
+ require 'pathname'
2
+
3
+ require 'log4r'
4
+
1
5
  module Vagrant
2
- class Action
6
+ module Action
3
7
  module VM
4
8
  class ShareFolders
5
9
  def initialize(app, env)
6
- @app = app
7
- @env = env
10
+ @logger = Log4r::Logger.new("vagrant::action::vm::share_folders")
11
+ @app = app
8
12
  end
9
13
 
10
14
  def call(env)
11
15
  @env = env
12
16
 
17
+ prepare_folders
13
18
  create_metadata
14
19
 
15
20
  @app.call(env)
@@ -20,7 +25,7 @@ module Vagrant
20
25
  # This method returns an actual list of VirtualBox shared
21
26
  # folders to create and their proper path.
22
27
  def shared_folders
23
- @env.env.config.vm.shared_folders.inject({}) do |acc, data|
28
+ @env[:vm].config.vm.shared_folders.inject({}) do |acc, data|
24
29
  key, value = data
25
30
 
26
31
  next acc if value[:disabled]
@@ -32,54 +37,73 @@ module Vagrant
32
37
  end
33
38
  end
34
39
 
35
- def create_metadata
36
- proc = lambda do |vm|
37
- @env.ui.info I18n.t("vagrant.actions.vm.share_folders.creating")
38
-
39
- shared_folders.each do |name, data|
40
- folder = VirtualBox::SharedFolder.new
41
- folder.name = name
42
- folder.host_path = File.expand_path(data[:hostpath], @env.env.root_path)
43
- vm.shared_folders << folder
40
+ # Prepares the shared folders by verifying they exist and creating them
41
+ # if they don't.
42
+ def prepare_folders
43
+ shared_folders.each do |name, options|
44
+ hostpath = Pathname.new(options[:hostpath]).expand_path(@env[:root_path])
45
+
46
+ if !hostpath.directory? && options[:create]
47
+ # Host path doesn't exist, so let's create it.
48
+ @logger.debug("Host path doesn't exist, creating: #{hostpath}")
49
+
50
+ begin
51
+ hostpath.mkpath
52
+ rescue Errno::EACCES
53
+ raise Errors::SharedFolderCreateFailed, :path => hostpath.to_s
54
+ end
44
55
  end
45
56
  end
57
+ end
46
58
 
47
- @env["vm.modify"].call(proc)
59
+ def create_metadata
60
+ @env[:ui].info I18n.t("vagrant.actions.vm.share_folders.creating")
61
+
62
+ folders = []
63
+ shared_folders.each do |name, data|
64
+ folders << {
65
+ :name => name,
66
+ :hostpath => File.expand_path(data[:hostpath], @env[:root_path])
67
+ }
68
+ end
69
+
70
+ @env[:vm].driver.share_folders(folders)
48
71
  end
49
72
 
50
73
  def mount_shared_folders
51
- @env.ui.info I18n.t("vagrant.actions.vm.share_folders.mounting")
52
-
53
- @env["vm"].ssh.execute do |ssh|
54
- # short guestpaths first, so we don't step on ourselves
55
- folders = shared_folders.sort_by do |name, data|
56
- if data[:guestpath]
57
- data[:guestpath].length
58
- else
59
- # A long enough path to just do this at the end.
60
- 10000
61
- end
74
+ @env[:ui].info I18n.t("vagrant.actions.vm.share_folders.mounting")
75
+
76
+ # short guestpaths first, so we don't step on ourselves
77
+ folders = shared_folders.sort_by do |name, data|
78
+ if data[:guestpath]
79
+ data[:guestpath].length
80
+ else
81
+ # A long enough path to just do this at the end.
82
+ 10000
62
83
  end
84
+ end
63
85
 
64
- # Go through each folder and mount
65
- folders.each do |name, data|
66
- if data[:guestpath]
67
- # Guest path specified, so mount the folder to specified point
68
- @env.ui.info(I18n.t("vagrant.actions.vm.share_folders.mounting_entry",
86
+ # Go through each folder and mount
87
+ folders.each do |name, data|
88
+ if data[:guestpath]
89
+ # Guest path specified, so mount the folder to specified point
90
+ @env[:ui].info(I18n.t("vagrant.actions.vm.share_folders.mounting_entry",
69
91
  :name => name,
70
92
  :guest_path => data[:guestpath]))
71
93
 
72
- # Calculate the owner and group
73
- owner = data[:owner] || @env["config"].ssh.username
74
- group = data[:group] || @env["config"].ssh.username
94
+ # Dup the data so we can pass it to the guest API
95
+ data = data.dup
75
96
 
76
- # Mount the actual folder
77
- @env["vm"].system.mount_shared_folder(ssh, name, data[:guestpath], owner, group)
78
- else
79
- # If no guest path is specified, then automounting is disabled
80
- @env.ui.info(I18n.t("vagrant.actions.vm.share_folders.nomount_entry",
97
+ # Calculate the owner and group
98
+ data[:owner] ||= @env[:vm].config.ssh.username
99
+ data[:group] ||= @env[:vm].config.ssh.username
100
+
101
+ # Mount the actual folder
102
+ @env[:vm].guest.mount_shared_folder(name, data[:guestpath], data)
103
+ else
104
+ # If no guest path is specified, then automounting is disabled
105
+ @env[:ui].info(I18n.t("vagrant.actions.vm.share_folders.nomount_entry",
81
106
  :name => name))
82
- end
83
107
  end
84
108
  end
85
109
  end