tnargav 1.2.2

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 (452) hide show
  1. data/.gitignore +31 -0
  2. data/.gitsetup.yml +5 -0
  3. data/.travis.yml +7 -0
  4. data/.yardopts +1 -0
  5. data/CHANGELOG.md +1067 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE +21 -0
  8. data/README.md +89 -0
  9. data/Rakefile +18 -0
  10. data/bin/vagrant +106 -0
  11. data/config/default.rb +36 -0
  12. data/contrib/README.md +12 -0
  13. data/contrib/bash/completion.sh +3 -0
  14. data/contrib/emacs/vagrant.el +8 -0
  15. data/contrib/vim/vagrantfile.vim +9 -0
  16. data/keys/README.md +17 -0
  17. data/keys/vagrant +27 -0
  18. data/keys/vagrant.pub +1 -0
  19. data/lib/vagrant/action/builder.rb +174 -0
  20. data/lib/vagrant/action/builtin/box_add.rb +81 -0
  21. data/lib/vagrant/action/builtin/call.rb +67 -0
  22. data/lib/vagrant/action/builtin/config_validate.rb +30 -0
  23. data/lib/vagrant/action/builtin/confirm.rb +38 -0
  24. data/lib/vagrant/action/builtin/destroy_confirm.rb +21 -0
  25. data/lib/vagrant/action/builtin/env_set.rb +24 -0
  26. data/lib/vagrant/action/builtin/graceful_halt.rb +73 -0
  27. data/lib/vagrant/action/builtin/handle_box_url.rb +77 -0
  28. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +134 -0
  29. data/lib/vagrant/action/builtin/lock.rb +57 -0
  30. data/lib/vagrant/action/builtin/nfs.rb +118 -0
  31. data/lib/vagrant/action/builtin/provision.rb +70 -0
  32. data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
  33. data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
  34. data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
  35. data/lib/vagrant/action/general/package.rb +103 -0
  36. data/lib/vagrant/action/hook.rb +107 -0
  37. data/lib/vagrant/action/runner.rb +69 -0
  38. data/lib/vagrant/action/warden.rb +103 -0
  39. data/lib/vagrant/action.rb +43 -0
  40. data/lib/vagrant/batch_action.rb +113 -0
  41. data/lib/vagrant/box.rb +97 -0
  42. data/lib/vagrant/box_collection.rb +375 -0
  43. data/lib/vagrant/cli.rb +82 -0
  44. data/lib/vagrant/config/loader.rb +222 -0
  45. data/lib/vagrant/config/v1/dummy_config.rb +13 -0
  46. data/lib/vagrant/config/v1/loader.rb +105 -0
  47. data/lib/vagrant/config/v1/root.rb +60 -0
  48. data/lib/vagrant/config/v1.rb +9 -0
  49. data/lib/vagrant/config/v2/dummy_config.rb +13 -0
  50. data/lib/vagrant/config/v2/loader.rb +141 -0
  51. data/lib/vagrant/config/v2/root.rb +105 -0
  52. data/lib/vagrant/config/v2/util.rb +21 -0
  53. data/lib/vagrant/config/v2.rb +9 -0
  54. data/lib/vagrant/config/version_base.rb +80 -0
  55. data/lib/vagrant/config.rb +61 -0
  56. data/lib/vagrant/environment.rb +843 -0
  57. data/lib/vagrant/errors.rb +570 -0
  58. data/lib/vagrant/guest.rb +163 -0
  59. data/lib/vagrant/hosts.rb +28 -0
  60. data/lib/vagrant/machine.rb +325 -0
  61. data/lib/vagrant/machine_state.rb +45 -0
  62. data/lib/vagrant/plugin/v1/command.rb +169 -0
  63. data/lib/vagrant/plugin/v1/communicator.rb +98 -0
  64. data/lib/vagrant/plugin/v1/config.rb +112 -0
  65. data/lib/vagrant/plugin/v1/errors.rb +15 -0
  66. data/lib/vagrant/plugin/v1/guest.rb +92 -0
  67. data/lib/vagrant/plugin/v1/host.rb +66 -0
  68. data/lib/vagrant/plugin/v1/manager.rb +131 -0
  69. data/lib/vagrant/plugin/v1/plugin.rb +229 -0
  70. data/lib/vagrant/plugin/v1/provider.rb +68 -0
  71. data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
  72. data/lib/vagrant/plugin/v1.rb +19 -0
  73. data/lib/vagrant/plugin/v2/command.rb +234 -0
  74. data/lib/vagrant/plugin/v2/communicator.rb +98 -0
  75. data/lib/vagrant/plugin/v2/components.rb +47 -0
  76. data/lib/vagrant/plugin/v2/config.rb +136 -0
  77. data/lib/vagrant/plugin/v2/errors.rb +15 -0
  78. data/lib/vagrant/plugin/v2/guest.rb +78 -0
  79. data/lib/vagrant/plugin/v2/host.rb +66 -0
  80. data/lib/vagrant/plugin/v2/manager.rb +173 -0
  81. data/lib/vagrant/plugin/v2/plugin.rb +226 -0
  82. data/lib/vagrant/plugin/v2/provider.rb +69 -0
  83. data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
  84. data/lib/vagrant/plugin/v2.rb +22 -0
  85. data/lib/vagrant/plugin.rb +6 -0
  86. data/lib/vagrant/registry.rb +78 -0
  87. data/lib/vagrant/ui.rb +215 -0
  88. data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
  89. data/lib/vagrant/util/busy.rb +59 -0
  90. data/lib/vagrant/util/counter.rb +24 -0
  91. data/lib/vagrant/util/downloader.rb +146 -0
  92. data/lib/vagrant/util/file_checksum.rb +38 -0
  93. data/lib/vagrant/util/file_mode.rb +12 -0
  94. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  95. data/lib/vagrant/util/is_port_open.rb +38 -0
  96. data/lib/vagrant/util/line_ending_helpers.rb +14 -0
  97. data/lib/vagrant/util/network_ip.rb +28 -0
  98. data/lib/vagrant/util/platform.rb +58 -0
  99. data/lib/vagrant/util/retryable.rb +31 -0
  100. data/lib/vagrant/util/safe_chdir.rb +33 -0
  101. data/lib/vagrant/util/safe_exec.rb +36 -0
  102. data/lib/vagrant/util/safe_puts.rb +31 -0
  103. data/lib/vagrant/util/scoped_hash_override.rb +45 -0
  104. data/lib/vagrant/util/ssh.rb +150 -0
  105. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  106. data/lib/vagrant/util/string_block_editor.rb +77 -0
  107. data/lib/vagrant/util/subprocess.rb +273 -0
  108. data/lib/vagrant/util/template_renderer.rb +83 -0
  109. data/lib/vagrant/util/which.rb +43 -0
  110. data/lib/vagrant/util.rb +12 -0
  111. data/lib/vagrant/version.rb +6 -0
  112. data/lib/vagrant.rb +258 -0
  113. data/plugins/README.md +5 -0
  114. data/plugins/commands/box/command/add.rb +51 -0
  115. data/plugins/commands/box/command/list.rb +41 -0
  116. data/plugins/commands/box/command/remove.rb +37 -0
  117. data/plugins/commands/box/command/repackage.rb +43 -0
  118. data/plugins/commands/box/command/root.rb +75 -0
  119. data/plugins/commands/box/plugin.rb +15 -0
  120. data/plugins/commands/destroy/command.rb +31 -0
  121. data/plugins/commands/destroy/plugin.rb +18 -0
  122. data/plugins/commands/halt/command.rb +33 -0
  123. data/plugins/commands/halt/plugin.rb +18 -0
  124. data/plugins/commands/init/command.rb +40 -0
  125. data/plugins/commands/init/plugin.rb +18 -0
  126. data/plugins/commands/package/command.rb +83 -0
  127. data/plugins/commands/package/plugin.rb +18 -0
  128. data/plugins/commands/plugin/action/bundler_check.rb +25 -0
  129. data/plugins/commands/plugin/action/install_gem.rb +81 -0
  130. data/plugins/commands/plugin/action/license_plugin.rb +54 -0
  131. data/plugins/commands/plugin/action/list_plugins.rb +54 -0
  132. data/plugins/commands/plugin/action/prune_gems.rb +149 -0
  133. data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
  134. data/plugins/commands/plugin/action.rb +52 -0
  135. data/plugins/commands/plugin/command/base.rb +22 -0
  136. data/plugins/commands/plugin/command/install.rb +58 -0
  137. data/plugins/commands/plugin/command/license.rb +31 -0
  138. data/plugins/commands/plugin/command/list.rb +28 -0
  139. data/plugins/commands/plugin/command/root.rb +75 -0
  140. data/plugins/commands/plugin/command/uninstall.rb +28 -0
  141. data/plugins/commands/plugin/gem_helper.rb +74 -0
  142. data/plugins/commands/plugin/plugin.rb +22 -0
  143. data/plugins/commands/plugin/state_file.rb +57 -0
  144. data/plugins/commands/provision/command.rb +34 -0
  145. data/plugins/commands/provision/plugin.rb +18 -0
  146. data/plugins/commands/reload/command.rb +37 -0
  147. data/plugins/commands/reload/plugin.rb +18 -0
  148. data/plugins/commands/resume/command.rb +25 -0
  149. data/plugins/commands/resume/plugin.rb +17 -0
  150. data/plugins/commands/ssh/command.rb +63 -0
  151. data/plugins/commands/ssh/plugin.rb +17 -0
  152. data/plugins/commands/ssh_config/command.rb +49 -0
  153. data/plugins/commands/ssh_config/plugin.rb +18 -0
  154. data/plugins/commands/status/command.rb +39 -0
  155. data/plugins/commands/status/plugin.rb +18 -0
  156. data/plugins/commands/suspend/command.rb +25 -0
  157. data/plugins/commands/suspend/plugin.rb +18 -0
  158. data/plugins/commands/up/command.rb +57 -0
  159. data/plugins/commands/up/plugin.rb +17 -0
  160. data/plugins/commands/up/start_mixins.rb +26 -0
  161. data/plugins/communicators/ssh/communicator.rb +342 -0
  162. data/plugins/communicators/ssh/plugin.rb +19 -0
  163. data/plugins/guests/arch/cap/change_host_name.rb +18 -0
  164. data/plugins/guests/arch/cap/configure_networks.rb +23 -0
  165. data/plugins/guests/arch/guest.rb +11 -0
  166. data/plugins/guests/arch/plugin.rb +25 -0
  167. data/plugins/guests/debian/cap/change_host_name.rb +18 -0
  168. data/plugins/guests/debian/cap/configure_networks.rb +61 -0
  169. data/plugins/guests/debian/guest.rb +9 -0
  170. data/plugins/guests/debian/plugin.rb +25 -0
  171. data/plugins/guests/fedora/cap/configure_networks.rb +59 -0
  172. data/plugins/guests/fedora/cap/network_scripts_dir.rb +15 -0
  173. data/plugins/guests/fedora/guest.rb +11 -0
  174. data/plugins/guests/fedora/plugin.rb +25 -0
  175. data/plugins/guests/freebsd/cap/change_host_name.rb +14 -0
  176. data/plugins/guests/freebsd/cap/configure_networks.rb +39 -0
  177. data/plugins/guests/freebsd/cap/halt.rb +16 -0
  178. data/plugins/guests/freebsd/cap/mount_nfs_folder.rb +14 -0
  179. data/plugins/guests/freebsd/guest.rb +14 -0
  180. data/plugins/guests/freebsd/plugin.rb +35 -0
  181. data/plugins/guests/gentoo/cap/change_host_name.rb +17 -0
  182. data/plugins/guests/gentoo/cap/configure_networks.rb +43 -0
  183. data/plugins/guests/gentoo/guest.rb +9 -0
  184. data/plugins/guests/gentoo/plugin.rb +25 -0
  185. data/plugins/guests/linux/cap/halt.rb +16 -0
  186. data/plugins/guests/linux/cap/mount_nfs.rb +30 -0
  187. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +40 -0
  188. data/plugins/guests/linux/cap/read_ip_address.rb +17 -0
  189. data/plugins/guests/linux/cap/shell_expand_guest_path.rb +26 -0
  190. data/plugins/guests/linux/guest.rb +11 -0
  191. data/plugins/guests/linux/plugin.rb +40 -0
  192. data/plugins/guests/openbsd/cap/halt.rb +16 -0
  193. data/plugins/guests/openbsd/guest.rb +11 -0
  194. data/plugins/guests/openbsd/plugin.rb +20 -0
  195. data/plugins/guests/pld/cap/network_scripts_dir.rb +11 -0
  196. data/plugins/guests/pld/guest.rb +11 -0
  197. data/plugins/guests/pld/plugin.rb +20 -0
  198. data/plugins/guests/redhat/cap/change_host_name.rb +18 -0
  199. data/plugins/guests/redhat/cap/configure_networks.rb +60 -0
  200. data/plugins/guests/redhat/cap/network_scripts_dir.rb +11 -0
  201. data/plugins/guests/redhat/guest.rb +11 -0
  202. data/plugins/guests/redhat/plugin.rb +30 -0
  203. data/plugins/guests/solaris/cap/change_host_name.rb +17 -0
  204. data/plugins/guests/solaris/cap/configure_networks.rb +25 -0
  205. data/plugins/guests/solaris/cap/halt.rb +21 -0
  206. data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +28 -0
  207. data/plugins/guests/solaris/config.rb +18 -0
  208. data/plugins/guests/solaris/guest.rb +14 -0
  209. data/plugins/guests/solaris/plugin.rb +40 -0
  210. data/plugins/guests/suse/cap/change_host_name.rb +18 -0
  211. data/plugins/guests/suse/cap/network_scripts_dir.rb +11 -0
  212. data/plugins/guests/suse/guest.rb +11 -0
  213. data/plugins/guests/suse/plugin.rb +25 -0
  214. data/plugins/guests/ubuntu/cap/change_host_name.rb +23 -0
  215. data/plugins/guests/ubuntu/guest.rb +32 -0
  216. data/plugins/guests/ubuntu/plugin.rb +20 -0
  217. data/plugins/hosts/arch/host.rb +68 -0
  218. data/plugins/hosts/arch/plugin.rb +15 -0
  219. data/plugins/hosts/bsd/host.rb +102 -0
  220. data/plugins/hosts/bsd/plugin.rb +15 -0
  221. data/plugins/hosts/fedora/host.rb +51 -0
  222. data/plugins/hosts/fedora/plugin.rb +15 -0
  223. data/plugins/hosts/freebsd/host.rb +43 -0
  224. data/plugins/hosts/freebsd/plugin.rb +15 -0
  225. data/plugins/hosts/gentoo/host.rb +24 -0
  226. data/plugins/hosts/gentoo/plugin.rb +15 -0
  227. data/plugins/hosts/linux/host.rb +95 -0
  228. data/plugins/hosts/linux/plugin.rb +15 -0
  229. data/plugins/hosts/opensuse/host.rb +34 -0
  230. data/plugins/hosts/opensuse/plugin.rb +15 -0
  231. data/plugins/hosts/windows/host.rb +17 -0
  232. data/plugins/hosts/windows/plugin.rb +15 -0
  233. data/plugins/kernel_v1/config/nfs.rb +20 -0
  234. data/plugins/kernel_v1/config/package.rb +17 -0
  235. data/plugins/kernel_v1/config/ssh.rb +46 -0
  236. data/plugins/kernel_v1/config/vagrant.rb +31 -0
  237. data/plugins/kernel_v1/config/vm.rb +184 -0
  238. data/plugins/kernel_v1/plugin.rb +44 -0
  239. data/plugins/kernel_v2/config/nfs.rb +14 -0
  240. data/plugins/kernel_v2/config/package.rb +13 -0
  241. data/plugins/kernel_v2/config/ssh.rb +76 -0
  242. data/plugins/kernel_v2/config/ssh_connect.rb +40 -0
  243. data/plugins/kernel_v2/config/vagrant.rb +13 -0
  244. data/plugins/kernel_v2/config/vm.rb +416 -0
  245. data/plugins/kernel_v2/config/vm_provisioner.rb +55 -0
  246. data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
  247. data/plugins/kernel_v2/plugin.rb +44 -0
  248. data/plugins/providers/virtualbox/action/boot.rb +49 -0
  249. data/plugins/providers/virtualbox/action/check_accessible.rb +23 -0
  250. data/plugins/providers/virtualbox/action/check_created.rb +21 -0
  251. data/plugins/providers/virtualbox/action/check_guest_additions.rb +45 -0
  252. data/plugins/providers/virtualbox/action/check_running.rb +21 -0
  253. data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
  254. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +43 -0
  255. data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +18 -0
  256. data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +31 -0
  257. data/plugins/providers/virtualbox/action/clear_shared_folders.rb +17 -0
  258. data/plugins/providers/virtualbox/action/created.rb +20 -0
  259. data/plugins/providers/virtualbox/action/customize.rb +36 -0
  260. data/plugins/providers/virtualbox/action/destroy.rb +19 -0
  261. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
  262. data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
  263. data/plugins/providers/virtualbox/action/export.rb +57 -0
  264. data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
  265. data/plugins/providers/virtualbox/action/forward_ports.rb +87 -0
  266. data/plugins/providers/virtualbox/action/import.rb +51 -0
  267. data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
  268. data/plugins/providers/virtualbox/action/is_running.rb +20 -0
  269. data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
  270. data/plugins/providers/virtualbox/action/match_mac_address.rb +21 -0
  271. data/plugins/providers/virtualbox/action/message_already_running.rb +16 -0
  272. data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
  273. data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
  274. data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
  275. data/plugins/providers/virtualbox/action/network.rb +410 -0
  276. data/plugins/providers/virtualbox/action/package.rb +20 -0
  277. data/plugins/providers/virtualbox/action/package_vagrantfile.rb +33 -0
  278. data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
  279. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +64 -0
  280. data/plugins/providers/virtualbox/action/prune_nfs_exports.rb +20 -0
  281. data/plugins/providers/virtualbox/action/resume.rb +25 -0
  282. data/plugins/providers/virtualbox/action/sane_defaults.rb +91 -0
  283. data/plugins/providers/virtualbox/action/set_name.rb +40 -0
  284. data/plugins/providers/virtualbox/action/setup_package_files.rb +51 -0
  285. data/plugins/providers/virtualbox/action/share_folders.rb +128 -0
  286. data/plugins/providers/virtualbox/action/suspend.rb +20 -0
  287. data/plugins/providers/virtualbox/action.rb +311 -0
  288. data/plugins/providers/virtualbox/config.rb +86 -0
  289. data/plugins/providers/virtualbox/driver/base.rb +360 -0
  290. data/plugins/providers/virtualbox/driver/meta.rb +142 -0
  291. data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
  292. data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
  293. data/plugins/providers/virtualbox/driver/version_4_2.rb +482 -0
  294. data/plugins/providers/virtualbox/model/forwarded_port.rb +58 -0
  295. data/plugins/providers/virtualbox/plugin.rb +42 -0
  296. data/plugins/providers/virtualbox/provider.rb +92 -0
  297. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +31 -0
  298. data/plugins/provisioners/ansible/config.rb +72 -0
  299. data/plugins/provisioners/ansible/plugin.rb +23 -0
  300. data/plugins/provisioners/ansible/provisioner.rb +45 -0
  301. data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +19 -0
  302. data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +14 -0
  303. data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +34 -0
  304. data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +24 -0
  305. data/plugins/provisioners/cfengine/config.rb +120 -0
  306. data/plugins/provisioners/cfengine/plugin.rb +42 -0
  307. data/plugins/provisioners/cfengine/provisioner.rb +136 -0
  308. data/plugins/provisioners/chef/config/base.rb +85 -0
  309. data/plugins/provisioners/chef/config/chef_client.rb +57 -0
  310. data/plugins/provisioners/chef/config/chef_solo.rb +87 -0
  311. data/plugins/provisioners/chef/plugin.rb +33 -0
  312. data/plugins/provisioners/chef/provisioner/base.rb +93 -0
  313. data/plugins/provisioners/chef/provisioner/chef_client.rb +107 -0
  314. data/plugins/provisioners/chef/provisioner/chef_solo.rb +192 -0
  315. data/plugins/provisioners/puppet/config/puppet.rb +70 -0
  316. data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
  317. data/plugins/provisioners/puppet/plugin.rb +33 -0
  318. data/plugins/provisioners/puppet/provisioner/puppet.rb +117 -0
  319. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
  320. data/plugins/provisioners/shell/config.rb +56 -0
  321. data/plugins/provisioners/shell/plugin.rb +23 -0
  322. data/plugins/provisioners/shell/provisioner.rb +86 -0
  323. data/tasks/acceptance.rake +113 -0
  324. data/tasks/bundler.rake +3 -0
  325. data/tasks/test.rake +20 -0
  326. data/templates/commands/init/Vagrantfile.erb +111 -0
  327. data/templates/commands/ssh_config/config.erb +16 -0
  328. data/templates/config/messages.erb +14 -0
  329. data/templates/config/validation_failed.erb +7 -0
  330. data/templates/guests/arch/network_dhcp.erb +4 -0
  331. data/templates/guests/arch/network_static.erb +6 -0
  332. data/templates/guests/debian/network_dhcp.erb +11 -0
  333. data/templates/guests/debian/network_static.erb +7 -0
  334. data/templates/guests/fedora/network_dhcp.erb +6 -0
  335. data/templates/guests/fedora/network_static.erb +13 -0
  336. data/templates/guests/freebsd/network_dhcp.erb +3 -0
  337. data/templates/guests/freebsd/network_static.erb +3 -0
  338. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  339. data/templates/guests/gentoo/network_static.erb +4 -0
  340. data/templates/guests/redhat/network_dhcp.erb +6 -0
  341. data/templates/guests/redhat/network_static.erb +8 -0
  342. data/templates/locales/en.yml +1126 -0
  343. data/templates/nfs/exports.erb +5 -0
  344. data/templates/nfs/exports_freebsd.erb +5 -0
  345. data/templates/nfs/exports_linux.erb +5 -0
  346. data/templates/package_Vagrantfile.erb +11 -0
  347. data/templates/provisioners/chef_client/client.erb +32 -0
  348. data/templates/provisioners/chef_solo/solo.erb +25 -0
  349. data/templates/rgloader.rb +9 -0
  350. data/test/acceptance/base.rb +48 -0
  351. data/test/acceptance/box_test.rb +99 -0
  352. data/test/acceptance/destroy_test.rb +37 -0
  353. data/test/acceptance/halt_test.rb +72 -0
  354. data/test/acceptance/init_test.rb +33 -0
  355. data/test/acceptance/networking/host_only_test.rb +37 -0
  356. data/test/acceptance/networking/port_forward_test.rb +125 -0
  357. data/test/acceptance/package_test.rb +46 -0
  358. data/test/acceptance/provisioning/basic_test.rb +61 -0
  359. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  360. data/test/acceptance/provisioning/shell_test.rb +53 -0
  361. data/test/acceptance/resume_test.rb +17 -0
  362. data/test/acceptance/shared_folders_test.rb +84 -0
  363. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  364. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  365. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  366. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  367. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  368. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  369. data/test/acceptance/ssh_test.rb +46 -0
  370. data/test/acceptance/support/config.rb +42 -0
  371. data/test/acceptance/support/isolated_environment.rb +118 -0
  372. data/test/acceptance/support/matchers/have_color.rb +9 -0
  373. data/test/acceptance/support/matchers/match_output.rb +14 -0
  374. data/test/acceptance/support/matchers/succeed.rb +14 -0
  375. data/test/acceptance/support/network_tests.rb +29 -0
  376. data/test/acceptance/support/output.rb +95 -0
  377. data/test/acceptance/support/shared/base_context.rb +72 -0
  378. data/test/acceptance/support/shared/command_examples.rb +33 -0
  379. data/test/acceptance/support/virtualbox.rb +36 -0
  380. data/test/acceptance/suspend_test.rb +56 -0
  381. data/test/acceptance/up_basic_test.rb +33 -0
  382. data/test/acceptance/up_with_box_url.rb +40 -0
  383. data/test/acceptance/vagrant_test.rb +47 -0
  384. data/test/acceptance/version_test.rb +15 -0
  385. data/test/config/acceptance_boxes.yml +7 -0
  386. data/test/support/isolated_environment.rb +46 -0
  387. data/test/support/tempdir.rb +43 -0
  388. data/test/unit/base.rb +27 -0
  389. data/test/unit/support/dummy_provider.rb +16 -0
  390. data/test/unit/support/isolated_environment.rb +179 -0
  391. data/test/unit/support/shared/base_context.rb +104 -0
  392. data/test/unit/vagrant/action/builder_test.rb +242 -0
  393. data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
  394. data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
  395. data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
  396. data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +61 -0
  397. data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
  398. data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
  399. data/test/unit/vagrant/action/hook_test.rb +120 -0
  400. data/test/unit/vagrant/action/runner_test.rb +71 -0
  401. data/test/unit/vagrant/action/warden_test.rb +92 -0
  402. data/test/unit/vagrant/batch_action_test.rb +36 -0
  403. data/test/unit/vagrant/box_collection_test.rb +237 -0
  404. data/test/unit/vagrant/box_test.rb +122 -0
  405. data/test/unit/vagrant/cli_test.rb +27 -0
  406. data/test/unit/vagrant/config/loader_test.rb +184 -0
  407. data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
  408. data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
  409. data/test/unit/vagrant/config/v1/root_test.rb +40 -0
  410. data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
  411. data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
  412. data/test/unit/vagrant/config/v2/root_test.rb +97 -0
  413. data/test/unit/vagrant/config/v2/util_test.rb +21 -0
  414. data/test/unit/vagrant/config_test.rb +66 -0
  415. data/test/unit/vagrant/environment_test.rb +721 -0
  416. data/test/unit/vagrant/guest_test.rb +166 -0
  417. data/test/unit/vagrant/hosts_test.rb +37 -0
  418. data/test/unit/vagrant/machine_state_test.rb +26 -0
  419. data/test/unit/vagrant/machine_test.rb +384 -0
  420. data/test/unit/vagrant/plugin/v1/command_test.rb +143 -0
  421. data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
  422. data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
  423. data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
  424. data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
  425. data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
  426. data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
  427. data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
  428. data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
  429. data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
  430. data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
  431. data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
  432. data/test/unit/vagrant/plugin/v2/manager_test.rb +174 -0
  433. data/test/unit/vagrant/plugin/v2/plugin_test.rb +305 -0
  434. data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
  435. data/test/unit/vagrant/registry_test.rb +128 -0
  436. data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
  437. data/test/unit/vagrant/util/downloader_test.rb +57 -0
  438. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  439. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
  440. data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
  441. data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
  442. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  443. data/test/unit/vagrant/util/retryable_test.rb +106 -0
  444. data/test/unit/vagrant/util/safe_chdir_test.rb +43 -0
  445. data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
  446. data/test/unit/vagrant/util/ssh_test.rb +30 -0
  447. data/test/unit/vagrant/util/string_block_editor_test.rb +106 -0
  448. data/test/unit/vagrant/util/which_test.rb +43 -0
  449. data/test/unit/vagrant_test.rb +56 -0
  450. data/tnargav.gemspec +69 -0
  451. data/vagrant.gemspec +69 -0
  452. metadata +730 -0
