vagrantup 0.8.10 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +77 -1
  3. data/Gemfile +0 -14
  4. data/LICENSE +1 -1
  5. data/bin/vagrant +47 -20
  6. data/config/default.rb +6 -14
  7. data/lib/vagrant/action/box/destroy.rb +7 -3
  8. data/lib/vagrant/action/box/download.rb +8 -8
  9. data/lib/vagrant/action/box/package.rb +2 -2
  10. data/lib/vagrant/action/box/unpackage.rb +13 -7
  11. data/lib/vagrant/action/box/verify.rb +5 -5
  12. data/lib/vagrant/action/builder.rb +23 -19
  13. data/lib/vagrant/action/builtin.rb +117 -79
  14. data/lib/vagrant/action/env/set.rb +7 -4
  15. data/lib/vagrant/action/environment.rb +3 -41
  16. data/lib/vagrant/action/general/package.rb +14 -29
  17. data/lib/vagrant/action/general/validate.rb +2 -2
  18. data/lib/vagrant/action/runner.rb +53 -0
  19. data/lib/vagrant/action/vm/boot.rb +9 -9
  20. data/lib/vagrant/action/vm/check_accessible.rb +2 -2
  21. data/lib/vagrant/action/vm/check_box.rb +10 -12
  22. data/lib/vagrant/action/vm/check_guest_additions.rb +8 -8
  23. data/lib/vagrant/action/vm/check_port_collisions.rb +85 -0
  24. data/lib/vagrant/action/vm/clean_machine_folder.rb +4 -4
  25. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +3 -11
  26. data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
  27. data/lib/vagrant/action/vm/clear_shared_folders.rb +2 -11
  28. data/lib/vagrant/action/vm/customize.rb +19 -9
  29. data/lib/vagrant/action/vm/destroy.rb +4 -4
  30. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +2 -12
  31. data/lib/vagrant/action/vm/discard_state.rb +4 -4
  32. data/lib/vagrant/action/vm/export.rb +13 -8
  33. data/lib/vagrant/action/vm/forward_ports.rb +55 -102
  34. data/lib/vagrant/action/vm/halt.rb +9 -6
  35. data/lib/vagrant/action/vm/host_name.rb +4 -4
  36. data/lib/vagrant/action/vm/import.rb +19 -10
  37. data/lib/vagrant/action/vm/match_mac_address.rb +4 -9
  38. data/lib/vagrant/action/vm/network.rb +300 -94
  39. data/lib/vagrant/action/vm/nfs.rb +41 -26
  40. data/lib/vagrant/action/vm/package.rb +1 -1
  41. data/lib/vagrant/action/vm/package_vagrantfile.rb +5 -2
  42. data/lib/vagrant/action/vm/provision.rb +42 -13
  43. data/lib/vagrant/action/vm/provisioner_cleanup.rb +2 -2
  44. data/lib/vagrant/action/vm/{clear_nfs_exports.rb → prune_nfs_exports.rb} +7 -7
  45. data/lib/vagrant/action/vm/resume.rb +4 -4
  46. data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
  47. data/lib/vagrant/action/vm/share_folders.rb +63 -39
  48. data/lib/vagrant/action/vm/suspend.rb +4 -4
  49. data/lib/vagrant/action/warden.rb +13 -6
  50. data/lib/vagrant/action.rb +45 -123
  51. data/lib/vagrant/box.rb +9 -55
  52. data/lib/vagrant/box_collection.rb +22 -17
  53. data/lib/vagrant/cli.rb +62 -47
  54. data/lib/vagrant/command/base.rb +135 -90
  55. data/lib/vagrant/command/box.rb +46 -21
  56. data/lib/vagrant/command/box_add.rb +33 -0
  57. data/lib/vagrant/command/box_list.rb +25 -0
  58. data/lib/vagrant/command/box_remove.rb +23 -0
  59. data/lib/vagrant/command/box_repackage.rb +23 -0
  60. data/lib/vagrant/command/destroy.rb +16 -5
  61. data/lib/vagrant/command/halt.rb +25 -7
  62. data/lib/vagrant/command/init.rb +30 -7
  63. data/lib/vagrant/command/package.rb +49 -18
  64. data/lib/vagrant/command/provision.rb +22 -9
  65. data/lib/vagrant/command/reload.rb +18 -5
  66. data/lib/vagrant/command/resume.rb +18 -5
  67. data/lib/vagrant/command/ssh.rb +69 -31
  68. data/lib/vagrant/command/ssh_config.rb +37 -22
  69. data/lib/vagrant/command/status.rb +22 -20
  70. data/lib/vagrant/command/suspend.rb +18 -5
  71. data/lib/vagrant/command/up.rb +41 -8
  72. data/lib/vagrant/command.rb +18 -20
  73. data/lib/vagrant/communication/base.rb +56 -0
  74. data/lib/vagrant/communication/ssh.rb +200 -0
  75. data/lib/vagrant/communication.rb +7 -0
  76. data/lib/vagrant/config/base.rb +18 -26
  77. data/lib/vagrant/config/container.rb +37 -0
  78. data/lib/vagrant/config/error_recorder.rb +1 -1
  79. data/lib/vagrant/config/loader.rb +125 -0
  80. data/lib/vagrant/config/nfs.rb +1 -3
  81. data/lib/vagrant/config/package.rb +1 -3
  82. data/lib/vagrant/config/ssh.rb +31 -16
  83. data/lib/vagrant/config/top.rb +36 -25
  84. data/lib/vagrant/config/vagrant.rb +2 -5
  85. data/lib/vagrant/config/vm/provisioner.rb +16 -20
  86. data/lib/vagrant/config/vm/sub_vm.rb +1 -1
  87. data/lib/vagrant/config/vm.rb +115 -56
  88. data/lib/vagrant/config.rb +29 -103
  89. data/lib/vagrant/data_store.rb +23 -15
  90. data/lib/vagrant/downloaders/base.rb +7 -5
  91. data/lib/vagrant/downloaders/file.rb +4 -4
  92. data/lib/vagrant/downloaders/http.rb +4 -5
  93. data/lib/vagrant/driver/virtualbox.rb +121 -0
  94. data/lib/vagrant/driver/virtualbox_4_0.rb +411 -0
  95. data/lib/vagrant/driver/virtualbox_4_1.rb +411 -0
  96. data/lib/vagrant/driver/virtualbox_base.rb +284 -0
  97. data/lib/vagrant/driver.rb +7 -0
  98. data/lib/vagrant/environment.rb +221 -240
  99. data/lib/vagrant/errors.rb +74 -25
  100. data/lib/vagrant/guest/arch.rb +48 -0
  101. data/lib/vagrant/{systems → guest}/base.rb +30 -18
  102. data/lib/vagrant/guest/debian.rb +61 -0
  103. data/lib/vagrant/{systems → guest}/freebsd.rb +11 -18
  104. data/lib/vagrant/guest/gentoo.rb +32 -0
  105. data/lib/vagrant/{systems → guest}/linux/config.rb +2 -4
  106. data/lib/vagrant/guest/linux/error.rb +9 -0
  107. data/lib/vagrant/guest/linux.rb +78 -0
  108. data/lib/vagrant/guest/redhat.rb +66 -0
  109. data/lib/vagrant/guest/solaris.rb +114 -0
  110. data/lib/vagrant/{systems → guest}/suse.rb +2 -2
  111. data/lib/vagrant/guest/ubuntu.rb +23 -0
  112. data/lib/vagrant/guest.rb +16 -0
  113. data/lib/vagrant/hosts/arch.rb +7 -3
  114. data/lib/vagrant/hosts/base.rb +36 -46
  115. data/lib/vagrant/hosts/bsd.rb +53 -16
  116. data/lib/vagrant/hosts/fedora.rb +14 -0
  117. data/lib/vagrant/hosts/freebsd.rb +6 -36
  118. data/lib/vagrant/hosts/linux.rb +45 -20
  119. data/lib/vagrant/hosts/windows.rb +16 -0
  120. data/lib/vagrant/hosts.rb +23 -6
  121. data/lib/vagrant/provisioners/base.rb +11 -34
  122. data/lib/vagrant/provisioners/chef.rb +30 -26
  123. data/lib/vagrant/provisioners/chef_client.rb +37 -23
  124. data/lib/vagrant/provisioners/chef_solo.rb +61 -16
  125. data/lib/vagrant/provisioners/puppet.rb +70 -38
  126. data/lib/vagrant/provisioners/puppet_server.rb +12 -13
  127. data/lib/vagrant/provisioners/shell.rb +24 -24
  128. data/lib/vagrant/provisioners.rb +10 -7
  129. data/lib/vagrant/registry.rb +49 -0
  130. data/lib/vagrant/ssh.rb +82 -153
  131. data/lib/vagrant/ui.rb +118 -50
  132. data/lib/vagrant/util/busy.rb +1 -1
  133. data/lib/vagrant/util/file_mode.rb +12 -0
  134. data/lib/vagrant/util/network_ip.rb +28 -0
  135. data/lib/vagrant/util/platform.rb +1 -0
  136. data/lib/vagrant/util/subprocess.rb +227 -0
  137. data/lib/vagrant/version.rb +1 -1
  138. data/lib/vagrant/vm.rb +111 -97
  139. data/lib/vagrant.rb +132 -5
  140. data/tasks/acceptance.rake +3 -3
  141. data/tasks/test.rake +7 -2
  142. data/templates/commands/init/Vagrantfile.erb +11 -4
  143. data/templates/{ssh_config.erb → commands/ssh_config/config.erb} +0 -0
  144. data/templates/guests/arch/network_dhcp.erb +7 -0
  145. data/templates/guests/arch/network_static.erb +7 -0
  146. data/templates/guests/debian/network_dhcp.erb +6 -0
  147. data/templates/guests/debian/network_static.erb +7 -0
  148. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  149. data/templates/guests/gentoo/network_static.erb +4 -0
  150. data/templates/guests/redhat/network_dhcp.erb +6 -0
  151. data/templates/guests/redhat/network_static.erb +7 -0
  152. data/templates/locales/en.yml +241 -122
  153. data/templates/{chef_server_client.erb → provisioners/chef_client/client.erb} +0 -0
  154. data/templates/{chef_solo_solo.erb → provisioners/chef_solo/solo.erb} +0 -0
  155. data/test/acceptance/base.rb +10 -10
  156. data/test/acceptance/box_test.rb +28 -6
  157. data/test/acceptance/destroy_test.rb +1 -1
  158. data/test/acceptance/halt_test.rb +4 -4
  159. data/test/acceptance/init_test.rb +3 -3
  160. data/test/acceptance/networking/host_only_test.rb +37 -0
  161. data/test/acceptance/networking/port_forward_test.rb +125 -0
  162. data/test/acceptance/package_test.rb +46 -0
  163. data/test/acceptance/provisioning/basic_test.rb +61 -0
  164. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  165. data/test/acceptance/provisioning/shell_test.rb +53 -0
  166. data/test/acceptance/resume_test.rb +1 -1
  167. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  168. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  169. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  170. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  171. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  172. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  173. data/test/acceptance/ssh_test.rb +7 -2
  174. data/test/acceptance/support/config.rb +1 -1
  175. data/test/acceptance/support/isolated_environment.rb +41 -150
  176. data/test/acceptance/support/matchers/match_output.rb +1 -1
  177. data/test/acceptance/support/matchers/succeed.rb +14 -0
  178. data/test/acceptance/support/network_tests.rb +29 -0
  179. data/test/acceptance/support/output.rb +9 -1
  180. data/test/acceptance/support/shared/base_context.rb +16 -9
  181. data/test/acceptance/support/shared/command_examples.rb +4 -4
  182. data/test/acceptance/suspend_test.rb +1 -1
  183. data/test/acceptance/up_basic_test.rb +26 -7
  184. data/test/acceptance/up_with_box_url.rb +1 -1
  185. data/test/acceptance/vagrant_test.rb +1 -1
  186. data/test/acceptance/version_test.rb +0 -5
  187. data/test/support/isolated_environment.rb +46 -0
  188. data/test/{acceptance/support → support}/tempdir.rb +0 -0
  189. data/test/unit/base.rb +21 -0
  190. data/test/unit/support/isolated_environment.rb +39 -0
  191. data/test/unit/support/shared/base_context.rb +30 -0
  192. data/test/unit/vagrant/action/builder_test.rb +126 -177
  193. data/test/unit/vagrant/action/environment_test.rb +10 -21
  194. data/test/unit/vagrant/action/runner_test.rb +65 -0
  195. data/test/unit/vagrant/action/warden_test.rb +64 -97
  196. data/test/unit/vagrant/box_collection_test.rb +44 -33
  197. data/test/unit/vagrant/box_test.rb +25 -65
  198. data/test/unit/vagrant/command/base_test.rb +141 -14
  199. data/test/unit/vagrant/config/base_test.rb +16 -43
  200. data/test/unit/vagrant/config/loader_test.rb +79 -0
  201. data/test/unit/vagrant/config/top_test.rb +69 -0
  202. data/test/unit/vagrant/config/vm_test.rb +62 -47
  203. data/test/unit/vagrant/config_test.rb +16 -151
  204. data/test/unit/vagrant/data_store_test.rb +43 -61
  205. data/test/unit/vagrant/downloaders/base_test.rb +12 -22
  206. data/test/unit/vagrant/downloaders/file_test.rb +58 -31
  207. data/test/unit/vagrant/downloaders/http_test.rb +12 -86
  208. data/test/unit/vagrant/environment_test.rb +107 -536
  209. data/test/unit/vagrant/hosts_test.rb +36 -0
  210. data/test/unit/vagrant/registry_test.rb +56 -0
  211. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  212. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +23 -24
  213. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  214. data/test/unit/vagrant/util/retryable_test.rb +90 -34
  215. data/test/unit/vagrant_test.rb +27 -0
  216. data/test/{unit → unit_legacy}/locales/en.yml +0 -0
  217. data/test/{unit → unit_legacy}/test_helper.rb +0 -0
  218. data/test/{unit → unit_legacy}/vagrant/action/box/destroy_test.rb +0 -0
  219. data/test/{unit → unit_legacy}/vagrant/action/box/download_test.rb +0 -0
  220. data/test/{unit → unit_legacy}/vagrant/action/box/package_test.rb +0 -0
  221. data/test/{unit → unit_legacy}/vagrant/action/box/unpackage_test.rb +0 -0
  222. data/test/{unit → unit_legacy}/vagrant/action/box/verify_test.rb +0 -0
  223. data/test/{unit → unit_legacy}/vagrant/action/env/set_test.rb +0 -0
  224. data/test/{unit → unit_legacy}/vagrant/action/general/package_test.rb +0 -0
  225. data/test/{unit → unit_legacy}/vagrant/action/general/validate_test.rb +0 -0
  226. data/test/{unit → unit_legacy}/vagrant/action/vm/boot_test.rb +0 -0
  227. data/test/{unit → unit_legacy}/vagrant/action/vm/check_accessible_test.rb +0 -0
  228. data/test/{unit → unit_legacy}/vagrant/action/vm/check_box_test.rb +0 -0
  229. data/test/{unit → unit_legacy}/vagrant/action/vm/check_guest_additions_test.rb +0 -0
  230. data/test/{unit → unit_legacy}/vagrant/action/vm/clean_machine_folder_test.rb +0 -0
  231. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -0
  232. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_nfs_exports_test.rb +0 -0
  233. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_shared_folders_test.rb +0 -0
  234. data/test/{unit → unit_legacy}/vagrant/action/vm/customize_test.rb +0 -0
  235. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_test.rb +0 -0
  236. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -0
  237. data/test/{unit → unit_legacy}/vagrant/action/vm/discard_state_test.rb +0 -0
  238. data/test/{unit → unit_legacy}/vagrant/action/vm/export_test.rb +0 -0
  239. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_helpers_test.rb +0 -0
  240. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_test.rb +0 -0
  241. data/test/{unit → unit_legacy}/vagrant/action/vm/halt_test.rb +0 -0
  242. data/test/{unit → unit_legacy}/vagrant/action/vm/host_name_test.rb +0 -0
  243. data/test/{unit → unit_legacy}/vagrant/action/vm/import_test.rb +0 -0
  244. data/test/{unit → unit_legacy}/vagrant/action/vm/match_mac_address_test.rb +0 -0
  245. data/test/{unit → unit_legacy}/vagrant/action/vm/modify_test.rb +0 -0
  246. data/test/{unit → unit_legacy}/vagrant/action/vm/network_test.rb +0 -0
  247. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_helpers_test.rb +0 -0
  248. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_test.rb +0 -0
  249. data/test/{unit → unit_legacy}/vagrant/action/vm/package_test.rb +0 -0
  250. data/test/{unit → unit_legacy}/vagrant/action/vm/package_vagrantfile_test.rb +0 -0
  251. data/test/{unit → unit_legacy}/vagrant/action/vm/provision_test.rb +0 -0
  252. data/test/{unit → unit_legacy}/vagrant/action/vm/provisioner_cleanup_test.rb +0 -0
  253. data/test/{unit → unit_legacy}/vagrant/action/vm/resume_test.rb +0 -0
  254. data/test/{unit → unit_legacy}/vagrant/action/vm/share_folders_test.rb +0 -0
  255. data/test/{unit → unit_legacy}/vagrant/action/vm/suspend_test.rb +0 -0
  256. data/test/{unit → unit_legacy}/vagrant/action_test.rb +0 -0
  257. data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
  258. data/test/unit_legacy/vagrant/box_test.rb +74 -0
  259. data/test/{unit → unit_legacy}/vagrant/cli_test.rb +0 -0
  260. data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
  261. data/test/{unit → unit_legacy}/vagrant/command/group_base_test.rb +0 -0
  262. data/test/{unit → unit_legacy}/vagrant/command/helpers_test.rb +0 -0
  263. data/test/{unit → unit_legacy}/vagrant/command/init_test.rb +0 -0
  264. data/test/{unit → unit_legacy}/vagrant/command/package_test.rb +0 -0
  265. data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
  266. data/test/{unit → unit_legacy}/vagrant/config/error_recorder_test.rb +0 -0
  267. data/test/{unit → unit_legacy}/vagrant/config/ssh_test.rb +0 -0
  268. data/test/{unit → unit_legacy}/vagrant/config/vagrant_test.rb +0 -0
  269. data/test/{unit → unit_legacy}/vagrant/config/vm/provisioner_test.rb +0 -0
  270. data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
  271. data/test/unit_legacy/vagrant/config_test.rb +148 -0
  272. data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
  273. data/test/unit_legacy/vagrant/environment_test.rb +539 -0
  274. data/test/{unit → unit_legacy}/vagrant/errors_test.rb +0 -0
  275. data/test/{unit → unit_legacy}/vagrant/hosts/base_test.rb +0 -0
  276. data/test/{unit → unit_legacy}/vagrant/hosts/bsd_test.rb +0 -0
  277. data/test/{unit → unit_legacy}/vagrant/hosts/linux_test.rb +0 -0
  278. data/test/{unit → unit_legacy}/vagrant/plugin_test.rb +0 -0
  279. data/test/{unit → unit_legacy}/vagrant/provisioners/base_test.rb +0 -0
  280. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_client_test.rb +0 -0
  281. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_solo_test.rb +0 -0
  282. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_test.rb +0 -0
  283. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_server_test.rb +0 -0
  284. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_test.rb +0 -0
  285. data/test/{unit → unit_legacy}/vagrant/provisioners/shell_test.rb +0 -0
  286. data/test/{unit → unit_legacy}/vagrant/ssh/session_test.rb +0 -0
  287. data/test/{unit → unit_legacy}/vagrant/ssh_test.rb +0 -0
  288. data/test/{unit → unit_legacy}/vagrant/systems/base_test.rb +0 -0
  289. data/test/{unit → unit_legacy}/vagrant/systems/linux_test.rb +0 -0
  290. data/test/{unit → unit_legacy}/vagrant/util/busy_test.rb +0 -0
  291. data/test/{unit → unit_legacy}/vagrant/util/counter_test.rb +0 -0
  292. data/test/{unit → unit_legacy}/vagrant/util/platform_test.rb +0 -0
  293. data/test/{unit → unit_legacy}/vagrant/util/stacked_proc_runner_test.rb +0 -0
  294. data/test/{unit → unit_legacy}/vagrant/util/template_renderer_test.rb +0 -0
  295. data/test/{unit → unit_legacy}/vagrant/vm_test.rb +0 -0
  296. data/vagrant.gemspec +7 -9
  297. metadata +183 -179
  298. data/keys/vagrant.ppk +0 -26
  299. data/lib/vagrant/action/box.rb +0 -11
  300. data/lib/vagrant/action/env.rb +0 -7
  301. data/lib/vagrant/action/general.rb +0 -8
  302. data/lib/vagrant/action/vm/forward_ports_helpers.rb +0 -28
  303. data/lib/vagrant/action/vm/modify.rb +0 -37
  304. data/lib/vagrant/action/vm/nfs_helpers.rb +0 -11
  305. data/lib/vagrant/action/vm.rb +0 -34
  306. data/lib/vagrant/command/group_base.rb +0 -107
  307. data/lib/vagrant/command/helpers.rb +0 -33
  308. data/lib/vagrant/command/named_base.rb +0 -14
  309. data/lib/vagrant/command/upgrade_to_060.rb +0 -45
  310. data/lib/vagrant/command/version.rb +0 -13
  311. data/lib/vagrant/ssh/session.rb +0 -136
  312. data/lib/vagrant/systems/arch.rb +0 -34
  313. data/lib/vagrant/systems/debian.rb +0 -36
  314. data/lib/vagrant/systems/gentoo.rb +0 -27
  315. data/lib/vagrant/systems/linux/error.rb +0 -9
  316. data/lib/vagrant/systems/linux.rb +0 -82
  317. data/lib/vagrant/systems/redhat.rb +0 -48
  318. data/lib/vagrant/systems/solaris.rb +0 -113
  319. data/lib/vagrant/systems/ubuntu.rb +0 -17
  320. data/lib/vagrant/systems.rb +0 -13
  321. data/templates/network_entry_arch.erb +0 -9
  322. data/templates/network_entry_debian.erb +0 -8
  323. data/templates/network_entry_gentoo.erb +0 -5
  324. data/templates/network_entry_redhat.erb +0 -9
  325. data/test/unit/vagrant/ui_test.rb +0 -29
