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 VM
6
6
  # Cleans up the VirtualBox machine folder for any ".xml-prev"
7
7
  # files which VirtualBox may have left over. This is a bug in
@@ -13,12 +13,12 @@ module Vagrant
13
13
  end
14
14
 
15
15
  def call(env)
16
- clean_machine_folder
16
+ clean_machine_folder(env[:vm].driver.read_machine_folder)
17
17
  @app.call(env)
18
18
  end
19
19
 
20
- def clean_machine_folder
21
- folder = File.join(VirtualBox::Global.global.system_properties.default_machine_folder, "*")
20
+ def clean_machine_folder(machine_folder)
21
+ folder = File.join(machine_folder, "*")
22
22
 
23
23
  # Small safeguard against potentially unwanted rm-rf, since the default
24
24
  # machine folder will typically always be greater than 10 characters long.
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  class ClearForwardedPorts
5
5
  def initialize(app, env)
@@ -7,17 +7,9 @@ module Vagrant
7
7
  end
8
8
 
9
9
  def call(env)
10
- proc = lambda do |vm|
11
- env.ui.info I18n.t("vagrant.actions.vm.clear_forward_ports.deleting")
10
+ env[:ui].info I18n.t("vagrant.actions.vm.clear_forward_ports.deleting")
11
+ env[:vm].driver.clear_forwarded_ports
12
12
 
13
- vm.network_adapters.each do |na|
14
- na.nat_driver.forwarded_ports.dup.each do |fp|
15
- fp.destroy
16
- end
17
- end
18
- end
19
-
20
- env["vm.modify"].call(proc)
21
13
  @app.call(env)
22
14
  end
23
15
  end
@@ -0,0 +1,31 @@
1
+ module Vagrant
2
+ module Action
3
+ module VM
4
+ class ClearNetworkInterfaces
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ # Create the adapters array to make all adapters nothing.
11
+ # We do adapters 2 to 8 because that is every built-in adapter
12
+ # excluding the NAT adapter on port 1 which Vagrant always
13
+ # expects to exist.
14
+ adapters = []
15
+ 2.upto(8).each do |i|
16
+ adapters << {
17
+ :adapter => i,
18
+ :type => :none
19
+ }
20
+ end
21
+
22
+ # "Enable" all the adapters we setup.
23
+ env[:ui].info I18n.t("vagrant.actions.vm.clear_network_interfaces.deleting")
24
+ env[:vm].driver.enable_adapters(adapters)
25
+
26
+ @app.call(env)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  class ClearSharedFolders
5
5
  def initialize(app, env)
@@ -8,17 +8,8 @@ module Vagrant
8
8
  end
9
9
 
10
10
  def call(env)
11
- proc = lambda do |vm|
12
- if vm.shared_folders.length > 0
13
- env.ui.info I18n.t("vagrant.actions.vm.clear_shared_folders.deleting")
11
+ env[:vm].driver.clear_shared_folders
14
12
 
15
- vm.shared_folders.dup.each do |shared_folder|
16
- shared_folder.destroy
17
- end
18
- end
19
- end
20
-
21
- env["vm.modify"].call(proc)
22
13
  @app.call(env)
23
14
  end
24
15
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  class Customize
5
5
  def initialize(app, env)
@@ -7,15 +7,25 @@ module Vagrant
7
7
  end
8
8
 
9
9
  def call(env)
10
- if !env["config"].vm.proc_stack.empty?
11
- # Create the proc which runs all of our procs
12
- proc = lambda do |vm|
13
- env.ui.info I18n.t("vagrant.actions.vm.customize.running")
14
- env["config"].vm.run_procs!(vm)
15
- end
10
+ customizations = env[:vm].config.vm.customizations
11
+ if !customizations.empty?
12
+ env[:ui].info I18n.t("vagrant.actions.vm.customize.running")
13
+
14
+ # Execute each customization command.
15
+ customizations.each do |command|
16
+ processed_command = command.collect do |arg|
17
+ arg = env[:vm].uuid if arg == :id
18
+ arg
19
+ end
16
20
 