data/lib/vagrant.rb ADDED
@@ -0,0 +1,258 @@
1
+ require 'log4r'
2
+
3
+ # Enable logging if it is requested. We do this before
4
+ # anything else so that we can setup the output before
5
+ # any logging occurs.
6
+ if ENV["VAGRANT_LOG"] && ENV["VAGRANT_LOG"] != ""
7
+ # Require Log4r and define the levels we'll be using
8
+ require 'log4r/config'
9
+ Log4r.define_levels(*Log4r::Log4rConfig::LogLevels)
10
+
11
+ level = nil
12
+ begin
13
+ level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
14
+ rescue NameError
15
+ # This means that the logging constant wasn't found,
16
+ # which is fine. We just keep `level` as `nil`. But
17
+ # we tell the user.
18
+ level = nil
19
+ end
20
+
21
+ # Some constants, such as "true" resolve to booleans, so the
22
+ # above error checking doesn't catch it. This will check to make
23
+ # sure that the log level is an integer, as Log4r requires.
24
+ level = nil if !level.is_a?(Integer)
25
+
26
+ if !level
27
+ # We directly write to stderr here because the VagrantError system
28
+ # is not setup yet.
29
+ $stderr.puts "Invalid VAGRANT_LOG level is set: #{ENV["VAGRANT_LOG"]}"
30
+ $stderr.puts ""
31
+ $stderr.puts "Please use one of the standard log levels: debug, info, warn, or error"
32
+ exit 1
33
+ end
34
+
35
+ # Set the logging level on all "vagrant" namespaced
36
+ # logs as long as we have a valid level.
37
+ if level
38
+ logger = Log4r::Logger.new("vagrant")
39
+ logger.outputters = Log4r::Outputter.stderr
40
+ logger.level = level
41
+ logger = nil
42
+ end
43
+ end
44
+
45
+ require 'json'
46
+ require 'pathname'
47
+ require 'stringio'
48
+
49
+ require 'childprocess'
50
+ require 'i18n'
51
+
52
+ # OpenSSL must be loaded here since when it is loaded via `autoload`
53
+ # there are issues with ciphers not being properly loaded.
54
+ require 'openssl'
55
+
56
+ # Always make the version available
57
+ require 'vagrant/version'
58
+ global_logger = Log4r::Logger.new("vagrant::global")
59
+ global_logger.info("Vagrant version: #{Vagrant::VERSION}")
60
+
61
+ # We need these components always so instead of an autoload we
62
+ # just require them explicitly here.
63
+ require "vagrant/registry"
64
+
65
+ module Vagrant
66
+ autoload :Action, 'vagrant/action'
67
+ autoload :BatchAction, 'vagrant/batch_action'
68
+ autoload :Box, 'vagrant/box'
69
+ autoload :BoxCollection, 'vagrant/box_collection'
70
+ autoload :CLI, 'vagrant/cli'
71
+ autoload :Command, 'vagrant/command'
72
+ autoload :Config, 'vagrant/config'
73
+ autoload :Driver, 'vagrant/driver'
74
+ autoload :Environment, 'vagrant/environment'
75
+ autoload :Errors, 'vagrant/errors'
76
+ autoload :Guest, 'vagrant/guest'
77
+ autoload :Hosts, 'vagrant/hosts'
78
+ autoload :Machine, 'vagrant/machine'
79
+ autoload :MachineState, 'vagrant/machine_state'
80
+ autoload :Plugin, 'vagrant/plugin'
81
+ autoload :UI, 'vagrant/ui'
82
+ autoload :Util, 'vagrant/util'
83
+
84
+ # These are the various plugin versions and their components in
85
+ # a lazy loaded Hash-like structure.
86
+ PLUGIN_COMPONENTS = Registry.new.tap do |c|
87
+ c.register(:"1") { Plugin::V1::Plugin }
88
+ c.register([:"1", :command]) { Plugin::V1::Command }
89
+ c.register([:"1", :communicator]) { Plugin::V1::Communicator }
90
+ c.register([:"1", :config]) { Plugin::V1::Config }
91
+ c.register([:"1", :guest]) { Plugin::V1::Guest }
92
+ c.register([:"1", :host]) { Plugin::V1::Host }
93
+ c.register([:"1", :provider]) { Plugin::V1::Provider }
94
+ c.register([:"1", :provisioner]) { Plugin::V1::Provisioner }
95
+
96
+ c.register(:"2") { Plugin::V2::Plugin }
97
+ c.register([:"2", :command]) { Plugin::V2::Command }
98
+ c.register([:"2", :communicator]) { Plugin::V2::Communicator }
99
+ c.register([:"2", :config]) { Plugin::V2::Config }
100
+ c.register([:"2", :guest]) { Plugin::V2::Guest }
101
+ c.register([:"2", :host]) { Plugin::V2::Host }
102
+ c.register([:"2", :provider]) { Plugin::V2::Provider }
103
+ c.register([:"2", :provisioner]) { Plugin::V2::Provisioner }
104
+ end
105
+
106
+ # This returns a true/false showing whether we're running from the
107
+ # environment setup by the Vagrant installers.
108
+ #
109
+ # @return [Boolean]
110
+ def self.in_installer?
111
+ !!ENV["VAGRANT_INSTALLER_ENV"]
112
+ end
113
+
114
+ # The source root is the path to the root directory of
115
+ # the Vagrant gem.
116
+ def self.source_root
117
+ @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
118
+ end
119
+
120
+ # Configure a Vagrant environment. The version specifies the version
121
+ # of the configuration that is expected by the block. The block, based
122
+ # on that version, configures the environment.
123
+ #
124
+ # Note that the block isn't run immediately. Instead, the configuration
125
+ # block is stored until later, and is run when an environment is loaded.
126
+ #
127
+ # @param [String] version Version of the configuration
128
+ def self.configure(version, &block)
129
+ Config.run(version, &block)
130
+ end
131
+
132
+ # Returns a superclass to use when creating a plugin for Vagrant.
133
+ # Given a specific version, this returns a proper superclass to use
134
+ # to register plugins for that version.
135
+ #
136
+ # Optionally, if you give a specific component, then it will return
137
+ # the proper superclass for that component as well.
138
+ #
139
+ # Plugins and plugin components should subclass the classes returned by
140
+ # this method. This method lets Vagrant core control these superclasses
141
+ # and change them over time without affecting plugins. For example, if
142
+ # the V1 superclass happens to be "Vagrant::V1," future versions of
143
+ # Vagrant may move it to "Vagrant::Plugins::V1" and plugins will not be
144
+ # affected.
145
+ #
146
+ # @param [String] version
147
+ # @param [String] component
148
+ # @return [Class]
149
+ def self.plugin(version, component=nil)
150
+ # Build up the key and return a result
151
+ key = version.to_s.to_sym
152
+ key = [key, component.to_s.to_sym] if component
153
+ result = PLUGIN_COMPONENTS.get(key)
154
+
155
+ # If we found our component then we return that
156
+ return result if result
157
+
158
+ # If we didn't find a result, then raise an exception, depending
159
+ # on if we got a component or not.
160
+ raise ArgumentError, "Plugin superclass not found for version/component: " +
161
+ "#{version} #{component}"
162
+ end
163
+
164
+ # This should be used instead of Ruby's built-in `require` in order to
165
+ # load a Vagrant plugin. This will load the given plugin by first doing
166
+ # a normal `require`, giving a nice error message if things go wrong,
167
+ # and second by verifying that a Vagrant plugin was actually defined in
168
+ # the process.
169
+ #
170
+ # @param [String] name Name of the plugin to load.
171
+ def self.require_plugin(name)
172
+ if ENV["VAGRANT_NO_PLUGINS"]
173
+ logger = Log4r::Logger.new("vagrant::root")
174
+ logger.warn("VAGRANT_NO_PLUGINS is set, not loading 3rd party plugin: #{name}")
175
+ return
176
+ end
177
+
178
+ # Redirect stdout/stderr so that we can output it in our own way.
179
+ previous_stderr = $stderr
180
+ previous_stdout = $stdout
181
+ $stderr = StringIO.new
182
+ $stdout = StringIO.new
183
+
184
+ # Attempt the normal require
185
+ begin
186
+ require name
187
+ rescue Exception => e
188
+ # Since this is a rare case, we create a one-time logger here
189
+ # in order to output the error
190
+ logger = Log4r::Logger.new("vagrant::root")
191
+ logger.error("Failed to load plugin: #{name}")
192
+ logger.error(" -- Error: #{e.inspect}")
193
+ logger.error(" -- Backtrace:")
194
+ logger.error(e.backtrace.join("\n"))
195
+
196
+ # If it is a LoadError we first try to see if it failed loading
197
+ # the top-level entrypoint. If so, then we report a different error.
198
+ if e.is_a?(LoadError)
199
+ # Parse the message in order to get what failed to load, and
200
+ # add some extra protection around if the message is different.
201
+ parts = e.to_s.split(" -- ", 2)
202
+ if parts.length == 2 && parts[1] == name
203
+ raise Errors::PluginLoadError, :plugin => name
204
+ end
205
+ end
206
+
207
+ # Get the string data out from the stdout/stderr captures
208
+ stderr = $stderr.string
209
+ stdout = $stdout.string
210
+ if !stderr.empty? || !stdout.empty?
211
+ raise Errors::PluginLoadFailedWithOutput,
212
+ :plugin => name,
213
+ :stderr => stderr,
214
+ :stdout => stdout
215
+ end
216
+
217
+ # And raise an error itself
218
+ raise Errors::PluginLoadFailed,
219
+ :plugin => name
220
+ end
221
+ ensure
222
+ $stderr = previous_stderr if previous_stderr
223
+ $stdout = previous_stdout if previous_stdout
224
+ end
225
+ end
226
+
227
+ # Default I18n to load the en locale
228
+ I18n.load_path << File.expand_path("templates/locales/en.yml", Vagrant.source_root)
229
+
230
+ # A lambda that knows how to load plugins from a single directory.
231
+ plugin_load_proc = lambda do |directory|
232
+ # We only care about directories
233
+ next false if !directory.directory?
234
+
235
+ # If there is a plugin file in the top-level directory, then load
236
+ # that up.
237
+ plugin_file = directory.join("plugin.rb")
238
+ if plugin_file.file?
239
+ global_logger.debug("Loading core plugin: #{plugin_file}")
240
+ load(plugin_file)
241
+ next true
242
+ end
243
+ end
244
+
245
+ # Go through the `plugins` directory and attempt to load any plugins. The
246
+ # plugins are allowed to be in a directory in `plugins` or at most one
247
+ # directory deep within the plugins directory. So a plugin can be at
248
+ # `plugins/foo` or also at `plugins/foo/bar`, but no deeper.
249
+ Vagrant.source_root.join("plugins").children(true).each do |directory|
250
+ # Ignore non-directories
251
+ next if !directory.directory?
252
+
253
+ # Load from this directory, and exit if we successfully loaded a plugin
254
+ next if plugin_load_proc.call(directory)
255
+
256
+ # Otherwise, attempt to load from sub-directories
257
+ directory.children(true).each(&plugin_load_proc)
258
+ end
data/plugins/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # Vagrant Core Plugins
2
+
3
+ These are plugins that ship with Vagrant. Vagrant core uses its own
4
+ plugin system to power a lot of the core pieces that ship with Vagrant.
5
+ Each plugin will have its own README which explains its specific role.
@@ -0,0 +1,51 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module CommandBox
5
+ module Command
6
+ class Add < Vagrant.plugin("2", :command)
7
+ def execute
8
+ options = {}
9
+
10
+ opts = OptionParser.new do |o|
11
+ o.banner = "Usage: vagrant box add <name> <url> [--provider provider] [-h]"
12
+ o.separator ""
13
+
14
+ o.on("-f", "--force", "Overwrite an existing box if it exists.") do |f|
15
+ options[:force] = f
16
+ end
17
+
18
+ o.on("--insecure", "If set, SSL certs will not be validated.") do |i|
19
+ options[:insecure] = i
20
+ end
21
+
22
+ o.on("--provider provider", String,
23
+ "The provider that backs the box.") do |p|
24
+ options[:provider] = p
25
+ end
26
+ end
27
+
28
+ # Parse the options
29
+ argv = parse_options(opts)
30
+ return if !argv
31
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 2
32
+
33
+ # Get the provider if one was set
34
+ provider = nil
35
+ provider = options[:provider].to_sym if options[:provider]
36
+
37
+ @env.action_runner.run(Vagrant::Action.action_box_add, {
38
+ :box_name => argv[0],
39
+ :box_provider => provider,
40
+ :box_url => argv[1],
41
+ :box_force => options[:force],
42
+ :box_download_insecure => options[:insecure],
43
+ })
44
+
45
+ # Success, exit status 0
46
+ 0
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,41 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module CommandBox
5
+ module Command
6
+ class List < Vagrant.plugin("2", :command)
7
+ def execute
8
+ options = {}
9
+
10
+ opts = OptionParser.new do |opts|
11
+ opts.banner = "Usage: vagrant box list"
12
+ end
13
+
14
+ # Parse the options
15
+ argv = parse_options(opts)
16
+ return if !argv
17
+
18
+ boxes = @env.boxes.all.sort
19
+ if boxes.empty?
20
+ return @env.ui.warn(I18n.t("vagrant.commands.box.no_installed_boxes"), :prefix => false)
21
+ end
22
+
23
+ # Find the longest box name
24
+ longest_box = boxes.max_by { |x| x[0].length }
25
+ longest_box_length = longest_box[0].length
26
+
27
+ # Go through each box and output the information about it. We
28
+ # ignore the "v1" param for now since I'm not yet sure if its
29
+ # important for the user to know what boxes need to be upgraded
30
+ # and which don't, since we plan on doing that transparently.
31
+ boxes.each do |name, provider, _v1|
32
+ @env.ui.info("#{name.ljust(longest_box_length)} (#{provider})", :prefix => false)
33
+ end
34
+
35
+ # Success, exit status 0
36
+ 0
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,37 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module CommandBox
5
+ module Command
6
+ class Remove < Vagrant.plugin("2", :command)
7
+ def execute
8
+ opts = OptionParser.new do |o|
9
+ o.banner = "Usage: vagrant box remove <name> <provider>"
10
+ end
11
+
12
+ # Parse the options
13
+ argv = parse_options(opts)
14
+ return if !argv
15
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 2
16
+
17
+ b = nil
18
+ begin
19
+ b = @env.boxes.find(argv[0], argv[1].to_sym)
20
+ rescue Vagrant::Errors::BoxUpgradeRequired
21
+ @env.boxes.upgrade(argv[0])
22
+ retry
23
+ end
24
+
25
+ raise Vagrant::Errors::BoxNotFound, :name => argv[0] if !b
26
+ @env.ui.info(I18n.t("vagrant.commands.box.removing",
27
+ :name => argv[0],
28
+ :provider => argv[1]))
29
+ b.destroy!
30
+
31
+ # Success, exit status 0
32
+ 0
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,43 @@
1
+ require "fileutils"
2
+ require 'optparse'
3
+ require "pathname"
4
+
5
+ module VagrantPlugins
6
+ module CommandBox
7
+ module Command
8
+ class Repackage < Vagrant.plugin("2", :command)
9
+ def execute
10
+ opts = OptionParser.new do |o|
11
+ o.banner = "Usage: vagrant box repackage <name> <provider>"
12
+ end
13
+
14
+ # Parse the options
15
+ argv = parse_options(opts)
16
+ return if !argv
17
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 2
18
+
19
+ box_name = argv[0]
20
+ box_provider = argv[1].to_sym
21
+
22
+ # Verify the box exists that we want to repackage
23
+ box = nil
24
+ begin
25
+ box = @env.boxes.find(box_name, box_provider)
26
+ rescue Vagrant::Errors::BoxUpgradeRequired
27
+ @env.boxes.upgrade(box_name)
28
+ retry
29
+ end
30
+
31
+ raise Vagrant::Errors::BoxNotFound, :name => box_name if !box
32
+
33
+ # Repackage the box
34
+ output_path = Pathname.new(File.expand_path(@env.config_global.package.name, FileUtils.pwd))
35
+ box.repackage(output_path)
36
+
37
+ # Success, exit status 0
38
+ 0
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,75 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module CommandBox
5
+ module Command
6
+ class Root < Vagrant.plugin("2", :command)
7
+ def initialize(argv, env)
8
+ super
9
+
10
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
11
+
12
+ @subcommands = Vagrant::Registry.new
13
+ @subcommands.register(:add) do
14
+ require File.expand_path("../add", __FILE__)
15
+ Add
16
+ end
17
+
18
+ @subcommands.register(:list) do
19
+ require File.expand_path("../list", __FILE__)
20
+ List
21
+ end
22
+
23
+ @subcommands.register(:remove) do
24
+ require File.expand_path("../remove", __FILE__)
25
+ Remove
26
+ end
27
+
28
+ @subcommands.register(:repackage) do
29
+ require File.expand_path("../repackage", __FILE__)
30
+ Repackage
31
+ end
32
+ end
33
+
34
+ def execute
35
+ if @main_args.include?("-h") || @main_args.include?("--help")
36
+ # Print the help for all the box commands.
37
+ return help
38
+ end
39
+
40
+ # If we reached this far then we must have a subcommand. If not,
41
+ # then we also just print the help and exit.
42
+ command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
43
+ return help if !command_class || !@sub_command
44
+ @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
45
+
46
+ # Initialize and execute the command class
47
+ command_class.new(@sub_args, @env).execute
48
+ end
49
+
50
+ # Prints the help out for this command
51
+ def help
52
+ opts = OptionParser.new do |opts|
53
+ opts.banner = "Usage: vagrant box <command> [<args>]"
54
+ opts.separator ""
55
+ opts.separator "Available subcommands:"
56
+
57
+ # Add the available subcommands as separators in order to print them
58
+ # out as well.
59
+ keys = []
60
+ @subcommands.each { |key, value| keys << key.to_s }
61
+
62
+ keys.sort.each do |key|
63
+ opts.separator " #{key}"
64
+ end
65
+
66
+ opts.separator ""
67
+ opts.separator "For help on any individual command run `vagrant box COMMAND -h`"
68
+ end
69
+
70
+ @env.ui.info(opts.help, :prefix => false)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,15 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommandBox
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "box command"
7
+ description "The `box` command gives you a way to manage boxes."
8
+
9
+ command("box") do
10
+ require File.expand_path("../command/root", __FILE__)
11
+ Command::Root
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ module VagrantPlugins
2
+ module CommandDestroy
3
+ class Command < Vagrant.plugin("2", :command)
4
+ def execute
5
+ options = {}
6
+ options[:force] = false
7
+
8
+ opts = OptionParser.new do |o|
9
+ o.banner = "Usage: vagrant destroy [vm-name]"
10
+ o.separator ""
11
+
12
+ o.on("-f", "--force", "Destroy without confirmation.") do |f|
13
+ options[:force] = f
14
+ end
15
+ end
16
+
17
+ # Parse the options
18
+ argv = parse_options(opts)
19
+ return if !argv
20
+
21
+ @logger.debug("'Destroy' each target VM...")
22
+ with_target_vms(argv, :reverse => true) do |vm|
23
+ vm.action(:destroy, :force_confirm_destroy => options[:force])
24
+ end
25
+
26
+ # Success, exit status 0
27
+ 0
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommandDestroy
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "destroy command"
7
+ description <<-DESC
8
+ The `destroy` command deletes and removes the files and record of your virtual machines.
9
+ All data is lost and a new VM will have to be created using `up`
10
+ DESC
11
+
12
+ command("destroy") do
13
+ require File.expand_path("../command", __FILE__)
14
+ Command
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module CommandHalt
5
+ class Command < Vagrant.plugin("2", :command)
6
+ def execute
7
+ options = {}
8
+ options[:force] = false
9
+
10
+ opts = OptionParser.new do |o|
11
+ o.banner = "Usage: vagrant halt [vm-name] [--force] [-h]"
12
+ o.separator ""
13
+
14
+ o.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) do |vm|
25
+ vm.action(:halt, :force_halt => options[:force])
26
+ end
27
+
28
+ # Success, exit status 0
29
+ 0
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,18 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommandHalt
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "halt command"
7
+ description <<-DESC
8
+ The `halt` command shuts your virtual machine down forcefully.
9
+ The command `up` recreates it.
10
+ DESC
11
+
12
+ command("halt") do
13
+ require File.expand_path("../command", __FILE__)
14
+ Command
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+ require 'optparse'
2
+
3
+ require 'vagrant/util/template_renderer'
4
+
5
+ module VagrantPlugins
6
+ module CommandInit
7
+ class Command < Vagrant.plugin("2", :command)
8
+ def execute
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 Vagrant::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)
34
+
35
+ # Success, exit status 0
36
+ 0
37
+ end
38
+ end
39
+ end
40
+ end