@@ -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
@@ -1,14 +1,27 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class ResumeCommand < NamedBase
4
- register "resume", "Resume a suspended Vagrant environment."
5
-
5
+ class Resume < 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 resume [vm-name]"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ @logger.debug("'resume' each target VM...")
18
+ with_target_vms(argv[0]) do |vm|
8
19
  if vm.created?
20
+ @logger.info("Resume: #{vm.name}")
9
21
  vm.resume
10
22
  else
11
- vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_created")
23
+ @logger.info("Not created: #{vm.name}. Not resuming.")
24
+ vm.ui.info I18n.t("vagrant.commands.common.vm_not_created")
12
25
  end
13
26
  end
14
27
  end
@@ -1,49 +1,87 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class SSHCommand < NamedBase
4
- class_option :command, :type => :string, :default => false, :aliases => "-c"
5
- register "ssh", "SSH into the currently running Vagrant environment."
6
-
5
+ class SSH < Base
7
6
  def execute
8
- if options[:command]
9
- ssh_execute
10
- else
11
- ssh_connect
12
- end
13
- end
7
+ options = {}
14
8
 
15
- protected
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant ssh [vm-name] [-c command] [-- extra ssh args]"
11
+
12
+ opts.separator ""
16
13
 
17
- def ssh_execute
18
- ssh_vm.ssh.execute do |ssh|
19
- ssh.exec!(options[:command]) do |channel, type, data|
20
- if type != :exit_status
21
- # Print the SSH output as it comes in, but don't prefix it and don't
22
- # force a new line so that the output is properly preserved
23
- ssh_vm.env.ui.info(data.to_s, :prefix => false, :new_line => false)
24
- end
14
+ opts.on("-c", "--command COMMAND", "Execute an SSH command directly.") do |c|
15
+ options[:command] = c
16
+ end
17
+ opts.on("-p", "--plain", "Plain mode, leaves authentication up to user.") do |p|
18
+ options[:plain_mode] = p
25
19
  end