17
- # Add it to modify sequence
18
- env["vm.modify"].call(proc)
21
+ result = env[:vm].driver.execute_command(processed_command)
22
+ if result.exit_code != 0
23
+ raise Errors::VMCustomizationFailed, {
24
+ :command => processed_command.inspect,
25
+ :error => result.stderr
26
+ }
27
+ end
28
+ end
19
29
  end
20
30
 
21
31
  @app.call(env)
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  class Destroy
5
5
  def initialize(app, env)
@@ -7,9 +7,9 @@ module Vagrant
7
7
  end
8
8
 
9
9
  def call(env)
10
- env.ui.info I18n.t("vagrant.actions.vm.destroy.destroying")
11
- env["vm"].vm.destroy
12
- env["vm"].vm = nil
10
+ env[:ui].info I18n.t("vagrant.actions.vm.destroy.destroying")
11
+ env[:vm].driver.delete
12
+ env[:vm].uuid = nil
13
13
 
14
14
  @app.call(env)
15
15
  end
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  # Destroys the unused host only interfaces. This middleware cleans
5
5
  # up any created host only networks.
@@ -9,17 +9,7 @@ module Vagrant
9
9
  end
10
10
 
11
11
  def call(env)
12
- # Destroy all the host only network adapters which are empty.
13
- VirtualBox::Global.global(true).host.network_interfaces.each do |iface|
14
- # We only care about host only interfaces
15
- next if iface.interface_type != :host_only
16
-
17
- # Destroy it if there is nothing attached
18
- if iface.attached_vms.empty?
19
- env.ui.info I18n.t("vagrant.actions.vm.destroy_network.destroying")
20
- iface.destroy
21
- end
22
- end
12
+ env[:vm].driver.delete_unused_host_only_networks
23
13
 
24
14
  # Continue along
25
15
  @app.call(env)
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
- class Action
2
+ module Action
3
3
  module VM
4
4
  # Discards the saved state of the VM if its saved. If its
5
5
  # not saved, does nothing.
@@ -9,9 +9,9 @@ module Vagrant
9
9
  end
10
10
 
11
11
  def call(env)
12
- if env["vm"].created? && env["vm"].vm.saved?
13
- env.ui.info I18n.t("vagrant.actions.vm.discard_state.discarding")
14
- env["vm"].vm.discard_state
12
+ if env[:vm].state == :saved
13
+ env[:ui].info I18n.t("vagrant.actions.vm.discard_state.discarding")
14
+ env[:vm].driver.discard_saved_state
15
15
  end
16
16
 
17
17
  @app.call(env)
@@ -1,7 +1,7 @@
1
1
  require 'fileutils'
2
2
 
3
3
  module Vagrant
4
- class Action
4
+ module Action
5
5
  module VM
6
6
  class Export
7
7
  attr_reader :temp_dir
@@ -14,7 +14,7 @@ module Vagrant
14
14
  def call(env)
15
15
  @env = env
16
16
 
17
- raise Errors::VMPowerOffToPackage if !@env["vm"].vm.powered_off?
17
+ raise Errors::VMPowerOffToPackage if @env["vm"].state != :poweroff
18
18
 
19
19
  setup_temp_dir
20
20
  export
@@ -31,20 +31,25 @@ module Vagrant
31
31
  end
32
32
 
33
33
  def setup_temp_dir
34
- @env.ui.info I18n.t("vagrant.actions.vm.export.create_dir")
35
- @temp_dir = @env["export.temp_dir"] = @env.env.tmp_path.join(Time.now.to_i.to_s)
34
+ @env[:ui].info I18n.t("vagrant.actions.vm.export.create_dir")
35
+ @temp_dir = @env["export.temp_dir"] = @env[:tmp_path].join(Time.now.to_i.to_s)
36
36
  FileUtils.mkpath(@env["export.temp_dir"])
37
37
  end
38
38
 
39
39
  def export
