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,3 +1,5 @@
1
+ require 'log4r'
2
+
1
3
  require 'vagrant/util/platform'
2
4
 
3
5
  module Vagrant
@@ -7,9 +9,21 @@ module Vagrant
7
9
  include Util
8
10
  include Util::Retryable
9
11
 
10
- def self.distro_dispatch
11
- return FreeBSD if Util::Platform.freebsd?
12
- return self if Util::Platform.darwin? || Util::Platform.bsd?
12
+ def self.match?
13
+ Util::Platform.darwin? || Util::Platform.bsd?
14
+ end
15
+
16
+ def self.precedence
17
+ # Set a lower precedence because this is a generic OS. We
18
+ # want specific distros to match first.
19
+ 2
20
+ end
21
+
22
+ def initialize(*args)
23
+ super
24
+
25
+ @logger = Log4r::Logger.new("vagrant::hosts::bsd")
26
+ @nfs_restart_command = "sudo nfsd restart"
13
27
  end
14
28
 
15
29
  def nfs?
@@ -18,42 +32,65 @@ module Vagrant
18
32
  end
19
33
  end
20
34
 
21
- def nfs_export(ip, folders)
35
+ def nfs_export(id, ip, folders)
22
36
  output = TemplateRenderer.render('nfs/exports',
23
- :uuid => env.vm.uuid,
37
+ :uuid => id,
24
38
  :ip => ip,
25
39
  :folders => folders)
26
40
 
27
41
  # The sleep ensures that the output is truly flushed before any `sudo`
28
42
  # commands are issued.
29
- env.ui.info I18n.t("vagrant.hosts.bsd.nfs_export.prepare")
43
+ @ui.info I18n.t("vagrant.hosts.bsd.nfs_export")
30
44
  sleep 0.5
31
45
 
46
+ # First, clean up the old entry
47
+ nfs_cleanup(id)
48
+
49
+ # Output the rendered template into the exports
32
50
  output.split("\n").each do |line|
33
- # This should only ask for administrative permission once, even
34
- # though its executed in multiple subshells.
35
51
  line = line.gsub('"', '\"')
36
52
  system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
37
53
  end
38
54
 
39
55
  # We run restart here instead of "update" just in case nfsd
40
56
  # is not starting
41
- system("sudo nfsd restart")
57
+ system(@nfs_restart_command)
42
58
  end
43
59
 
44
- def nfs_cleanup
60
+ def nfs_prune(valid_ids)
45
61
  return if !File.exist?("/etc/exports")
46
62
 
47
- retryable(:tries => 10, :on => TypeError) do
48
- system("cat /etc/exports | grep 'VAGRANT-BEGIN: #{env.vm.uuid}' > /dev/null 2>&1")
63
+ @logger.info("Pruning invalid NFS entries...")
49
64
 
50
- if $?.to_i == 0
51
- # Use sed to just strip out the block of code which was inserted
52
- # by Vagrant
53
- system("sudo sed -e '/^# VAGRANT-BEGIN: #{env.vm.uuid}/,/^# VAGRANT-END: #{env.vm.uuid}/ d' -ibak /etc/exports")
65
+ output = false
66
+
67
+ File.read("/etc/exports").lines.each do |line|
68
+ if line =~ /^# VAGRANT-BEGIN: (.+?)$/
69
+ if valid_ids.include?($1.to_s)
70
+ @logger.debug("Valid ID: #{$1.to_s}")
71
+ else
72
+ if !output
73
+ # We want to warn the user but we only want to output once
74
+ @ui.info I18n.t("vagrant.hosts.bsd.nfs_prune")
75
+ output = true
76
+ end
77
+
78
+ @logger.info("Invalid ID, pruning: #{$1.to_s}")
79
+ nfs_cleanup($1.to_s)
80
+ end
54
81
  end
55
82
  end
56
83
  end
84
+
85
+ protected
86
+
87
+ def nfs_cleanup(id)
88
+ return if !File.exist?("/etc/exports")
89
+
90
+ # Use sed to just strip out the block of code which was inserted
91
+ # by Vagrant, and restart NFS.
92
+ system("sudo sed -e '/^# VAGRANT-BEGIN: #{id}/,/^# VAGRANT-END: #{id}/ d' -ibak /etc/exports")
93
+ end
57
94
  end
58
95
  end
59
96
  end
@@ -1,6 +1,20 @@
1
+ require 'pathname'
2
+
1
3
  module Vagrant
2
4
  module Hosts
3
5
  class Fedora < Linux
6
+ def self.match?
7
+ release_file = Pathname.new("/etc/redhat-release")
8
+
9
+ if release_file.exist?
10
+ release_file.open("r") do |f|
11
+ return true if f.gets =~ /^Fedora/
12
+ end
13
+ end
14
+
15
+ false
16
+ end
17
+
4
18
  def initialize(*args)