26
20
  end
27
- end
28
21
 
29
- def ssh_connect
30
- ssh_vm.ssh.connect
31
- end
22
+ # Parse the options and return if we don't have any target.
23
+ argv = parse_options(opts)
24
+ return if !argv
32
25
 
33
- def ssh_vm
34
- @ssh_vm ||= begin
35
- vm = self.name.nil? && env.multivm? ? env.primary_vm : nil
36
- raise Errors::MultiVMTargetRequired, :command => "ssh" if !vm && target_vms.length > 1
37
- vm = target_vms.first if !vm
26
+ # Parse out the extra args to send to SSH, which is everything
27
+ # after the "--"
28
+ ssh_args = ARGV.drop_while { |i| i != "--" }
29
+ ssh_args = ssh_args[1..-1]
30
+ options[:ssh_args] = ssh_args
38
31
 
32
+ # If the remaining arguments ARE the SSH arguments, then just
33
+ # clear it out. This happens because optparse returns what is
34
+ # after the "--" as remaining ARGV, and Vagrant can think it is
35
+ # a multi-vm name (wrong!)
36
+ argv = [] if argv == ssh_args
37
+
38
+ # Execute the actual SSH
39
+ with_target_vms(argv[0], true) do |vm|
39
40
  # Basic checks that are required for proper SSH
