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,32 +1,57 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class BoxCommand < GroupBase
4
- register "box", "Commands to manage system boxes"
5
+ class Box < Base
6
+ def initialize(argv, env)
7
+ super
5
8
 
6
- desc "add NAME URI", "Add a box to the system"
7
- def add(name, uri)
8
- Box.add(env, name, uri)
9
- end
9
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
10
10
 
11
- desc "remove NAME", "Remove a box from the system"
12
- def remove(name)
13
- b = env.boxes.find(name)
14
- raise Errors::BoxNotFound, :name => name if !b
15
- b.destroy
11
+ @subcommands = Registry.new
12
+ @subcommands.register(:add) { Vagrant::Command::BoxAdd }
13
+ @subcommands.register(:remove) { Vagrant::Command::BoxRemove }
14
+ @subcommands.register(:repackage) { Vagrant::Command::BoxRepackage }
15
+ @subcommands.register(:list) { Vagrant::Command::BoxList }
16
16
  end
17
17
 
18
- desc "repackage NAME", "Repackage an installed box into a `.box` file."
19
- def repackage(name)
20
- b = env.boxes.find(name)
21
- raise Errors::BoxNotFound, :name => name if !b
22
- b.repackage
18
+ def execute
19
+ if @main_args.include?("-h") || @main_args.include?("--help")
20
+ # Print the help for all the box commands.
21
+ return help
22
+ end
23
+
24
+ # If we reached this far then we must have a subcommand. If not,
25
+ # then we also just print the help and exit.
26
+ command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
27
+ return help if !command_class || !@sub_command
28
+ @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
29
+
30
+ # Initialize and execute the command class
31
+ command_class.new(@sub_args, @env).execute
23
32
  end
24
33
 
25
- desc "list", "Lists all installed boxes"
26
- def list
27
- boxes = env.boxes.sort
28
- return env.ui.warn(I18n.t("vagrant.commands.box.no_installed_boxes"), :prefix => false) if boxes.empty?
29
- boxes.each { |b| env.ui.info(b.name, :prefix => false) }
34
+ # Prints the help out for this command
35
+ def help
36
+ opts = OptionParser.new do |opts|
37
+ opts.banner = "Usage: vagrant box <command> [<args>]"
38
+ opts.separator ""
39
+ opts.separator "Available subcommands:"
40
+
41
+ # Add the available subcommands as separators in order to print them
42
+ # out as well.
43
+ keys = []
44
+ @subcommands.each { |key, value| keys << key }
45
+
46
+ keys.sort.each do |key|
47
+ opts.separator " #{key}"
48
+ end
49
+
50
+ opts.separator ""
51
+ opts.separator "For help on any individual command run `vagrant box COMMAND -h`"
52
+ end
53
+
54
+ @env.ui.info(opts.help, :prefix => false)
30
55
  end
31
56
  end
32
57
  end
@@ -0,0 +1,33 @@
1
+ require 'optparse'
2
+
3
+ module Vagrant
4
+ module Command
5
+ class BoxAdd < Base
6
+ def execute
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant box add <name> <url>"
11
+ opts.separator ""
12
+
13
+ opts.on("-f", "--force", "Overwrite an existing box if it exists.") do |f|
14
+ options[:force] = f
15
+ end
16
+ end
17
+
18
+ # Parse the options
19
+ argv = parse_options(opts)
20
+ return if !argv
21
+
22
+ # If we're force adding, then be sure to destroy any existing box if it
23
+ # exists.
24
+ if options[:force]
25
+ existing = @env.boxes.find(argv[0])
26
+ existing.destroy if existing
27
+ end
28
+
29
+ @env.boxes.add(argv[0], argv[1])
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ require 'optparse'
2
+
3
+ module Vagrant
4
+ module Command
5
+ class BoxList < Base
6
+ def execute
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant box list"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ boxes = @env.boxes.sort
18
+ if boxes.empty?
19
+ return @env.ui.warn(I18n.t("vagrant.commands.box.no_installed_boxes"), :prefix => false)
20
+ end
21
+ boxes.each { |b| @env.ui.info(b.name, :prefix => false) }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ require 'optparse'
2
+
3
+ module Vagrant
4
+ module Command
5
+ class BoxRemove < Base
6
+ def execute
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant box remove <name>"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ b = @env.boxes.find(argv[0])
18
+ raise Errors::BoxNotFound, :name => argv[0] if !b
19
+ b.destroy
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'optparse'
2
+
3
+ module Vagrant
4
+ module Command
5
+ class BoxRepackage < Base
6
+ def execute
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant box repackage <name>"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ b = @env.boxes.find(argv[0])
18
+ raise Errors::BoxNotFound, :name => argv[0] if !b
19
+ b.repackage
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,14 +1,25 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class DestroyCommand < NamedBase
4
- register "destroy", "Destroy the environment, deleting the created virtual machines"
5
-
5
+ class Destroy < Base
6
6
  def execute