5
19
  super
6
20
 
@@ -7,45 +7,15 @@ module Vagrant
7
7
  include Util
8
8
  include Util::Retryable
9
9
 
10
- def nfs_export(ip, folders)
11
- output = TemplateRenderer.render('nfs/exports',
12
- :uuid => env.vm.uuid,
13
- :ip => ip,
14
- :folders => folders)
15
-
16
- # The sleep ensures that the output is truly flushed before any `sudo`
17
- # commands are issued.
18
- env.ui.info I18n.t("vagrant.hosts.bsd.nfs_export.prepare")
19
- sleep 0.5
20
-
21
- output.split("\n").each do |line|
22
- # This should only ask for administrative permission once, even
23
- # though its executed in multiple subshells.
24
- line = line.gsub('"', '\"')
25
- system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
26
- end
27
-
28
- # We run restart here instead of "update" just in case nfsd
29
- # is not starting
30
- system("sudo /etc/rc.d/mountd onereload")
10
+ def self.match?
11
+ Util::Platform.freebsd?
31
12
  end
32
13
 
33
- end
34
-
35
- def nfs_cleanup
36
- return if !File.exist?("/etc/exports")
37
-
38
- retryable(:tries => 10, :on => TypeError) do
39
- system("cat /etc/exports | grep 'VAGRANT-BEGIN: #{env.vm.uuid}' > /dev/null 2>&1")
14
+ def initialize(*args)
15
+ super
40
16
 
41
- if $?.to_i == 0
42
- # Use sed to just strip out the block of code which was inserted
43
- # by Vagrant
44
- system("sudo sed -e '/^# VAGRANT-BEGIN: #{env.vm.uuid}/,/^# VAGRANT-END: #{env.vm.uuid}/ d' -ibak /etc/exports")
45
- end
46
-
47
- system("sudo /etc/rc.d/mountd onereload")
48
- end
17
+ @nfs_restart_command = "sudo /etc/rc.d/mountd onereload"
49
18
  end
19
+ end
50
20
  end
51
21
  end
@@ -1,3 +1,5 @@
1
+ require 'log4r'
2
+
1
3
  require 'vagrant/util/platform'
2
4
 
3
5
  module Vagrant
@@ -7,23 +9,20 @@ module Vagrant
7
9
  include Util
8
10
  include Util::Retryable
9
11
 
10
- def self.distro_dispatch
11
- return nil if !Util::Platform.linux?
12
- return Arch if File.exist?("/etc/rc.conf") && File.exist?("/etc/pacman.conf")
13
-
14
- if File.exist?("/etc/redhat-release")
15
- # Check if we have a known redhat release
16
- File.open("/etc/redhat-release") do |f|
17
- return Fedora if f.gets =~ /^Fedora/
18
- end
19
- end
12
+ def self.match?
13
+ Util::Platform.linux?
14
+ end
20
15
 
21
- return self
16
+ def self.precedence
17
+ # Set a lower precedence because this is a generic OS. We
18
+ # want specific distros to match first.
19
+ 2
22
20
  end
23
21
 
24
22
  def initialize(*args)
25
23
  super
26
24
 
25
+ @logger = Log4r::Logger.new("vagrant::hosts::linux")
27
26
  @nfs_server_binary = "/etc/init.d/nfs-kernel-server"
28
27
  end
29
28
 
@@ -34,15 +33,17 @@ module Vagrant
34
33
  end
35
34
  end
36
35
 
37
- def nfs_export(ip, folders)
36
+ def nfs_export(id, ip, folders)
38
37
  output = TemplateRenderer.render('nfs/exports_linux',
39
- :uuid => env.vm.uuid,
38
+ :uuid => id,
40
39
  :ip => ip,
41
40
  :folders => folders)
42
41
 
43
- env.ui.info I18n.t("vagrant.hosts.linux.nfs_export.prepare")
42
+ @ui.info I18n.t("vagrant.hosts.linux.nfs_export")
44
43
  sleep 0.5
45
44
 
45
+ nfs_cleanup(id)
46
+
46
47
  output.split("\n").each do |line|
47
48
  # This should only ask for administrative permission once, even
48
49
  # though its executed in multiple subshells.
@@ -54,16 +55,40 @@ module Vagrant
54
55
  system("sudo #{@nfs_server_binary} restart")
55
56
  end
56
57
 
57
- def nfs_cleanup
58
+ def nfs_prune(valid_ids)
58
59
  return if !File.exist?("/etc/exports")
59
- system("cat /etc/exports | grep 'VAGRANT-BEGIN: #{env.vm.uuid}' > /dev/null 2>&1")
60
60
 