40
41
  raise Errors::VMNotCreatedError if !vm.created?
41
- raise Errors::VMInaccessible if !vm.vm.accessible?
42
- raise Errors::VMNotRunningError if !vm.vm.running?
42
+ raise Errors::VMInaccessible if !vm.state == :inaccessible
43
+ raise Errors::VMNotRunningError if vm.state != :running
44
+
45
+ if options[:command]
46
+ ssh_execute(vm, options[:command])
47
+ else
48
+ opts = {
49
+ :plain_mode => options[:plain_mode],
50
+ :extra_args => options[:ssh_args]
51
+ }
43
52
 
44
- vm
53
+ ssh_connect(vm, opts)
54
+ end
45
55
  end
46
56
  end
57
+
58
+ protected
59
+
60
+ def ssh_execute(vm, command=nil)
61
+ exit_status = 0
62
+
63
+ @logger.debug("Executing command: #{command}")
64
+ exit_status = vm.channel.execute(command, :error_check => false) do |type, data|
65
+ # Determine the proper channel to send the output onto depending
66
+ # on the type of data we are receiving.
67
+ channel = type == :stdout ? :out : :error
68
+
69
+ # Print the SSH output as it comes in, but don't prefix it and don't
70
+ # force a new line so that the output is properly preserved
71
+ vm.ui.info(data.to_s,
72
+ :prefix => false,
73
+ :new_line => false,
74
+ :channel => channel)
75
+ end
76
+
77
+ # Exit with the exit status we got from executing the command
78
+ exit exit_status
79
+ end
80
+
81
+ def ssh_connect(vm, opts)
82
+ @logger.debug("`exec` into ssh prompt")
83
+ vm.ssh.exec(opts)
84
+ end
47
85
  end
