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,7 @@
1
1
  require 'fileutils'
2
2
 
3
3
  module Vagrant
4
- class Action
4
+ module Action
5
5
  module Box
6
6
  class Destroy
7
7
  def initialize(app, env)
@@ -10,8 +10,12 @@ module Vagrant
10
10
  end
11
11
 
12
12
  def call(env)
13
- env.ui.info I18n.t("vagrant.actions.box.destroy.destroying", :name => env["box"].name)
14
- FileUtils.rm_rf(env["box"].directory)
13
+ # Delete the existing box
14
+ env[:ui].info I18n.t("vagrant.actions.box.destroy.destroying", :name => env[:box_name])
15
+ FileUtils.rm_rf(env[:box_directory])
16
+
17
+ # Reload the box collection
18
+ env[:box_collection].reload!
15
19
 
16
20
  @app.call(env)
17
21
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module Box
4
4
  class Download
5
5
  BASENAME = "box"
@@ -36,9 +36,9 @@ module Vagrant
36
36
 
37
37
  # Use the class if it matches the given URI or if this
38
38
  # is the last class...
39
- if classes.length == (i + 1) || klass.match?(@env["box"].uri)
40
- @env.ui.info I18n.t("vagrant.actions.box.download.with", :class => klass.to_s)
41
- @downloader = klass.new(@env)
39
+ if classes.length == (i + 1) || klass.match?(@env["box_url"])
40
+ @env[:ui].info I18n.t("vagrant.actions.box.download.with", :class => klass.to_s)
41
+ @downloader = klass.new(@env[:ui])
42
42
  break
43
43
  end
44
44
  end
@@ -47,7 +47,7 @@ module Vagrant
47
47
  # just in case for now.
48
48
  raise Errors::BoxDownloadUnknownType if !@downloader
49
49
 
50
- @downloader.prepare(@env["box"].uri)
50
+ @downloader.prepare(@env["box_url"])
51
51
  true
52
52
  end
53
53
 
@@ -60,7 +60,7 @@ module Vagrant
60
60
 
61
61
  def recover(env)
62
62
  if temp_path && File.exist?(temp_path)
63
- env.ui.info I18n.t("vagrant.actions.box.download.cleaning")
63
+ env[:ui].info I18n.t("vagrant.actions.box.download.cleaning")
64
64
  File.unlink(temp_path)
65
65
  end
66
66
  end
@@ -72,11 +72,11 @@ module Vagrant
72
72
  end
73
73
 
74
74
  def box_temp_path
75
- @env.env.tmp_path.join(BASENAME + Time.now.to_i.to_s)
75
+ @env[:tmp_path].join(BASENAME + Time.now.to_i.to_s)
76
76
  end
77
77
 
78
78
  def download_to(f)
79
- @downloader.download!(@env["box"].uri, f)
79
+ @downloader.download!(@env["box_url"], f)
80
80
  end
81
81
  end
82
82
  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 Box
6
6
  # Packages a box which has already been unpackaged (such as
7
7
  # for the `vagrant box repackage` command) by leveraging the
@@ -10,7 +10,7 @@ module Vagrant
10
10
  # Alias instead of calling super for testability
11
11
  alias_method :general_call, :call
12
12
  def call(env)
13
- env["package.directory"] = env["box"].directory
13
+ env["package.directory"] = env["box_directory"]
14
14
  general_call(env)
15
15
  end
16
16
  end
@@ -2,7 +2,7 @@ require 'fileutils'
2
2
  require 'archive/tar/minitar'
3
3
 
4
4
  module Vagrant
5
- class Action
5
+ module Action
6
6
  module Box
7
7
  # Unpackages a downloaded box to a given directory with a given
8
8
  # name.
@@ -37,16 +37,22 @@ module Vagrant
37
37
  end
38
38
 
39
39
  def setup_box_directory
40
- raise Errors::BoxAlreadyExists, :name => @env["box"].name if File.directory?(@env["box"].directory)
40
+ if File.directory?(@env["box_directory"])
41
+ raise Errors::BoxAlreadyExists, :name => @env["box_name"]
42
+ end
41
43
 