61
- if $?.to_i == 0
62
- # Use sed to just strip out the block of code which was inserted
63
- # by Vagrant
64
- system("sudo sed -e '/^# VAGRANT-BEGIN: #{env.vm.uuid}/,/^# VAGRANT-END: #{env.vm.uuid}/ d' -ibak /etc/exports")
61
+ @logger.info("Pruning invalid NFS entries...")
62
+
63
+ output = false
64
+
65
+ File.read("/etc/exports").lines.each do |line|
66
+ if line =~ /^# VAGRANT-BEGIN: (.+?)$/
67
+ if valid_ids.include?($1.to_s)
68
+ @logger.debug("Valid ID: #{$1.to_s}")
69
+ else
70
+ if !output
71
+ # We want to warn the user but we only want to output once
72
+ @ui.info I18n.t("vagrant.hosts.linux.nfs_prune")
73
+ output = true
74
+ end
75
+
76
+ @logger.info("Invalid ID, pruning: #{$1.to_s}")
77
+ nfs_cleanup($1.to_s)
78
+ end
79
+ end
65
80
  end
66
81
  end
82
+
83
+ protected
84
+
85
+ def nfs_cleanup(id)
86
+ return if !File.exist?("/etc/exports")
87
+
88
+ # Use sed to just strip out the block of code which was inserted
89
+ # by Vagrant
90
+ system("sudo sed -e '/^# VAGRANT-BEGIN: #{id}/,/^# VAGRANT-END: #{id}/ d' -ibak /etc/exports")
91
+ end
67
92
  end
68
93
  end
69
94
  end
@@ -0,0 +1,16 @@
1
+ require 'vagrant/util/platform'
2
+
3
+ module Vagrant
4
+ module Hosts
5
+ class Windows < Base
6
+ def self.match?
7
+ Util::Platform.windows?
8
+ end
9
+
10
+ # Windows does not support NFS
11
+ def nfs?
12
+ false
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,9 +1,12 @@
1
1
  # These aren't autoloaded because they have to register things such
2
2
  # as configuration classes right away with Vagrant.
3
- require 'vagrant/provisioners/base'
4
- require 'vagrant/provisioners/chef'
5
- require 'vagrant/provisioners/chef_client'
6
- require 'vagrant/provisioners/chef_solo'
7
- require 'vagrant/provisioners/puppet'
8
- require 'vagrant/provisioners/puppet_server'
9
- require 'vagrant/provisioners/shell'
3
+ module Vagrant
4
+ module Provisioners
5
+ autoload :Base, 'vagrant/provisioners/base'
6
+ autoload :ChefSolo, 'vagrant/provisioners/chef_solo'
7
+ autoload :ChefClient, 'vagrant/provisioners/chef_client'
8
+ autoload :Puppet, 'vagrant/provisioners/puppet'
9
+ autoload :PuppetServer, 'vagrant/provisioners/puppet_server'
10
+ autoload :Shell, 'vagrant/provisioners/shell'
11
+ end
12
+ end
@@ -1,52 +1,29 @@
1
1
  module Vagrant
2
2
  module Provisioners
3
3
  # The base class for a "provisioner." A provisioner is responsible for
4
- # provisioning a Vagrant system. This has been abstracted out to provide
5
- # support for multiple solutions such as Chef Solo, Chef Client, and
6
- # Puppet.
4
+ # provisioning a Vagrant system.
5
+ #
6
+ # This has been abstracted out so it is easy to provide support for
7
+ # multiple solutions.
7
8
  class Base
8
9
  include Vagrant::Util
9
10
 
10
- # The environment which provisioner is running in. This is a
11
- # {Vagrant::Action::Environment}
12
- attr_reader :action_env
11
+ # The environment which provisioner is running in. This is the
12
+ # action environment, not a Vagrant::Environment.
13
+ attr_reader :env
13
14
 
14
15
  # The configuration for this provisioner. This will be an instance of
15
16
  # the `Config` class which is part of the provisioner.
16
17
  attr_reader :config
17
18
 
18
- # Registers a provisioner with a given shortcut. This allows that provisioner
19
- # to be referenced with the shortcut.
20
- #
21
- # @param [Symbol] shortcut
22
- def self.register(shortcut)
23
- registered[shortcut] = self
24
- end
25
-
26
- # Returns the provisioner associated with the given shortcut.
27
- def self.registered
28
- @@registered ||= {}
29
- end
30
-
31
19
  def initialize(env, config)
32
- @action_env = env
20
+ @env = env
33
21
  @config = config
34
22
  end
35
23
 
36
- # Returns the actual {Vagrant::Environment} which this provisioner
37
- # represents.
38
- #
39
- # @return [Vagrant::Environment]
40
- def env
41
- action_env.env
42
- end
43
-
44
- # Returns the VM which this provisioner is working on.
45
- #
46
- # @return [Vagrant::VM]
47
- def vm
48
- env.vm
49
- end
24
+ # This method is expected to return a class that is used for configuration
25
+ # for the provisioner.
26
+ def self.config_class; end
50
27
 