48
86
  end
49
87
  end
@@ -1,28 +1,43 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class SSHConfigCommand < NamedBase
4
- class_option :host, :type => :string, :default => nil, :aliases => "-h"
5
- register "ssh_config", "outputs .ssh/config valid syntax for connecting to this environment via ssh"
6
-
5
+ class SSHConfig < Base
7
6
  def execute
8
- raise Errors::MultiVMTargetRequired, :command => "ssh_config" if target_vms.length > 1
9
- vm = target_vms.first
10
- raise Errors::VMNotCreatedError if !vm.created?
11
- raise Errors::VMInaccessible if !vm.vm.accessible?
12
-
13
- # We need to fix the file permissions of the key if they aren't set
14
- # properly, otherwise if the user attempts to SSH in, it won't work!
15
- vm.ssh.check_key_permissions(vm.env.config.ssh.private_key_path)
16
-
17
- $stdout.puts(Util::TemplateRenderer.render("ssh_config", {
18
- :host_key => options[:host] || vm.name || "vagrant",
19
- :ssh_host => vm.env.config.ssh.host,
20
- :ssh_user => vm.env.config.ssh.username,
21
- :ssh_port => vm.ssh.port,
22
- :private_key_path => vm.env.config.ssh.private_key_path,
23
- :forward_agent => vm.env.config.ssh.forward_agent,
24
- :forward_x11 => vm.env.config.ssh.forward_x11
25
- }))
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant ssh-config [vm-name] [-h name]"
11
+
12
+ opts.separator ""
13
+
14
+ opts.on("-h", "--host COMMAND", "Name the host for the config..") do |h|
15
+ options[:host] = h
16
+ end
17
+ end
18
+
19
+ argv = parse_options(opts)
20
+ return if !argv
21
+
22
+ with_target_vms(argv[0], true) do |vm|
23
+ raise Errors::VMNotCreatedError if !vm.created?
24
+ raise Errors::VMInaccessible if !vm.state == :inaccessible
25
+
26
+ ssh_info = vm.ssh.info
27
+ variables = {
28
+ :host_key => options[:host] || vm.name || "vagrant",
29
+ :ssh_host => ssh_info[:host],
30
+ :ssh_port => ssh_info[:port],
31
+ :ssh_user => ssh_info[:username],
32
+ :private_key_path => ssh_info[:private_key_path],
33
+ :forward_agent => ssh_info[:forward_agent],
34
+ :forward_x11 => ssh_info[:forward_x11]
35
+ }
36
+
37
+ # Render the template and output directly to STDOUT
38
+ template = "commands/ssh_config/config"
39
+ $stdout.puts(Util::TemplateRenderer.render(template, variables))
40
+ end
26
41
  end
