vagrantup 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 (325) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +77 -1
  3. data/Gemfile +0 -14
  4. data/LICENSE +1 -1
  5. data/bin/vagrant +47 -20
  6. data/config/default.rb +6 -14
  7. data/lib/vagrant/action/box/destroy.rb +7 -3
  8. data/lib/vagrant/action/box/download.rb +8 -8
  9. data/lib/vagrant/action/box/package.rb +2 -2
  10. data/lib/vagrant/action/box/unpackage.rb +13 -7
  11. data/lib/vagrant/action/box/verify.rb +5 -5
  12. data/lib/vagrant/action/builder.rb +23 -19
  13. data/lib/vagrant/action/builtin.rb +117 -79
  14. data/lib/vagrant/action/env/set.rb +7 -4
  15. data/lib/vagrant/action/environment.rb +3 -41
  16. data/lib/vagrant/action/general/package.rb +14 -29
  17. data/lib/vagrant/action/general/validate.rb +2 -2
  18. data/lib/vagrant/action/runner.rb +53 -0
  19. data/lib/vagrant/action/vm/boot.rb +9 -9
  20. data/lib/vagrant/action/vm/check_accessible.rb +2 -2
  21. data/lib/vagrant/action/vm/check_box.rb +10 -12
  22. data/lib/vagrant/action/vm/check_guest_additions.rb +8 -8
  23. data/lib/vagrant/action/vm/check_port_collisions.rb +85 -0
  24. data/lib/vagrant/action/vm/clean_machine_folder.rb +4 -4
  25. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +3 -11
  26. data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
  27. data/lib/vagrant/action/vm/clear_shared_folders.rb +2 -11
  28. data/lib/vagrant/action/vm/customize.rb +19 -9
  29. data/lib/vagrant/action/vm/destroy.rb +4 -4
  30. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +2 -12
  31. data/lib/vagrant/action/vm/discard_state.rb +4 -4
  32. data/lib/vagrant/action/vm/export.rb +13 -8
  33. data/lib/vagrant/action/vm/forward_ports.rb +55 -102
  34. data/lib/vagrant/action/vm/halt.rb +9 -6
  35. data/lib/vagrant/action/vm/host_name.rb +4 -4
  36. data/lib/vagrant/action/vm/import.rb +19 -10
  37. data/lib/vagrant/action/vm/match_mac_address.rb +4 -9
  38. data/lib/vagrant/action/vm/network.rb +300 -94
  39. data/lib/vagrant/action/vm/nfs.rb +41 -26
  40. data/lib/vagrant/action/vm/package.rb +1 -1
  41. data/lib/vagrant/action/vm/package_vagrantfile.rb +5 -2
  42. data/lib/vagrant/action/vm/provision.rb +42 -13
  43. data/lib/vagrant/action/vm/provisioner_cleanup.rb +2 -2
  44. data/lib/vagrant/action/vm/{clear_nfs_exports.rb → prune_nfs_exports.rb} +7 -7
  45. data/lib/vagrant/action/vm/resume.rb +4 -4
  46. data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
  47. data/lib/vagrant/action/vm/share_folders.rb +63 -39
  48. data/lib/vagrant/action/vm/suspend.rb +4 -4
  49. data/lib/vagrant/action/warden.rb +13 -6
  50. data/lib/vagrant/action.rb +45 -123
  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/base.rb +135 -90
  55. data/lib/vagrant/command/box.rb +46 -21
  56. data/lib/vagrant/command/box_add.rb +33 -0
  57. data/lib/vagrant/command/box_list.rb +25 -0
  58. data/lib/vagrant/command/box_remove.rb +23 -0
  59. data/lib/vagrant/command/box_repackage.rb +23 -0
  60. data/lib/vagrant/command/destroy.rb +16 -5
  61. data/lib/vagrant/command/halt.rb +25 -7
  62. data/lib/vagrant/command/init.rb +30 -7
  63. data/lib/vagrant/command/package.rb +49 -18
  64. data/lib/vagrant/command/provision.rb +22 -9
  65. data/lib/vagrant/command/reload.rb +18 -5
  66. data/lib/vagrant/command/resume.rb +18 -5
  67. data/lib/vagrant/command/ssh.rb +69 -31
  68. data/lib/vagrant/command/ssh_config.rb +37 -22
  69. data/lib/vagrant/command/status.rb +22 -20
  70. data/lib/vagrant/command/suspend.rb +18 -5
  71. data/lib/vagrant/command/up.rb +41 -8
  72. data/lib/vagrant/command.rb +18 -20
  73. data/lib/vagrant/communication/base.rb +56 -0
  74. data/lib/vagrant/communication/ssh.rb +200 -0
  75. data/lib/vagrant/communication.rb +7 -0
  76. data/lib/vagrant/config/base.rb +18 -26
  77. data/lib/vagrant/config/container.rb +37 -0
  78. data/lib/vagrant/config/error_recorder.rb +1 -1
  79. data/lib/vagrant/config/loader.rb +125 -0
  80. data/lib/vagrant/config/nfs.rb +1 -3
  81. data/lib/vagrant/config/package.rb +1 -3
  82. data/lib/vagrant/config/ssh.rb +31 -16
  83. data/lib/vagrant/config/top.rb +36 -25
  84. data/lib/vagrant/config/vagrant.rb +2 -5
  85. data/lib/vagrant/config/vm/provisioner.rb +16 -20
  86. data/lib/vagrant/config/vm/sub_vm.rb +1 -1
  87. data/lib/vagrant/config/vm.rb +115 -56
  88. data/lib/vagrant/config.rb +29 -103
  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/virtualbox.rb +121 -0
  94. data/lib/vagrant/driver/virtualbox_4_0.rb +411 -0
  95. data/lib/vagrant/driver/virtualbox_4_1.rb +411 -0
  96. data/lib/vagrant/driver/virtualbox_base.rb +284 -0
  97. data/lib/vagrant/driver.rb +7 -0
  98. data/lib/vagrant/environment.rb +221 -240
  99. data/lib/vagrant/errors.rb +74 -25
  100. data/lib/vagrant/guest/arch.rb +48 -0
  101. data/lib/vagrant/{systems → guest}/base.rb +30 -18
  102. data/lib/vagrant/guest/debian.rb +61 -0
  103. data/lib/vagrant/{systems → guest}/freebsd.rb +11 -18
  104. data/lib/vagrant/guest/gentoo.rb +32 -0
  105. data/lib/vagrant/{systems → guest}/linux/config.rb +2 -4
  106. data/lib/vagrant/guest/linux/error.rb +9 -0
  107. data/lib/vagrant/guest/linux.rb +78 -0
  108. data/lib/vagrant/guest/redhat.rb +66 -0
  109. data/lib/vagrant/guest/solaris.rb +114 -0
  110. data/lib/vagrant/{systems → guest}/suse.rb +2 -2
  111. data/lib/vagrant/guest/ubuntu.rb +23 -0
  112. data/lib/vagrant/guest.rb +16 -0
  113. data/lib/vagrant/hosts/arch.rb +7 -3
  114. data/lib/vagrant/hosts/base.rb +36 -46
  115. data/lib/vagrant/hosts/bsd.rb +53 -16
  116. data/lib/vagrant/hosts/fedora.rb +14 -0
  117. data/lib/vagrant/hosts/freebsd.rb +6 -36
  118. data/lib/vagrant/hosts/linux.rb +45 -20
  119. data/lib/vagrant/hosts/windows.rb +16 -0
  120. data/lib/vagrant/hosts.rb +23 -6
  121. data/lib/vagrant/provisioners/base.rb +11 -34
  122. data/lib/vagrant/provisioners/chef.rb +30 -26
  123. data/lib/vagrant/provisioners/chef_client.rb +37 -23
  124. data/lib/vagrant/provisioners/chef_solo.rb +61 -16
  125. data/lib/vagrant/provisioners/puppet.rb +70 -38
  126. data/lib/vagrant/provisioners/puppet_server.rb +12 -13
  127. data/lib/vagrant/provisioners/shell.rb +24 -24
  128. data/lib/vagrant/provisioners.rb +10 -7
  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/lib/vagrant.rb +132 -5
  140. data/tasks/acceptance.rake +3 -3
  141. data/tasks/test.rake +7 -2
  142. data/templates/commands/init/Vagrantfile.erb +11 -4
  143. data/templates/{ssh_config.erb → commands/ssh_config/config.erb} +0 -0
  144. data/templates/guests/arch/network_dhcp.erb +7 -0
  145. data/templates/guests/arch/network_static.erb +7 -0
  146. data/templates/guests/debian/network_dhcp.erb +6 -0
  147. data/templates/guests/debian/network_static.erb +7 -0
  148. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  149. data/templates/guests/gentoo/network_static.erb +4 -0
  150. data/templates/guests/redhat/network_dhcp.erb +6 -0
  151. data/templates/guests/redhat/network_static.erb +7 -0
  152. data/templates/locales/en.yml +241 -122
  153. data/templates/{chef_server_client.erb → provisioners/chef_client/client.erb} +0 -0
  154. data/templates/{chef_solo_solo.erb → provisioners/chef_solo/solo.erb} +0 -0
  155. data/test/acceptance/base.rb +10 -10
  156. data/test/acceptance/box_test.rb +28 -6
  157. data/test/acceptance/destroy_test.rb +1 -1
  158. data/test/acceptance/halt_test.rb +4 -4
  159. data/test/acceptance/init_test.rb +3 -3
  160. data/test/acceptance/networking/host_only_test.rb +37 -0
  161. data/test/acceptance/networking/port_forward_test.rb +125 -0
  162. data/test/acceptance/package_test.rb +46 -0
  163. data/test/acceptance/provisioning/basic_test.rb +61 -0
  164. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  165. data/test/acceptance/provisioning/shell_test.rb +53 -0
  166. data/test/acceptance/resume_test.rb +1 -1
  167. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  168. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  169. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  170. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  171. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  172. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  173. data/test/acceptance/ssh_test.rb +7 -2
  174. data/test/acceptance/support/config.rb +1 -1
  175. data/test/acceptance/support/isolated_environment.rb +41 -150
  176. data/test/acceptance/support/matchers/match_output.rb +1 -1
  177. data/test/acceptance/support/matchers/succeed.rb +14 -0
  178. data/test/acceptance/support/network_tests.rb +29 -0
  179. data/test/acceptance/support/output.rb +9 -1
  180. data/test/acceptance/support/shared/base_context.rb +16 -9
  181. data/test/acceptance/support/shared/command_examples.rb +4 -4
  182. data/test/acceptance/suspend_test.rb +1 -1
  183. data/test/acceptance/up_basic_test.rb +26 -7
  184. data/test/acceptance/up_with_box_url.rb +1 -1
  185. data/test/acceptance/vagrant_test.rb +1 -1
  186. data/test/acceptance/version_test.rb +0 -5
  187. data/test/support/isolated_environment.rb +46 -0
  188. data/test/{acceptance/support → support}/tempdir.rb +0 -0
  189. data/test/unit/base.rb +21 -0
  190. data/test/unit/support/isolated_environment.rb +39 -0
  191. data/test/unit/support/shared/base_context.rb +30 -0
  192. data/test/unit/vagrant/action/builder_test.rb +126 -177
  193. data/test/unit/vagrant/action/environment_test.rb +10 -21
  194. data/test/unit/vagrant/action/runner_test.rb +65 -0
  195. data/test/unit/vagrant/action/warden_test.rb +64 -97
  196. data/test/unit/vagrant/box_collection_test.rb +44 -33
  197. data/test/unit/vagrant/box_test.rb +25 -65
  198. data/test/unit/vagrant/command/base_test.rb +141 -14
  199. data/test/unit/vagrant/config/base_test.rb +16 -43
  200. data/test/unit/vagrant/config/loader_test.rb +79 -0
  201. data/test/unit/vagrant/config/top_test.rb +69 -0
  202. data/test/unit/vagrant/config/vm_test.rb +62 -47
  203. data/test/unit/vagrant/config_test.rb +16 -151
  204. data/test/unit/vagrant/data_store_test.rb +43 -61
  205. data/test/unit/vagrant/downloaders/base_test.rb +12 -22
  206. data/test/unit/vagrant/downloaders/file_test.rb +58 -31
  207. data/test/unit/vagrant/downloaders/http_test.rb +12 -86
  208. data/test/unit/vagrant/environment_test.rb +107 -536
  209. data/test/unit/vagrant/hosts_test.rb +36 -0
  210. data/test/unit/vagrant/registry_test.rb +56 -0
  211. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  212. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +23 -24
  213. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  214. data/test/unit/vagrant/util/retryable_test.rb +90 -34
  215. data/test/unit/vagrant_test.rb +27 -0
  216. data/test/{unit → unit_legacy}/locales/en.yml +0 -0
  217. data/test/{unit → unit_legacy}/test_helper.rb +0 -0
  218. data/test/{unit → unit_legacy}/vagrant/action/box/destroy_test.rb +0 -0
  219. data/test/{unit → unit_legacy}/vagrant/action/box/download_test.rb +0 -0
  220. data/test/{unit → unit_legacy}/vagrant/action/box/package_test.rb +0 -0
  221. data/test/{unit → unit_legacy}/vagrant/action/box/unpackage_test.rb +0 -0
  222. data/test/{unit → unit_legacy}/vagrant/action/box/verify_test.rb +0 -0
  223. data/test/{unit → unit_legacy}/vagrant/action/env/set_test.rb +0 -0
  224. data/test/{unit → unit_legacy}/vagrant/action/general/package_test.rb +0 -0
  225. data/test/{unit → unit_legacy}/vagrant/action/general/validate_test.rb +0 -0
  226. data/test/{unit → unit_legacy}/vagrant/action/vm/boot_test.rb +0 -0
  227. data/test/{unit → unit_legacy}/vagrant/action/vm/check_accessible_test.rb +0 -0
  228. data/test/{unit → unit_legacy}/vagrant/action/vm/check_box_test.rb +0 -0
  229. data/test/{unit → unit_legacy}/vagrant/action/vm/check_guest_additions_test.rb +0 -0
  230. data/test/{unit → unit_legacy}/vagrant/action/vm/clean_machine_folder_test.rb +0 -0
  231. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -0
  232. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_nfs_exports_test.rb +0 -0
  233. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_shared_folders_test.rb +0 -0
  234. data/test/{unit → unit_legacy}/vagrant/action/vm/customize_test.rb +0 -0
  235. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_test.rb +0 -0
  236. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -0
  237. data/test/{unit → unit_legacy}/vagrant/action/vm/discard_state_test.rb +0 -0
  238. data/test/{unit → unit_legacy}/vagrant/action/vm/export_test.rb +0 -0
  239. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_helpers_test.rb +0 -0
  240. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_test.rb +0 -0
  241. data/test/{unit → unit_legacy}/vagrant/action/vm/halt_test.rb +0 -0
  242. data/test/{unit → unit_legacy}/vagrant/action/vm/host_name_test.rb +0 -0
  243. data/test/{unit → unit_legacy}/vagrant/action/vm/import_test.rb +0 -0
  244. data/test/{unit → unit_legacy}/vagrant/action/vm/match_mac_address_test.rb +0 -0
  245. data/test/{unit → unit_legacy}/vagrant/action/vm/modify_test.rb +0 -0
  246. data/test/{unit → unit_legacy}/vagrant/action/vm/network_test.rb +0 -0
  247. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_helpers_test.rb +0 -0
  248. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_test.rb +0 -0
  249. data/test/{unit → unit_legacy}/vagrant/action/vm/package_test.rb +0 -0
  250. data/test/{unit → unit_legacy}/vagrant/action/vm/package_vagrantfile_test.rb +0 -0
  251. data/test/{unit → unit_legacy}/vagrant/action/vm/provision_test.rb +0 -0
  252. data/test/{unit → unit_legacy}/vagrant/action/vm/provisioner_cleanup_test.rb +0 -0
  253. data/test/{unit → unit_legacy}/vagrant/action/vm/resume_test.rb +0 -0
  254. data/test/{unit → unit_legacy}/vagrant/action/vm/share_folders_test.rb +0 -0
  255. data/test/{unit → unit_legacy}/vagrant/action/vm/suspend_test.rb +0 -0
  256. data/test/{unit → unit_legacy}/vagrant/action_test.rb +0 -0
  257. data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
  258. data/test/unit_legacy/vagrant/box_test.rb +74 -0
  259. data/test/{unit → unit_legacy}/vagrant/cli_test.rb +0 -0
  260. data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
  261. data/test/{unit → unit_legacy}/vagrant/command/group_base_test.rb +0 -0
  262. data/test/{unit → unit_legacy}/vagrant/command/helpers_test.rb +0 -0
  263. data/test/{unit → unit_legacy}/vagrant/command/init_test.rb +0 -0
  264. data/test/{unit → unit_legacy}/vagrant/command/package_test.rb +0 -0
  265. data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
  266. data/test/{unit → unit_legacy}/vagrant/config/error_recorder_test.rb +0 -0
  267. data/test/{unit → unit_legacy}/vagrant/config/ssh_test.rb +0 -0
  268. data/test/{unit → unit_legacy}/vagrant/config/vagrant_test.rb +0 -0
  269. data/test/{unit → unit_legacy}/vagrant/config/vm/provisioner_test.rb +0 -0
  270. data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
  271. data/test/unit_legacy/vagrant/config_test.rb +148 -0
  272. data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
  273. data/test/unit_legacy/vagrant/environment_test.rb +539 -0
  274. data/test/{unit → unit_legacy}/vagrant/errors_test.rb +0 -0
  275. data/test/{unit → unit_legacy}/vagrant/hosts/base_test.rb +0 -0
  276. data/test/{unit → unit_legacy}/vagrant/hosts/bsd_test.rb +0 -0
  277. data/test/{unit → unit_legacy}/vagrant/hosts/linux_test.rb +0 -0
  278. data/test/{unit → unit_legacy}/vagrant/plugin_test.rb +0 -0
  279. data/test/{unit → unit_legacy}/vagrant/provisioners/base_test.rb +0 -0
  280. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_client_test.rb +0 -0
  281. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_solo_test.rb +0 -0
  282. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_test.rb +0 -0
  283. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_server_test.rb +0 -0
  284. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_test.rb +0 -0
  285. data/test/{unit → unit_legacy}/vagrant/provisioners/shell_test.rb +0 -0
  286. data/test/{unit → unit_legacy}/vagrant/ssh/session_test.rb +0 -0
  287. data/test/{unit → unit_legacy}/vagrant/ssh_test.rb +0 -0
  288. data/test/{unit → unit_legacy}/vagrant/systems/base_test.rb +0 -0
  289. data/test/{unit → unit_legacy}/vagrant/systems/linux_test.rb +0 -0
  290. data/test/{unit → unit_legacy}/vagrant/util/busy_test.rb +0 -0
  291. data/test/{unit → unit_legacy}/vagrant/util/counter_test.rb +0 -0
  292. data/test/{unit → unit_legacy}/vagrant/util/platform_test.rb +0 -0
  293. data/test/{unit → unit_legacy}/vagrant/util/stacked_proc_runner_test.rb +0 -0
  294. data/test/{unit → unit_legacy}/vagrant/util/template_renderer_test.rb +0 -0
  295. data/test/{unit → unit_legacy}/vagrant/vm_test.rb +0 -0
  296. data/vagrant.gemspec +7 -9
  297. metadata +183 -179
  298. data/keys/vagrant.ppk +0 -26
  299. data/lib/vagrant/action/box.rb +0 -11
  300. data/lib/vagrant/action/env.rb +0 -7
  301. data/lib/vagrant/action/general.rb +0 -8
  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/action/vm.rb +0 -34
  306. data/lib/vagrant/command/group_base.rb +0 -107
  307. data/lib/vagrant/command/helpers.rb +0 -33
  308. data/lib/vagrant/command/named_base.rb +0 -14
  309. data/lib/vagrant/command/upgrade_to_060.rb +0 -45
  310. data/lib/vagrant/command/version.rb +0 -13
  311. data/lib/vagrant/ssh/session.rb +0 -136
  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/error.rb +0 -9
  316. data/lib/vagrant/systems/linux.rb +0 -82
  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/lib/vagrant/systems.rb +0 -13
  321. data/templates/network_entry_arch.erb +0 -9
  322. data/templates/network_entry_debian.erb +0 -8
  323. data/templates/network_entry_gentoo.erb +0 -5
  324. data/templates/network_entry_redhat.erb +0 -9
  325. data/test/unit/vagrant/ui_test.rb +0 -29
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  class Suspend
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.running?
11
- env.ui.info I18n.t("vagrant.actions.vm.suspend.suspending")
12
- env["vm"].vm.save_state
10
+ if env[:vm].state == :running
11
+ env[:ui].info I18n.t("vagrant.actions.vm.suspend.suspending")
12
+ env[:vm].driver.suspend
13
13
  end