51
28
  # This is the method called to "prepare" the provisioner. This is called
52
29
  # before any actions are run by the action runner (see {Vagrant::Actions::Runner}).
@@ -1,3 +1,5 @@
1
+ require 'tempfile'
2
+
1
3
  module Vagrant
2
4
  module Provisioners
3
5
  # This class is a base class where the common functionality shared between
@@ -17,11 +19,12 @@ module Vagrant
17
19
  end
18
20
 
19
21
  def verify_binary(binary)
20
- vm.ssh.execute do |ssh|
21
- # Checks for the existence of chef binary and error if it
22
- # doesn't exist.
23
- ssh.sudo!("which #{binary}", :error_class => ChefError, :_key => :chef_not_detected, :binary => binary)
24
- end
22
+ # Checks for the existence of chef binary and error if it
23
+ # doesn't exist.
24
+ env[:vm].channel.sudo("which #{binary}",
25
+ :error_class => ChefError,
26
+ :error_key => :chef_not_detected,
27
+ :binary => binary)
25
28
  end
26
29
 
27
30
  # Returns the path to the Chef binary, taking into account the
@@ -32,10 +35,8 @@ module Vagrant
32
35
  end
33
36
 
34
37
  def chown_provisioning_folder
35
- vm.ssh.execute do |ssh|
36
- ssh.sudo!("mkdir -p #{config.provisioning_path}")
37
- ssh.sudo!("chown #{env.config.ssh.username} #{config.provisioning_path}")
38
- end
38
+ env[:vm].channel.sudo("mkdir -p #{config.provisioning_path}")
39
+ env[:vm].channel.sudo("chown #{env[:vm].config.ssh.username} #{config.provisioning_path}")
39
40
  end
40
41
 
41
42
  def setup_config(template, filename, template_vars)
@@ -50,17 +51,23 @@ module Vagrant
50
51
  :no_proxy => config.no_proxy
51
52
  }.merge(template_vars))
52
53
 
53
- vm.ssh.upload!(StringIO.new(config_file), File.join(config.provisioning_path, filename))
54
+ # Create a temporary file to store the data so we
55
+ # can upload it
56
+ temp = Tempfile.new("vagrant")
57
+ temp.write(config_file)
58
+ temp.close
59
+
60
+ env[:vm].channel.upload(temp.path, File.join(config.provisioning_path, filename))
54
61
  end
55
62
 
56
63
  def setup_json
57
- env.ui.info I18n.t("vagrant.provisioners.chef.json")
64
+ env[:ui].info I18n.t("vagrant.provisioners.chef.json")
58
65
 
59
66
  # Set up our configuration that is passed to the attributes by default
60
- data = { :config => env.config.to_hash }
67
+ data = { :config => env[:global_config].to_hash }
61
68
 
62
69
  # Add our default share directory if it exists
63
- default_share = env.config.vm.shared_folders["v-root"]
70
+ default_share = env[:vm].config.vm.shared_folders["v-root"]
64
71
  data[:directory] = default_share[:guestpath] if default_share
65
72
 
66
73
  # And wrap it under the "vagrant" namespace
@@ -72,7 +79,13 @@ module Vagrant
72
79
 
73
80
  json = data.to_json
74
81
 
75
- vm.ssh.upload!(StringIO.new(json), File.join(config.provisioning_path, "dna.json"))
82
+ # Create a temporary file to store the data so we
83
+ # can upload it
84
+ temp = Tempfile.new("vagrant")
85
+ temp.write(json)
86
+ temp.close
87
+
88
+ env[:vm].channel.upload(temp.path, File.join(config.provisioning_path, "dna.json"))
76
89
  end
77
90
  end
78
91
 
@@ -99,22 +112,13 @@ module Vagrant
99
112
  attr_accessor :no_proxy
100
113
  attr_accessor :binary_path
101
114
  attr_accessor :binary_env
115
+ attr_accessor :attempts
102
116
  attr_writer :run_list
103
117
 
104
118
  def initialize
105
- @provisioning_path = nil
106
- @log_level = :info
119
+ @attempts = 1
107
120
  @json = {}
108
- @http_proxy = nil
109
- @http_proxy_user = nil
110
- @http_proxy_pass = nil
111
- @https_proxy = nil
112
- @https_proxy_user = nil
113
- @https_proxy_pass = nil
114
- @no_proxy = nil
115
- @binary_path = nil
116
- @binary_env = nil
117
- @run_list = nil
121
+ @log_level = :info
118
122
  end
119
123
 
120
124
  # This returns the json that is merged with the defaults and the