27
42
  end
28
43
  end
@@ -1,30 +1,32 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class StatusCommand < NamedBase
4
- register "status", "Shows the status of the current Vagrant environment."
5
-
5
+ class Status < Base
6
6
  def execute
7
- state = nil
8
- results = target_vms.collect do |vm|
9
- if vm.created?
10
- if vm.vm.accessible?
11
- state = vm.vm.state.to_s
12
- else
13
- state = "inaccessible"
14
- end
15
- else
16
- state = "not_created"
17
- end
7
+ options = {}
18
8
 
19
- "#{vm.name.to_s.ljust(25)}#{state.gsub("_", " ")}"
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant status [vm-name]"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ state = nil
18
+ results = []
19
+ with_target_vms(argv[0]) do |vm|
20
+ state = vm.state.to_s if !state
21
+ results << "#{vm.name.to_s.ljust(25)}#{vm.state.to_s.gsub("_", " ")}"
20
22
  end
21
23
 
22
- state = target_vms.length == 1 ? state : "listing"
24
+ state = results.length == 1 ? state : "listing"
23
25
 
24
- env.ui.info(I18n.t("vagrant.commands.status.output",
25
- :states => results.join("\n"),
26
- :message => I18n.t("vagrant.commands.status.#{state}")),
27
- :prefix => false)
26
+ @env.ui.info(I18n.t("vagrant.commands.status.output",
27
+ :states => results.join("\n"),
28
+ :message => I18n.t("vagrant.commands.status.#{state}")),
29
+ :prefix => false)
28
30
  end
29
31
  end
30
32
  end
@@ -1,14 +1,27 @@
1
+ require 'optparse'
2
+
1
3
  module Vagrant
2
4
  module Command
3
- class SuspendCommand < NamedBase
4
- register "suspend", "Suspend a running Vagrant environment."
5
-
5
+ class Suspend < 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 suspend [vm-name]"
11
+ end
12
+
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ @logger.debug("'suspend' each target VM...")
18
+ with_target_vms(argv[0]) do |vm|
8
19
  if vm.created?
20
+ @logger.info("Suspending: #{vm.name}")
9
21
  vm.suspend
10
22
  else
11
- vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_created")
23
+ @logger.info("Not created: #{vm.name}. Not suspending.")
24
+ vm.ui.info I18n.t("vagrant.commands.common.vm_not_created")
12
25
  end
13
26
  end
14
27
  end