14
14
 
15
15
  @app.call(env)
@@ -1,5 +1,7 @@
1
+ require "log4r"
2
+
1
3
  module Vagrant
2
- class Action
4
+ module Action
3
5
  # The action warden is a middleware which injects itself between
4
6
  # every other middleware, watching for exceptions which are raised
5
7
  # and performing proper cleanup on every action by calling the `recover`
@@ -16,6 +18,7 @@ module Vagrant
16
18
  def initialize(actions, env)
17
19
  @stack = []
18
20
  @actions = actions.map { |m| finalize_action(m, env) }
21
+ @logger = Log4r::Logger.new("vagrant::action::warden")
19
22
  end
20
23
 
21
24
  def call(env)
@@ -24,17 +27,17 @@ module Vagrant
24
27
  begin
25
28
  # Call the next middleware in the sequence, appending to the stack
26
29
  # of "recoverable" middlewares in case something goes wrong!
27
- raise Errors::VagrantInterrupt if env.interrupted?
30
+ raise Errors::VagrantInterrupt if env[:interrupted]
28
31
  action = @actions.shift
29
- env["logger"].info("warden") { "Calling action: #{action}" }
32
+ @logger.info("Calling action: #{action}")
30
33
  @stack.unshift(action).first.call(env)
31
- raise Errors::VagrantInterrupt if env.interrupted?
34
+ raise Errors::VagrantInterrupt if env[:interrupted]
32
35
  rescue SystemExit
