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
@@ -0,0 +1,18 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommandInit
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "init command"
7
+ description <<-DESC
8
+ The `init` command sets up your working directory to be a
9
+ Vagrant-managed environment.
10
+ DESC
11
+
12
+ command("init") do
13
+ require File.expand_path("../command", __FILE__)
14
+ Command
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,83 @@
1
+ require 'optparse'
2
+
3
+ module VagrantPlugins
4
+ module CommandPackage
5
+ class Command < Vagrant.plugin("2", :command)
6
+ def execute
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |o|
10
+ o.banner = "Usage: vagrant package [vm-name] [--base name] [--output name.box]"
11
+ o.separator " [--include one,two,three] [--vagrantfile file]"
12
+
13
+ o.separator ""
14
+
15
+ o.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
+ o.on("--output NAME", "Name of the file to output") do |output|
20
+ options[:output] = output
21
+ end
22
+
23
+ o.on("--include x,y,z", Array, "Additional files to package with the box.") do |i|
24
+ options[:include] = i
25
+ end
26
+
27
+ o.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
42
+
43
+ # Success, exit status 0
44
+ 0
45
+ end
46
+
47
+ protected
48
+
49
+ def package_base(options)
50
+ # XXX: This whole thing is hardcoded and very temporary. The whole
51
+ # `vagrant package --base` process is deprecated for something much
52
+ # better in the future. We just hardcode this to keep VirtualBox working
53
+ # for now.
54
+ provider = Vagrant.plugin("2").manager.providers[:virtualbox]
55
+ vm = Vagrant::Machine.new(
56
+ options[:base],
57
+ :virtualbox, provider[0], nil, provider[1],
58
+ @env.config_global,
59
+ nil, nil,
60
+ @env, true)
61
+ @logger.debug("Packaging base VM: #{vm.name}")
62
+ package_vm(vm, options)
63
+ end
64
+
65
+ def package_target(name, options)
66
+ with_target_vms(name, :single_target => true) do |vm|
67
+ @logger.debug("Packaging VM: #{vm.name}")
68
+ package_vm(vm, options)
69
+ end
70
+ end
71
+
72
+ def package_vm(vm, options)
73
+ opts = options.inject({}) do |acc, data|
74
+ k,v = data
75
+ acc["package.#{k}"] = v
76
+ acc
77
+ end
78
+
79
+ vm.action(:package, opts)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,18 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommandPackage
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "package command"
7
+ description <<-DESC
8
+ The `package` command will take a previously existing Vagrant
9
+ environment and package it into a box file.
10
+ DESC
11
+
12
+ command("package") do
13
+ require File.expand_path("../command", __FILE__)
14
+ Command
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ module VagrantPlugins
2
+ module CommandPlugin
3
+ module Action
4
+ class BundlerCheck
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ # Bundler sets up its own custom gem load paths such that our
11
+ # own gems are never loaded. Therefore, give an error if a user
12
+ # tries to install gems while within a Bundler-managed environment.
13
+ if defined?(Bundler)
14
+ require 'bundler/shared_helpers'
15
+ if Bundler::SharedHelpers.in_bundle?
16
+ raise Vagrant::Errors::GemCommandInBundler
17
+ end
18
+ end
19
+
20
+ @app.call(env)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,81 @@
1
+ require "rubygems"
2
+ require "rubygems/dependency_installer"
3
+
4
+ require "log4r"
5
+
6
+ module VagrantPlugins
7
+ module CommandPlugin
8
+ module Action
9
+ # This action takes the `:plugin_name` variable in the environment
10
+ # and installs it using the RubyGems API.
11
+ class InstallGem
12
+ def initialize(app, env)
13
+ @app = app
14
+ @logger = Log4r::Logger.new("vagrant::plugins::plugincommand::installgem")
15
+ end
16
+
17
+ def call(env)
18
+ plugin_name = env[:plugin_name]
19
+ prerelease = env[:plugin_prerelease]
20
+ version = env[:plugin_version]
21
+
22
+ # Install the gem
23
+ plugin_name_label = plugin_name
24
+ plugin_name_label += ' --prerelease' if prerelease
25
+ plugin_name_label += " --version '#{version}'" if version
26
+ env[:ui].info(I18n.t("vagrant.commands.plugin.installing",
27
+ :name => plugin_name_label))
28
+ installed_gems = env[:gem_helper].with_environment do
29
+ # Override the list of sources by the ones set as a parameter if given
30
+ if env[:plugin_sources]
31
+ @logger.info("Custom plugin sources: #{env[:plugin_sources]}")
32
+ Gem.sources = env[:plugin_sources]
33
+ end
34
+
35
+ installer = Gem::DependencyInstaller.new(:document => [], :prerelease => prerelease)
36
+
37
+ begin
38
+ installer.install(plugin_name, version)
39
+ rescue Gem::GemNotFoundException
40
+ raise Vagrant::Errors::PluginInstallNotFound,
41
+ :name => plugin_name
42
+ end
43
+ end
44
+
45
+ # The plugin spec is the last installed gem since RubyGems
46
+ # currently always installed the requested gem last.
47
+ @logger.debug("Installed #{installed_gems.length} gems.")
48
+ plugin_spec = installed_gems.last
49
+
50
+ # Store the installed name so we can uninstall it if things go
51
+ # wrong.
52
+ @installed_plugin_name = plugin_spec.name
53
+
54
+ # Mark that we installed the gem
55
+ @logger.info("Adding the plugin to the state file...")
56
+ env[:plugin_state_file].add_plugin(plugin_spec.name)
57
+
58
+ # Tell the user
59
+ env[:ui].success(I18n.t("vagrant.commands.plugin.installed",
60
+ :name => plugin_spec.name,
61
+ :version => plugin_spec.version.to_s))
62
+
63
+ # Continue
64
+ @app.call(env)
65
+ end
66
+
67
+ def recover(env)
68
+ # If any error happens, we uninstall it and remove it from
69
+ # the state file. We can only do this if we successfully installed
70
+ # the gem in the first place.
71
+ if @installed_plugin_name
72
+ new_env = env.dup
73
+ new_env.delete(:interrupted)
74
+ new_env[:plugin_name] = @installed_plugin_name
75
+ new_env[:action_runner].run(Action.action_uninstall, new_env)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,54 @@
1
+ require "fileutils"
2
+ require "pathname"
3
+ require "rubygems"
4
+ require "set"
5
+
6
+ require "log4r"
7
+
8
+ module VagrantPlugins
9
+ module CommandPlugin
10
+ module Action
11
+ # This middleware licenses a plugin by copying the license file to
12
+ # the proper place.
13
+ class LicensePlugin
14
+ def initialize(app, env)
15
+ @app = app
16
+ @logger = Log4r::Logger.new("vagrant::plugins::plugincommand::license")
17
+ end
18
+
19
+ def call(env)
20
+ # Get the list of installed plugins according to the state file
21
+ installed = Set.new(env[:plugin_state_file].installed_plugins)
22
+
23
+ # If the plugin we're trying to license doesn't exist in the
24
+ # state file, then it is an error.
25
+ if !installed.include?(env[:plugin_name])
26
+ raise Vagrant::Errors::PluginNotFound, :name => env[:plugin_name]
27
+ end
28
+
29
+ # Verify the license file exists
30
+ license_file = Pathname.new(env[:plugin_license_path])
31
+ if !license_file.file?
32
+ raise Vagrant::Errors::PluginInstallLicenseNotFound,
33
+ :name => env[:plugin_name],
34
+ :path => license_file.to_s
35
+ end
36
+
37
+ # Copy it in.
38
+ final_path = env[:home_path].join("license-#{env[:plugin_name]}.lic")
39
+ @logger.info("Copying license from: #{license_file}")
40
+ @logger.info("Copying license to: #{final_path}")
41
+ env[:ui].info(I18n.t("vagrant.commands.plugin.installing_license",
42
+ :name => env[:plugin_name]))
43
+ FileUtils.cp(license_file, final_path)
44
+
45
+ # Installed!
46
+ env[:ui].success(I18n.t("vagrant.commands.plugin.installed_license",
47
+ :name => env[:plugin_name]))
48
+
49
+ @app.call(env)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require "rubygems"
2
+ require "set"
3
+
4
+ module VagrantPlugins
5
+ module CommandPlugin
6
+ module Action
7
+ # This middleware lists all the installed plugins.
8
+ #
9
+ # This is a bit more complicated than simply listing installed
10
+ # gems or what is in the state file as installed. Instead, this
11
+ # actually compares installed gems with what the state file claims
12
+ # is installed, and outputs the appropriate truly installed
13
+ # plugins.
14
+ class ListPlugins
15
+ def initialize(app, env)
16
+ @app = app
17
+ end
18
+
19
+ def call(env)
20
+ # Get the list of installed plugins according to the state file
21
+ installed = Set.new(env[:plugin_state_file].installed_plugins)
22
+
23
+ # Go through the plugins installed in this environment and
24
+ # get the latest version of each.
25
+ installed_map = {}
26
+ env[:gem_helper].with_environment do
27
+ Gem::Specification.find_all.each do |spec|
28
+ # Ignore specs that aren't in our installed list
29
+ next if !installed.include?(spec.name)
30
+
31
+ # If we already have a newer version in our list of installed,
32
+ # then ignore it
33
+ next if installed_map.has_key?(spec.name) &&
34
+ installed_map[spec.name].version >= spec.version
35
+
36
+ installed_map[spec.name] = spec
37
+ end
38
+ end
39
+
40
+ # Output!
41
+ if installed_map.empty?
42
+ env[:ui].info(I18n.t("vagrant.commands.plugin.no_plugins"))
43
+ else
44
+ installed_map.values.each do |spec|
45
+ env[:ui].info "#{spec.name} (#{spec.version})"
46
+ end
47
+ end
48
+
49
+ @app.call(env)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,149 @@
1
+ require "rubygems"
2
+ require "rubygems/user_interaction"
3
+ require "rubygems/uninstaller"
4
+ require "set"
5
+
6
+ require "log4r"
7
+
8
+ module VagrantPlugins
9
+ module CommandPlugin
10
+ module Action
11
+ # This class prunes any unnecessary gems from the Vagrant-managed
12
+ # gem folder. This keeps the gem folder to the absolute minimum set
13
+ # of required gems and doesn't let it blow up out of control.
14
+ #
15
+ # A high-level description of how this works:
16
+ #
17
+ # 1. Get the list of installed plugins. Vagrant maintains this
18
+ # list on its own.
19
+ # 2. Get the list of installed RubyGems.
20
+ # 3. Find the latest version of each RubyGem that matches an installed
21
+ # plugin. These are our root RubyGems that must be installed.
22
+ # 4. Go through each root and mark all dependencies recursively as
23
+ # necessary.
24
+ # 5. Set subtraction between all gems and necessary gems yields a
25
+ # list of gems that aren't needed. Uninstall them.
26
+ #
27
+ class PruneGems
28
+ def initialize(app, env)
29
+ @app = app
30
+ @logger = Log4r::Logger.new("vagrant::plugins::plugincommand::prune")
31
+ end
32
+
33
+ def call(env)
34
+ @logger.info("Pruning gems...")
35
+
36
+ # Get the list of installed plugins according to the state file
37
+ installed = Set.new(env[:plugin_state_file].installed_plugins)
38
+
39
+ # Get the actual specifications of installed gems
40
+ all_specs = env[:gem_helper].with_environment do
41
+ result = []
42
+ Gem::Specification.find_all { |s| result << s }
43
+ result
44
+ end
45
+
46
+ # The list of specs to prune initially starts out as all of them
47
+ all_specs = Set.new(all_specs)
48
+
49
+ # Go through each spec and find the latest version of the installed
50
+ # gems, since we want to keep those.
51
+ installed_specs = {}
52
+
53
+ @logger.debug("Collecting installed plugin gems...")
54
+ all_specs.each do |spec|
55
+ # If this isn't a spec that we claim is installed, skip it
56
+ next if !installed.include?(spec.name)
57
+
58
+ # If it is already in the specs, then we need to make sure we
59
+ # have the latest version.
60
+ if installed_specs.has_key?(spec.name)
61
+ if installed_specs[spec.name].version > spec.version
62
+ next
63
+ end
64
+ end
65
+
66
+ @logger.debug(" -- #{spec.name} (#{spec.version})")
67
+ installed_specs[spec.name] = spec
68
+ end
69
+
70
+ # Recursive dependency checker to keep all dependencies and remove
71
+ # all non-crucial gems from the prune list.
72
+ good_specs = Set.new
73
+ to_check = installed_specs.values
74
+
75
+ while true
76
+ # If we're out of gems to check then we break out
77
+ break if to_check.empty?
78
+
79
+ # Get a random (first) element to check
80
+ spec = to_check.shift
81
+
82
+ # If we already checked this, then do the next one
83
+ next if good_specs.include?(spec)
84
+
85
+ # Find all the dependencies and add the latest compliant gem
86
+ # to the `to_check` list.
87
+ if spec.dependencies.length > 0
88
+ @logger.debug("Finding dependencies for '#{spec.name}' to mark as good...")
89
+ spec.dependencies.each do |dep|
90
+ # Ignore non-runtime dependencies
91
+ next if dep.type != :runtime
92
+ @logger.debug("Searching for: '#{dep.name}'")
93
+
94
+ latest_matching = nil
95
+
96
+ all_specs.each do |prune_spec|
97
+ if dep =~ prune_spec
98
+ # If we have a matching one already and this one isn't newer
99
+ # then we ditch it.
100
+ next if latest_matching &&
101
+ prune_spec.version <= latest_matching.version
102
+
103
+ latest_matching = prune_spec
104
+ end
105
+ end
106
+
107
+ if latest_matching.nil?
108
+ @logger.error("Missing dependency for '#{spec.name}': #{dep.name}")
109
+ next
110
+ end
111
+
112
+ @logger.debug("Latest matching dep: '#{latest_matching.name}' (#{latest_matching.version})")
113
+ to_check << latest_matching
114
+ end
115
+ end
116
+
117
+ # Add ito the list of checked things so we don't accidentally
118
+ # re-check it
119
+ good_specs.add(spec)
120
+ end
121
+
122
+ # Figure out the gems we need to prune
123
+ prune_specs = all_specs - good_specs
124
+ @logger.debug("Gems to prune: #{prune_specs.inspect}")
125
+ @logger.info("Pruning #{prune_specs.length} gems.")
126
+
127
+ if prune_specs.length > 0
128
+ env[:gem_helper].with_environment do
129
+ prune_specs.each do |prune_spec|
130
+ uninstaller = Gem::Uninstaller.new(prune_spec.name, {
131
+ :all => true,
132
+ :executables => true,
133
+ :force => true,
134
+ :ignore => true,
135
+ :version => prune_spec.version.version
136
+ })
137
+
138
+ @logger.info("Uninstalling: #{prune_spec.name} (#{prune_spec.version})")
139
+ uninstaller.uninstall
140
+ end
141
+ end
142
+ end
143
+
144
+ @app.call(env)
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,23 @@
1
+ module VagrantPlugins
2
+ module CommandPlugin
3
+ module Action
4
+ # This middleware uninstalls a plugin by simply removing it from
5
+ # the state file. Running a {PruneGems} after should properly remove
6
+ # it from the gem index.
7
+ class UninstallPlugin
8
+ def initialize(app, env)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ # Remove it!
14
+ env[:ui].info(I18n.t("vagrant.commands.plugin.uninstalling",
15
+ :name => env[:plugin_name]))
16
+ env[:plugin_state_file].remove_plugin(env[:plugin_name])
17
+
18
+ @app.call(env)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,52 @@
1
+ require "pathname"
2
+
3
+ require "vagrant/action/builder"
4
+
5
+ module VagrantPlugins
6
+ module CommandPlugin
7
+ module Action
8
+ # This middleware sequence will install a plugin.
9
+ def self.action_install
10
+ Vagrant::Action::Builder.new.tap do |b|
11
+ b.use BundlerCheck
12
+ b.use InstallGem
13
+ b.use PruneGems
14
+ end
15
+ end
16
+
17
+ # This middleware sequence licenses paid addons.
18
+ def self.action_license
19
+ Vagrant::Action::Builder.new.tap do |b|
20
+ b.use BundlerCheck
21
+ b.use LicensePlugin
22
+ end
23
+ end
24
+
25
+ # This middleware sequence will list all installed plugins.
26
+ def self.action_list
27
+ Vagrant::Action::Builder.new.tap do |b|
28
+ b.use BundlerCheck
29
+ b.use ListPlugins
30
+ end
31
+ end
32
+
33
+ # This middleware sequence will uninstall a plugin.
34
+ def self.action_uninstall
35
+ Vagrant::Action::Builder.new.tap do |b|
36
+ b.use BundlerCheck
37
+ b.use UninstallPlugin
38
+ b.use PruneGems
39
+ end
40
+ end
41
+
42
+ # The autoload farm
43
+ action_root = Pathname.new(File.expand_path("../action", __FILE__))
44
+ autoload :BundlerCheck, action_root.join("bundler_check")
45
+ autoload :InstallGem, action_root.join("install_gem")
46
+ autoload :LicensePlugin, action_root.join("license_plugin")
47
+ autoload :ListPlugins, action_root.join("list_plugins")
48
+ autoload :PruneGems, action_root.join("prune_gems")
49
+ autoload :UninstallPlugin, action_root.join("uninstall_plugin")
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,22 @@
1
+ module VagrantPlugins
2
+ module CommandPlugin
3
+ module Command
4
+ class Base < Vagrant.plugin("2", :command)
5
+ # This is a helper for executing an action sequence with the proper
6
+ # environment hash setup so that the plugin specific helpers are
7
+ # in.
8
+ #
9
+ # @param [Object] callable the Middleware callable
10
+ # @param [Hash] env Extra environment hash that is merged in.
11
+ def action(callable, env=nil)
12
+ env = {
13
+ :gem_helper => GemHelper.new(@env.gems_path),
14
+ :plugin_state_file => StateFile.new(@env.home_path.join("plugins.json"))
15
+ }.merge(env || {})
16
+
17
+ @env.action_runner.run(callable, env)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,58 @@
1
+ require 'optparse'
2
+
3
+ require_relative "base"
4
+
5
+ module VagrantPlugins
6
+ module CommandPlugin
7
+ module Command
8
+ class Install < Base
9
+ def execute
10
+ options = {}
11
+
12
+ opts = OptionParser.new do |o|
13
+ o.banner = "Usage: vagrant plugin install <name> [-h]"
14
+ o.separator ""
15
+
16
+ o.on("--entry-point NAME", String,
17
+ "The name of the entry point file for loading the plugin.") do |entry_point|
18
+ options[:entry_point] = entry_point
19
+ end
20
+
21
+ o.on("--plugin-prerelease",
22
+ "Allow prerelease versions of this plugin.") do |plugin_prerelease|
23
+ options[:plugin_prerelease] = plugin_prerelease
24
+ end
25
+
26
+ o.on("--plugin-source PLUGIN_SOURCE", String,
27
+ "Add a RubyGems repository source") do |plugin_source|
28
+ options[:plugin_sources] ||= []
29
+ options[:plugin_sources] << plugin_source
30
+ end
31
+
32
+ o.on("--plugin-version PLUGIN_VERSION", String,
33
+ "Install a specific version of the plugin") do |plugin_version|
34
+ options[:plugin_version] = plugin_version
35
+ end
36
+ end
37
+
38
+ # Parse the options
39
+ argv = parse_options(opts)
40
+ return if !argv
41
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 1
42
+
43
+ # Install the gem
44
+ action(Action.action_install, {
45
+ :plugin_entry_point => options[:entry_point],
46
+ :plugin_prerelease => options[:plugin_prerelease],
47
+ :plugin_version => options[:plugin_version],
48
+ :plugin_sources => options[:plugin_sources],
49
+ :plugin_name => argv[0]
50
+ })
51
+
52
+ # Success, exit status 0
53
+ 0
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,31 @@
1
+ require 'optparse'
2
+
3
+ require_relative "base"
4
+
5
+ module VagrantPlugins
6
+ module CommandPlugin
7
+ module Command
8
+ class License < Base
9
+ def execute
10
+ opts = OptionParser.new do |o|
11
+ o.banner = "Usage: vagrant plugin license <name> <license-file> [-h]"
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
+ # License the plugin
20
+ action(Action.action_license, {
21
+ :plugin_license_path => argv[1],
22
+ :plugin_name => argv[0]
23
+ })
24
+
25
+ # Success, exit status 0
26
+ 0
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end