7
- target_vms.each do |vm|
7
+ opts = OptionParser.new do |opts|
8
+ opts.banner = "Usage: vagrant destroy [vm-name]"
9
+ end
10
+
11
+ # Parse the options
12
+ argv = parse_options(opts)
13
+ return if !argv
14
+
15
+ @logger.debug("'Destroy' each target VM...")
16
+ with_target_vms(argv[0]) do |vm|
8
17
  if vm.created?
18
+ @logger.info("Destroying: #{vm.name}")
9
19
  vm.destroy
10
20
  else
11
- vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_created")
21
+ @logger.info("Not destroying #{vm.name}, since it isn't created.")
22
+ vm.ui.info I18n.t("vagrant.commands.common.vm_not_created")
12
23
  end
13
24
  end
14
25
  end
@@ -1,15 +1,33 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class HaltCommand < NamedBase
4
- class_option :force, :type => :boolean, :default => false, :aliases => "-f"
5
- register "halt", "Halt the running VMs in the environment"
6
-
5
+ class Halt < Base
7
6
  def execute
8
- target_vms.each do |vm|
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant halt [vm-name] [--force] [-h]"
11
+
12
+ opts.separator ""
13
+
14
+ opts.on("-f", "--force", "Force shut down (equivalent of pulling power)") do |f|
15
+ options[:force] = f
16
+ end
17
+ end
18
+
19
+ # Parse the options
20
+ argv = parse_options(opts)
21
+ return if !argv
22
+
23
+ @logger.debug("Halt command: #{argv.inspect} #{options.inspect}")
24
+ with_target_vms(argv[0]) do |vm|
9
25
  if vm.created?
10
- vm.halt(options)
26
+ @logger.info("Halting #{vm.name}")
27
+ vm.halt(:force => options[:force])
11
28
  else
12
- vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_created")
29
+ @logger.info("Not halting #{vm.name}, since not created.")
30
+ vm.ui.info I18n.t("vagrant.commands.common.vm_not_created")
13
31
  end
14
32
  end
15
33
  end
@@ -1,13 +1,36 @@
1
+ require 'optparse'
2
+
3
+ require 'vagrant/util/template_renderer'
4
+
1
5
  module Vagrant
2
6
  module Command
3
- class InitCommand < Base
4
- argument :box_name, :type => :string, :optional => true, :default => "base"
5
- argument :box_url, :type => :string, :optional => true
6
- source_root File.expand_path("templates/commands/init", Vagrant.source_root)
7
- register "init [box_name] [box_url]", "Initializes the current folder for Vagrant usage"
8
-
7
+ class Init < Base
9
8
  def execute
10
- template "Vagrantfile.erb", env.cwd.join("Vagrantfile")
9
+ options = {}
10
+
11
+ opts = OptionParser.new do |opts|
12
+ opts.banner = "Usage: vagrant init [box-name] [box-url]"
13
+ end
14
+
15
+ # Parse the options
16
+ argv = parse_options(opts)
17
+ return if !argv
18
+
19
+ save_path = @env.cwd.join("Vagrantfile")
20
+ raise Errors::VagrantfileExistsError if save_path.exist?
21
+
22
+ template_path = ::Vagrant.source_root.join("templates/commands/init/Vagrantfile")
23
+ contents = Vagrant::Util::TemplateRenderer.render(template_path,
24
+ :box_name => argv[0] || "base",
25
+ :box_url => argv[1])
26
+
27
+ # Write out the contents
28
+ save_path.open("w+") do |f|
29
+ f.write(contents)
30
+ end
31
+
32
+ @env.ui.info(I18n.t("vagrant.commands.init.success"),
33
+ :prefix => false)
11
34
  end
12
35
  end
13
36
  end
@@ -1,33 +1,64 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class PackageCommand < NamedBase
4
- class_option :base, :type => :string, :default => nil
5
- class_option :output, :type => :string, :default => nil
6
- class_option :include, :type => :array, :default => nil
7
- class_option :vagrantfile, :type => :string, :default => nil
8
- register "package", "Package a Vagrant environment for distribution"
9
-
5
+ class Package < Base
10
6
  def execute