42
- FileUtils.mkdir_p(@env["box"].directory)
43
- @box_directory = @env["box"].directory
44
+ FileUtils.mkdir_p(@env["box_directory"])
45
+ @box_directory = @env["box_directory"]
44
46
  end
45
47
 
46
48
  def decompress
47
- Dir.chdir(@env["box"].directory) do
48
- @env.ui.info I18n.t("vagrant.actions.box.unpackage.extracting")
49
- Archive::Tar::Minitar.unpack(@env["download.temp_path"], @env["box"].directory.to_s)
49
+ Dir.chdir(@env["box_directory"]) do
50
+ @env[:ui].info I18n.t("vagrant.actions.box.unpackage.extracting")
51
+ begin
52
+ Archive::Tar::Minitar.unpack(@env["download.temp_path"], @env["box_directory"].to_s)
53
+ rescue SystemCallError
54
+ raise Errors::BoxUnpackageFailure
55
+ end
50
56
  end
51
57
  end
52
58
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module Box
4
4
  class Verify
5
5
  def initialize(app, env)
@@ -8,10 +8,10 @@ module Vagrant
8
8
  end
9
9
 
10
10
  def call(env)
11
- begin
12
- env.ui.info I18n.t("vagrant.actions.box.verify.verifying")
13
- VirtualBox::Appliance.new(env["box"].ovf_file.to_s)
14
- rescue Exception
11
+ @env[:ui].info I18n.t("vagrant.actions.box.verify.verifying")
12
+
13
+ driver = Driver::VirtualBox.new(nil)
14
+ if !driver.verify_image(env["box_directory"].join("box.ovf").to_s)
15
15
  raise Errors::BoxVerificationFailed
16
16
  end
17
17
 
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  # Action builder which provides a nice DSL for building up
4
4
  # a middleware sequence for Vagrant actions. This code is based
5
5
  # heavily off of `Rack::Builder` and `ActionDispatch::MiddlewareStack`
@@ -23,14 +23,6 @@ module Vagrant
23
23
  instance_eval(&block) if block_given?
24
24
  end
25
25
 
26
- # Returns the current stack of middlewares. You probably won't
27
- # need to use this directly, and it's recommended that you don't.
28
- #
29
- # @return [Array]
30
- def stack
31
- @stack ||= []
32
- end
33
-
34
26
  # Returns a mergeable version of the builder. If `use` is called with
35
27
  # the return value of this method, then the stack will merge, instead
36
28
  # of being treated as a separate single middleware.
@@ -46,10 +38,12 @@ module Vagrant
46
38
  #
47
39
  # @param [Class] middleware The middleware class
48
40
  def use(middleware, *args, &block)
49
- if middleware.kind_of?(Builder)
50
- # Prepend with a environment setter if args are given
51
- self.use(Env::Set, *args, &block) if !args.empty? && args.first.is_a?(Hash)
41
+ # Prepend with a environment setter if args are given
42
+ if !args.empty? && args.first.is_a?(Hash) && middleware != Env::Set
43
+ self.use(Env::Set, args.shift, &block)
44
+ end
52
45
 
46
+ if middleware.kind_of?(Builder)
53
47
  # Merge in the other builder's stack into our own
54
48
  self.stack.concat(middleware.stack)
55
49
  else
@@ -75,9 +69,9 @@ module Vagrant
75
69
  insert(index + 1, middleware, *args, &block)
76
70
  end
77
71
 
78
- # Swaps out the given middlware object or index with the new
72
+ # Replaces the given middlware object or index with the new
79
73
  # middleware.
80
- def swap(index, middleware, *args, &block)
74
+ def replace(index, middleware, *args, &block)
81
75
  if index.is_a?(Integer)
82
76
  delete(index)
83
77
  insert(index, middleware, *args, &block)
@@ -93,6 +87,13 @@ module Vagrant
93
87
  stack.delete_at(index)
94
88
  end
95
89
 
90
+ # Runs the builder stack with the given environment.
91
+ def call(env)
92
+ to_app(env).call(env)
93
+ end
94
+
95
+ protected
96
+
96
97
  # Returns the numeric index for the given middleware object.
97
98
  #