33
36
  # This means that an "exit" or "abort" was called. In these cases,
34
37
  # we just exit immediately.
35
38
  raise
36
39
  rescue Exception => e
37
- env["logger"].info("warden") { "Error occurred: #{e}" }
40
+ @logger.error("Error occurred: #{e}")
38
41
  env["vagrant.error"] = e
39
42
 
40
43
  # Something went horribly wrong. Start the rescue chain then
@@ -50,7 +53,7 @@ module Vagrant
50
53
  def begin_rescue(env)
51
54
  @stack.each do |act|
52
55
  if act.respond_to?(:recover)
53
- env["logger"].info("warden") { "Calling recover: #{act}" }
56
+ @logger.info("Calling recover: #{act}")
54
57
  act.recover(env)
55
58
  end
56
59
  end
@@ -65,6 +68,10 @@ module Vagrant
65
68
  def finalize_action(action, env)
66
69
  klass, args, block = action
67
70
 
71
+ # Default the arguments to an empty array. Otherwise in Ruby 1.8
72
+ # a `nil` args will actually pass `nil` into the class.
73
+ args ||= []
74
+
68
75
  if klass.is_a?(Class)
69
76
  # A action klass which is to be instantiated with the
70
77
  # app, env, and any arguments given
@@ -1,138 +1,60 @@
1
1
  require 'vagrant/action/builder'