40
- @env.ui.info I18n.t("vagrant.actions.vm.export.exporting")
41
- @env["vm"].vm.export(ovf_path) do |progress|
42
- @env.ui.report_progress(progress.percent, 100, false)
40
+ @env[:ui].info I18n.t("vagrant.actions.vm.export.exporting")
41
+ @env[:vm].driver.export(ovf_path) do |progress|
42
+ @env[:ui].clear_line
43
+ @env[:ui].report_progress(progress.percent, 100, false)
43
44
  end
45
+
46
+ # Clear the line a final time so the next data can appear
47
+ # alone on the line.
48
+ @env[:ui].clear_line
44
49
  end
45
50
 
46
51
  def ovf_path
47
- File.join(@env["export.temp_dir"], @env.env.config.vm.box_ovf)
52
+ File.join(@env["export.temp_dir"], "box.ovf")
48
53
  end
49
54
  end
50
55
  end
@@ -1,134 +1,87 @@
1
- require File.join(File.dirname(__FILE__), 'forward_ports_helpers')
2
-
3
1
  module Vagrant
4
- class Action
2
+ module Action
5
3
  module VM
6
4
  class ForwardPorts
7
- include ForwardPortsHelpers
8
-
9
5
  def initialize(app,env)
10
6
  @app = app
11
- @env = env
12
-
13
- threshold_check
14
- external_collision_check
15
7
  end
16
8
 
17
9
  #--------------------------------------------------------------
18
- # Prepare Helpers - These functions are not involved in actually
19
- # executing the action
10
+ # Execution
20
11
  #--------------------------------------------------------------
12
+ def call(env)
13
+ @env = env
21
14
 
22
- # This method checks for any forwarded ports on the host below
23
- # 1024, which causes the forwarded ports to fail.
24
- def threshold_check
25
- @env.env.config.vm.forwarded_ports.each do |name, options|
26
- if options[:hostport] <= 1024
27
- @env.ui.warn I18n.t("vagrant.actions.vm.forward_ports.privileged_ports")
28
- return
29
- end
30
- end
31
- end
15
+ # Get the ports we're forwarding
16
+ ports = forward_port_definitions
32
17
 
33
- # This method checks for any port collisions with any VMs
34
- # which are already created (by Vagrant or otherwise).
35
- # report the collisions detected or will attempt to fix them
36
- # automatically if the port is configured to do so.
37
- def external_collision_check
38
- existing = used_ports
39
- @env.env.config.vm.forwarded_ports.each do |name, options|
40
- if existing.include?(options[:hostport].to_i)
41
- handle_collision(name, options, existing)
42
- end
43
- end
44
- end
18
+ # Warn if we're port forwarding to any privileged ports...
19
+ threshold_check(ports)
45
20
 
46
- # Handles any collisions. This method will either attempt to
47
- # fix the collision automatically or will raise an error if
48
- # auto fixing is disabled.
49
- def handle_collision(name, options, existing_ports)
50
- if !options[:auto]
51
- # Auto fixing is disabled for this port forward, so we
52
- # must throw an error so the user can fix it.
53
- raise Errors::ForwardPortCollision, :name => name,
54
- :host_port => options[:hostport].to_s,
55
- :guest_port => options[:guestport].to_s
56
- end
21
+ env[:ui].info I18n.t("vagrant.actions.vm.forward_ports.forwarding")
22
+ forward_ports(ports)
57
23
 
58
- # Get the auto port range and get rid of the used ports and
59
- # ports which are being used in other forwards so we're just
60
- # left with available ports.
61
- range = @env.env.config.vm.auto_port_range.to_a
62
- range -= @env.env.config.vm.forwarded_ports.collect { |n, o| o[:hostport].to_i }
63
- range -= existing_ports
24
+ @app.call(env)
25
+ end
64
26
 
65
- if range.empty?
66
- raise Errors::ForwardPortAutolistEmpty, :vm_name => @env["vm"].name,
67
- :name => name,
68
- :host_port => options[:hostport].to_s,
69
- :guest_port => options[:guestport].to_s
27
+ # This returns an array of forwarded ports with overrides properly
28
+ # squashed.
29
+ def forward_port_definitions
30
+ # Get all the port mappings in the order they're defined and
31
+ # organize them by their guestport, taking the "last one wins"
32
+ # approach.
33
+ guest_port_mapping = {}
34
+ @env[:vm].config.vm.forwarded_ports.each do |options|
35
+ guest_port_mapping[options[:guestport]] = options
70
36
  end