98
99
  # @param [Object] object The item to find the index for
@@ -105,6 +106,14 @@ module Vagrant
105
106
  nil
106
107
  end
107
108
 
109
+ # Returns the current stack of middlewares. You probably won't
110
+ # need to use this directly, and it's recommended that you don't.
111
+ #
112
+ # @return [Array]
113
+ def stack
114
+ @stack ||= []
115
+ end
116
+
108
117
  # Converts the builder stack to a runnable action sequence.
109
118
  #
110
119
  # @param [Vagrant::Action::Environment] env The action environment
@@ -114,11 +123,6 @@ module Vagrant
114
123
  # and predictable behavior upon exceptions.
115
124
  Warden.new(stack.dup, env)
116
125
  end
117
-
118
- # Runs the builder stack with the given environment.
119
- def call(env)
120
- to_app(env).call(env)
121
- end
122
126
  end
123
127
  end
124
128
  end
@@ -1,108 +1,146 @@
1
1
  module Vagrant
2
- class Action
3
- # Registers the builtin actions. These are locked away in a
4
- # method so that their definition can be deferred until after
5
- # all the necessary Vagrant libraries are loaded. Hopefully
6
- # in the future this will no longer be necessary with autoloading.
7
- def self.builtin!
2
+ module Action
3
+ # Registers the builtin actions with a specific registry.
4
+ #
5
+ # These are the pre-built action sequences that are shipped with
6
+ # Vagrant itself.
7
+ def self.builtin!(registry)
8
8
  # provision - Provisions a running VM
9
- register(:provision, Builder.new do
10
- use VM::Provision
11
- end)
9
+ registry.register(:provision) do
10
+ Builder.new do
11
+ use General::Validate
12
+ use VM::CheckAccessible
13
+ use VM::Provision
14
+ end
15
+ end
12
16
 
13
17
  # start - Starts a VM, assuming it already exists on the
14
18
  # environment.
15
- register(:start, Builder.new do
16
- use VM::CleanMachineFolder
17
- use VM::ClearForwardedPorts
18
- use VM::ForwardPorts
19
- use VM::Provision
20
- use VM::NFS
21
- use VM::ClearSharedFolders
22
- use VM::ShareFolders
23
- use VM::HostName
24
- use VM::Network
25
- use VM::Customize
26
- use VM::Modify
27
- use VM::Boot
28
- end)
19
+ registry.register(:start) do
20
+ Builder.new do
21
+ use General::Validate
22
+ use VM::CheckAccessible
23
+ use VM::CleanMachineFolder
24
+ use VM::ClearForwardedPorts
25
+ use VM::CheckPortCollisions, :port_collision_handler => :correct
26
+ use VM::ForwardPorts
27
+ use VM::Provision
28
+ use VM::PruneNFSExports
29
+ use VM::NFS
30
+ use VM::ClearSharedFolders
31
+ use VM::ShareFolders
32
+ use VM::HostName
33
+ use VM::ClearNetworkInterfaces
34
+ use VM::Network
35
+ use VM::Customize
36
+ use VM::Boot
37
+ end
38
+ end
29
39
 
30
40
  # halt - Halts the VM, attempting gracefully but then forcing
31
41
  # a restart if fails.
32
- register(:halt, Builder.new do
33
- use VM::DiscardState
34
- use VM::Halt
35
- end)
42
+ registry.register(:halt) do
43
+ Builder.new do
44
+ use General::Validate
45
+ use VM::CheckAccessible
46
+ use VM::DiscardState
47
+ use VM::Halt
48
+ end
49
+ end
36
50
 
37
51
  # suspend - Suspends the VM
38
- register(:suspend, Builder.new do
39
- use VM::Suspend
40
- end)
52
+ registry.register(:suspend) do
53
+ Builder.new do
54
+ use General::Validate
55
+ use VM::CheckAccessible
56
+ use VM::Suspend
57
+ end
58
+ end
41
59
 
42
60
  # resume - Resume a VM
43
- register(:resume, Builder.new do
44
- use VM::Resume
45
- end)
61
+ registry.register(:resume) do
62
+ Builder.new do
63
+ use General::Validate
64
+ use VM::CheckAccessible
65
+ use VM::CheckPortCollisions
66
+ use VM::Resume
67
+ end
68
+ end
46
69
 