2
2
  require 'vagrant/action/builtin'
3
3
 
4
- # The builtin middlewares
5
- require 'vagrant/action/box'
6
- require 'vagrant/action/env'
7
- require 'vagrant/action/general'
8
- require 'vagrant/action/vm'
9
-
10
4
  module Vagrant
11
- # Manages action running and registration. Every Vagrant environment
12
- # has an instance of {Action} to allow for running in the context of
13
- # the environment, which is accessible at {Environment#actions}. Actions
14
- # are the foundation of most functionality in Vagrant, and are implemented
15
- # architecturally as "middleware."
16
- #
17
- # # Registering an Action
18
- #
19
- # The main benefits of registering an action is the ability to retrieve and
20
- # modify that registered action, as well as easily run the action. An example
21
- # of registering an action is shown below, with a simple middleware which just
22
- # outputs to `STDOUT`:
23
- #
24
- # class StdoutMiddleware
25
- # def initialize(app, env)
26
- # @app = app
27
- # end
28
- #
29
- # def call(env)
30
- # puts "HI!"
31
- # @app.call(env)
32
- # end
33
- # end
34
- #
35
- # Vagrant::Action.register(:stdout, StdoutMiddleware)
36
- #
37
- # Then to run a registered action, assuming `env` is a loaded {Environment}:
38
- #
39
- # env.actions.run(:stdout)
40
- #
41
- # Or to retrieve the action class for any reason:
42
- #
43
- # Vagrant::Action[:stdout]
44
- #
45
- # # Running an Action
46
- #
47
- # There are various built-in registered actions such as `start`, `stop`, `up`,
48
- # etc. Actions are built to be run in the context of an environment, so use
49
- # {Environment#actions} to run all actions. Then simply call {#run}:
50
- #
51
- # env.actions.run(:name)
52
- #
53
- # Where `:name` is the name of the registered action.
54
- #
55
- class Action
5
+ module Action
56
6
  autoload :Environment, 'vagrant/action/environment'