11
- return package_base if options[:base]
12
- package_target
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant package [vm-name] [--base name] [--output name.box]"
11
+ opts.separator " [--include one,two,three] [--vagrantfile file]"
12
+
13
+ opts.separator ""
14
+
15
+ opts.on("--base NAME", "Name of a VM in virtualbox to package as a base box") do |b|
16
+ options[:base] = b
17
+ end
18
+
19
+ opts.on("--output NAME", "Name of the file to output") do |o|
20
+ options[:output] = o
21
+ end
22
+
23
+ opts.on("--include x,y,z", Array, "Additional files to package with the box.") do |i|
24
+ options[:include] = i
25
+ end
26
+
27
+ opts.on("--vagrantfile file", "Vagrantfile to package with the box.") do |v|
28
+ options[:vagrantfile] = v
29
+ end
30
+ end
31
+
32
+ # Parse the options
33
+ argv = parse_options(opts)
34
+ return if !argv
35
+
36
+ @logger.debug("package options: #{options.inspect}")
37
+ if options[:base]
38
+ package_base(options)
39
+ else
40
+ package_target(argv[0], options)
41
+ end
13
42
  end
14
43
 
15
44
  protected
16
45
 
17
- def package_base
18
- vm = VM.find(options[:base], env)
46
+ def package_base(options)
47
+ vm = VM.new(options[:base], @env, @env.config.global, :base => true)
19
48
  raise Errors::BaseVMNotFound, :name => options[:base] if !vm.created?
20
- package_vm(vm)
49
+ @logger.debug("Packaging base VM: #{vm.name}")
50
+ package_vm(vm, options)
21
51
  end
22
52
 
23
- def package_target
24
- raise Errors::MultiVMTargetRequired, :command => "package" if target_vms.length > 1
25
- vm = target_vms.first
26
- raise Errors::VMNotCreatedError if !vm.created?
27
- package_vm(vm)
53
+ def package_target(name, options)
54
+ with_target_vms(name, true) do |vm|
55
+ raise Errors::VMNotCreatedError if !vm.created?
56
+ @logger.debug("Packaging VM: #{vm.name}")
57
+ package_vm(vm, options)
58
+ end
28
59
  end
29
60
 
30
- def package_vm(vm)
61
+ def package_vm(vm, options)
31
62
  opts = options.inject({}) do |acc, data|
32
63
  k,v = data
33
64
  acc["package.#{k}"] = v
@@ -1,20 +1,33 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class ProvisionCommand < NamedBase
4
- register "provision", "Rerun the provisioning scripts on a running VM"
5
-
5
+ class Provision < Base
6
6
  def execute
7
- target_vms.each do |vm|
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant provision [vm-name]"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ # Go over each VM and provision!
18
+ @logger.debug("'provision' each target VM...")
19
+ with_target_vms(argv[0]) do |vm|
8
20
  if vm.created?
9
- if !vm.vm.accessible?
10
- raise Errors::VMInaccessible
11
- elsif vm.vm.running?
21
+ if vm.state == :running
22
+ @logger.info("Provisioning: #{vm.name}")
12
23
  vm.provision
13
24
  else
14
- vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_running")
25
+ @logger.info("#{vm.name} not running. Not provisioning.")
26
+ vm.ui.info I18n.t("vagrant.commands.common.vm_not_running")
15
27
  end
16
28
  else
17
- vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_created")
29
+ @logger.info("#{vm.name} not created. Not provisioning.")
30
+ vm.ui.info I18n.t("vagrant.commands.common.vm_not_created")
18
31
  end
19
32
  end
20
33
  end
@@ -1,14 +1,27 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class ReloadCommand < NamedBase
4
- register "reload", "Reload the environment, halting it then restarting it."
5
-
5
+ class Reload < Base
6
6
  def execute
7
- target_vms.each do |vm|
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant reload [vm-name]"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ @logger.debug("'reload' each target VM...")
18
+ with_target_vms(argv[0]) do |vm|
8
19
  if vm.created?
20
+ @logger.info("Reloading: #{vm.name}")
9
21
  vm.reload
10
22
  else
11
- vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_created")
23
+ @logger.info("Not created: #{vm.name}. Not reloading.")
24
+ vm.ui.info I18n.t("vagrant.commands.common.vm_not_created")
12
25
  end
13
26
  end
14
27
  end