47
70
  # reload - Halts then restarts the VM
48
- register(:reload, Builder.new do
49
- use Action[:halt]
50
- use Action[:start]
51
- end)
71
+ registry.register(:reload) do
72
+ Builder.new do
73
+ use General::Validate
74
+ use VM::CheckAccessible
75
+ use registry.get(:halt)
76
+ use registry.get(:start)
77
+ end
78
+ end
52
79
 
53
80
  # up - Imports, prepares, then starts a fresh VM.
54
- register(:up, Builder.new do
55
- use VM::CheckBox
56
- use VM::Import
57
- use VM::MatchMACAddress
58
- use VM::CheckGuestAdditions
59
- use Action[:start]
60
- end)
81
+ registry.register(:up) do
82
+ Builder.new do
83
+ use General::Validate
84
+ use VM::CheckAccessible
85
+ use VM::CheckBox
86
+ use VM::Import
87
+ use VM::CheckGuestAdditions
88
+ use VM::MatchMACAddress
89
+ use registry.get(:start)
90
+ end
91
+ end
61
92
 
62
93
  # destroy - Halts, cleans up, and destroys an existing VM
63
- register(:destroy, Builder.new do
64
- use Action[:halt], :force => true
65
- use VM::ProvisionerCleanup
66
- use VM::ClearNFSExports
67
- use VM::Destroy
68
- use VM::CleanMachineFolder
69
- use VM::DestroyUnusedNetworkInterfaces
70
- end)
94
+ registry.register(:destroy) do
95
+ Builder.new do
96
+ use General::Validate
97
+ use VM::CheckAccessible
98
+ use registry.get(:halt), :force => true
99
+ use VM::ProvisionerCleanup
100
+ use VM::PruneNFSExports
101
+ use VM::Destroy
102
+ use VM::CleanMachineFolder
103
+ use VM::DestroyUnusedNetworkInterfaces
104
+ end
105
+ end
71
106
 
72
107
  # package - Export and package the VM
73
- register(:package, Builder.new do
74
- use Action[:halt]
75
- use VM::ClearForwardedPorts
76
- use VM::ClearSharedFolders
77
- use VM::Modify
78
- use VM::Export
79
- use VM::PackageVagrantfile
80
- use VM::Package
81
- end)
108
+ registry.register(:package) do
109
+ Builder.new do
110
+ use General::Validate
111
+ use VM::SetupPackageFiles
112
+ use VM::CheckAccessible
113
+ use registry.get(:halt)
114
+ use VM::ClearForwardedPorts
115
+ use VM::ClearSharedFolders
116
+ use VM::Export
117
+ use VM::PackageVagrantfile
118
+ use VM::Package
119
+ end
120
+ end
82
121
 
83
122
  # box_add - Download and add a box.
84
- register(:box_add, Builder.new do
85
- use Box::Download
86
- use Box::Unpackage
87
- use Box::Verify
88
- end)
123
+ registry.register(:box_add) do
124
+ Builder.new do
125
+ use Box::Download
126
+ use Box::Unpackage
127
+ use Box::Verify
128
+ end
129
+ end
89
130
 
90
131
  # box_remove - Removes/deletes a box.
91
- register(:box_remove, Builder.new do
92
- use Box::Destroy
93
- end)
132
+ registry.register(:box_remove) do
133
+ Builder.new do
134
+ use Box::Destroy
135
+ end
136
+ end
94
137
 
95
138
  # box_repackage - Repackages a box.
96
- register(:box_repackage, Builder.new do
97
- use Box::Package
98
- end)
99
-
100
- # Other callbacks. There will be more of these in the future. For
101
- # now, these are limited to what are needed internally.
102
- register(:before_action_run, Builder.new do
103
- use General::Validate
104
- use VM::CheckAccessible
105
- end)
139
+ registry.register(:box_repackage) do
140
+ Builder.new do
141
+ use Box::Package
142
+ end
143
+ end
106
144
  end
107
145
  end
108
146
  end