7
+ autoload :Runner, 'vagrant/action/runner'
57
8
  autoload :Warden, 'vagrant/action/warden'
58
9
 
59
- include Util
60
- @@reported_interrupt = false
61
-
62
- class << self
63
- # Returns the list of registered actions.
64
- #
65
- # @return [Array]
66
- def actions
67
- @actions ||= {}
68
- end
69
-
70
- # Registers an action and associates it with a symbol. This
71
- # symbol can then be referenced in other action builds and
72
- # callbacks can be registered on that symbol.
73
- #
74
- # @param [Symbol] key
75
- def register(key, callable)
76
- actions[key.to_sym] = callable
77
- end
78
-
79
- # Retrieves a registered action by key.
80
- #
81
- # @param [Symbol] key
82
- def [](key)
83
- actions[key.to_sym]
84
- end
10
+ module Box
11
+ autoload :Destroy, 'vagrant/action/box/destroy'
12
+ autoload :Download, 'vagrant/action/box/download'
13
+ autoload :Package, 'vagrant/action/box/package'
14
+ autoload :Unpackage, 'vagrant/action/box/unpackage'
15
+ autoload :Verify, 'vagrant/action/box/verify'
85
16
  end
86
17
 
87
- # The environment to run the actions in.
88
- attr_reader :env
89
-
90
- # Initializes the action with the given environment which the actions
91
- # will be run in.
92
- #
93
- # @param [Environment] env
94
- def initialize(env)
95
- @env = env
18
+ module Env
19
+ autoload :Set, 'vagrant/action/env/set'
96
20
  end