71
37
 
72
- # Set the port up to be the first one and add that port to
73
- # the used list.
74
- options[:hostport] = range.shift
75
- existing_ports << options[:hostport]
76
-
77
- # Notify the user
78
- @env.ui.info(I18n.t("vagrant.actions.vm.forward_ports.fixed_collision",
79
- :name => name,
80
- :new_port => options[:hostport]))
38
+ # Return the values, since the order doesn't really matter
39
+ guest_port_mapping.values
81
40
  end
82
41
 
83
- #--------------------------------------------------------------
84
- # Execution
85
- #--------------------------------------------------------------
86
- def call(env)
87
- @env = env
88
-
89
- proc = lambda do |vm|
90
- env.ui.info I18n.t("vagrant.actions.vm.forward_ports.forwarding")
91
- forward_ports(vm)
42
+ # This method checks for any forwarded ports on the host below
43
+ # 1024, which causes the forwarded ports to fail.
44
+ def threshold_check(ports)
45
+ ports.each do |options|
46
+ if options[:hostport] <= 1024
47
+ @env[:ui].warn I18n.t("vagrant.actions.vm.forward_ports.privileged_ports")
48
+ return
49
+ end
92
50
  end
93
-
94
- env["vm.modify"].call(proc)
95
- @app.call(env)
96
51
  end
97
52
 
98
- def forward_ports(vm)
99
- @env.env.config.vm.forwarded_ports.each do |name, options|
100
- adapter = options[:adapter]
53
+ def forward_ports(mappings)
54
+ ports = []
55
+
56
+ interfaces = @env[:vm].driver.read_network_interfaces
57
+
58
+ mappings.each do |options|
101
59
  message_attributes = {
102
- :name => name,
103
60
  :guest_port => options[:guestport],
104
61
  :host_port => options[:hostport],
105
- :adapter => adapter + 1
62
+ :adapter => options[:adapter]
106
63
  }
107
64
 
108
- # Assuming the only reason to establish port forwarding is because the VM is using Virtualbox NAT networking.
109
- # Host-only or Bridged networking don't require port-forwarding and establishing forwarded ports on these
110
- # attachment types has uncertain behaviour.
111
- if vm.network_adapters[adapter].attachment_type == :nat
112
- @env.ui.info(I18n.t("vagrant.actions.vm.forward_ports.forwarding_entry", message_attributes))
113
- forward_port(vm, name, options)
114
- else
115
- @env.ui.info(I18n.t("vagrant.actions.vm.forward_ports.non_nat", message_attributes))
65
+ # Assuming the only reason to establish port forwarding is
66
+ # because the VM is using Virtualbox NAT networking. Host-only
67
+ # bridged networking don't require port-forwarding and establishing
68
+ # forwarded ports on these attachment types has uncertain behaviour.
69
+ @env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.forwarding_entry",
70
+ message_attributes))
71
+
72
+ # Port forwarding requires the network interface to be a NAT interface,
73
+ # so verify that that is the case.
74
+ if interfaces[options[:adapter]][:type] != :nat
75
+ @env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.non_nat",
76
+ message_attributes))
77
+ next
116
78
  end
117
- end
118
- end
119
79
 
120
- #--------------------------------------------------------------
121
- # General Helpers
122
- #--------------------------------------------------------------
80
+ # Add the options to the ports array to send to the driver later
81
+ ports << options.merge(:name => options[:name], :adapter => options[:adapter])
82
+ end
123
83
 
124
- # Forwards a port.
125
- def forward_port(vm, name, options)
126
- port = VirtualBox::NATForwardedPort.new
127
- port.name = name
128
- port.guestport = options[:guestport]
129
- port.hostport = options[:hostport]
130
- port.protocol = options[:protocol] || :tcp
131
- vm.network_adapters[options[:adapter]].nat_driver.forwarded_ports << port
84
+ @env[:vm].driver.forward_ports(ports)
132
85
  end
133
86
  end
134
87
  end