97
21
 
98
- # Runs the given callable object in the context of the environment.
99
- # If a symbol is given as the `callable` parameter, then it is looked
100
- # up in the registered actions list which are registered with {register}.
101
- #
102
- # Any options given are injected into the environment hash.
103
- #
104
- # @param [Object] callable An object which responds to `call`.
105
- def run(callable_id, options=nil)
106
- callable = callable_id
107
- callable = Builder.new.use(callable_id) if callable_id.kind_of?(Class)
108
- callable = self.class.actions[callable_id] if callable_id.kind_of?(Symbol)
109
- raise ArgumentError, "Argument to run must be a callable object or registered action." if !callable || !callable.respond_to?(:call)
110
-
111
- action_environment = Action::Environment.new(env)
112
- action_environment.merge!(options || {})
113
-
114
- # Run the before action run callback, if we're not doing that already
115
- run(:before_action_run, action_environment) if callable_id != :before_action_run
116
-
117
- # Run the action chain in a busy block, marking the environment as
118
- # interrupted if a SIGINT occurs, and exiting cleanly once the
119
- # chain has been run.
120
- int_callback = lambda do
121
- if action_environment.interrupted?
122
- env.ui.error I18n.t("vagrant.actions.runner.exit_immediately")
123
- abort
124
- end
125
-
126
- env.ui.warn I18n.t("vagrant.actions.runner.waiting_cleanup") if !@@reported_interrupt
127
- action_environment.interrupt!
128
- @@reported_interrupt = true
129
- end
22
+ module General
23
+ autoload :Package, 'vagrant/action/general/package'
24
+ autoload :Validate, 'vagrant/action/general/validate'
25
+ end
130
26
 
131
- # We place a process lock around every action that is called
132
- env.logger.info "Running action: #{callable_id}"
133
- env.lock do
134
- Busy.busy(int_callback) { callable.call(action_environment) }
135
- end
27
+ module VM
28
+ autoload :Boot, 'vagrant/action/vm/boot'
29
+ autoload :CheckAccessible, 'vagrant/action/vm/check_accessible'
30
+ autoload :CheckBox, 'vagrant/action/vm/check_box'
31
+ autoload :CheckGuestAdditions, 'vagrant/action/vm/check_guest_additions'
32
+ autoload :CheckPortCollisions, 'vagrant/action/vm/check_port_collisions'
33
+ autoload :CleanMachineFolder, 'vagrant/action/vm/clean_machine_folder'
34
+ autoload :ClearForwardedPorts, 'vagrant/action/vm/clear_forwarded_ports'
35
+ autoload :ClearNetworkInterfaces, 'vagrant/action/vm/clear_network_interfaces'
36
+ autoload :ClearSharedFolders, 'vagrant/action/vm/clear_shared_folders'
37
+ autoload :Customize, 'vagrant/action/vm/customize'
38
+ autoload :Destroy, 'vagrant/action/vm/destroy'
39
+ autoload :DestroyUnusedNetworkInterfaces, 'vagrant/action/vm/destroy_unused_network_interfaces'
40
+ autoload :DiscardState, 'vagrant/action/vm/discard_state'
41
+ autoload :Export, 'vagrant/action/vm/export'
42
+ autoload :ForwardPorts, 'vagrant/action/vm/forward_ports'
43
+ autoload :Halt, 'vagrant/action/vm/halt'
44
+ autoload :HostName, 'vagrant/action/vm/host_name'
45
+ autoload :Import, 'vagrant/action/vm/import'
46
+ autoload :MatchMACAddress, 'vagrant/action/vm/match_mac_address'
47
+ autoload :Network, 'vagrant/action/vm/network'
48
+ autoload :NFS, 'vagrant/action/vm/nfs'
49
+ autoload :Package, 'vagrant/action/vm/package'
50
+ autoload :PackageVagrantfile, 'vagrant/action/vm/package_vagrantfile'
51
+ autoload :Provision, 'vagrant/action/vm/provision'
52
+ autoload :ProvisionerCleanup, 'vagrant/action/vm/provisioner_cleanup'
53
+ autoload :PruneNFSExports, 'vagrant/action/vm/prune_nfs_exports'
54
+ autoload :Resume, 'vagrant/action/vm/resume'
55
+ autoload :ShareFolders, 'vagrant/action/vm/share_folders'
56
+ autoload :SetupPackageFiles, 'vagrant/action/vm/setup_package_files'
57
+ autoload :Suspend, 'vagrant/action/vm/suspend'
136
58
  end
137
59
  end
138
60
  end