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,169 @@
1
+ require 'log4r'
2
+
3
+ require "vagrant/util/safe_puts"
4
+
5
+ module Vagrant
6
+ module Plugin
7
+ module V1
8
+ # This is the base class for a CLI command.
9
+ class Command
10
+ include Util::SafePuts
11
+
12
+ def initialize(argv, env)
13
+ @argv = argv
14
+ @env = env
15
+ @logger = Log4r::Logger.new("vagrant::command::#{self.class.to_s.downcase}")
16
+ end
17
+
18
+ # This is what is called on the class to actually execute it. Any
19
+ # subclasses should implement this method and do any option parsing
20
+ # and validation here.
21
+ def execute
22
+ end
23
+
24
+ protected
25
+
26
+ # Parses the options given an OptionParser instance.
27
+ #
28
+ # This is a convenience method that properly handles duping the
29
+ # originally argv array so that it is not destroyed.
30
+ #
31
+ # This method will also automatically detect "-h" and "--help"
32
+ # and print help. And if any invalid options are detected, the help
33
+ # will be printed, as well.
34
+ #
35
+ # If this method returns `nil`, then you should assume that help
36
+ # was printed and parsing failed.
37
+ def parse_options(opts=nil)
38
+ # Creating a shallow copy of the arguments so the OptionParser
39
+ # doesn't destroy the originals.
40
+ argv = @argv.dup
41
+
42
+ # Default opts to a blank optionparser if none is given
43
+ opts ||= OptionParser.new
44
+
45
+ # Add the help option, which must be on every command.
46
+ opts.on_tail("-h", "--help", "Print this help") do
47
+ safe_puts(opts.help)
48
+ return nil
49
+ end
50
+
51
+ opts.parse!(argv)
52
+ return argv
53
+ rescue OptionParser::InvalidOption
54
+ raise Errors::CLIInvalidOptions, :help => opts.help.chomp
55
+ end
56
+
57
+ # Yields a VM for each target VM for the command.
58
+ #
59
+ # This is a convenience method for easily implementing methods that
60
+ # take a target VM (in the case of multi-VM) or every VM if no
61
+ # specific VM name is specified.
62
+ #
63
+ # @param [String] name The name of the VM. Nil if every VM.
64
+ # @param [Boolean] single_target If true, then an exception will be
65
+ # raised if more than one target is found.
66
+ def with_target_vms(names=nil, options=nil)
67
+ # Using VMs requires a Vagrant environment to be properly setup
68
+ raise Errors::NoEnvironmentError if !@env.root_path
69
+
70
+ # Setup the options hash
71
+ options ||= {}
72
+
73
+ # Require that names be an array
74
+ names ||= []
75
+ names = [names] if !names.is_a?(Array)
76
+
77
+ # First determine the proper array of VMs.
78
+ vms = []
79
+ if names.length > 0
80
+ names.each do |name|
81
+ if pattern = name[/^\/(.+?)\/$/, 1]
82
+ # This is a regular expression name, so we convert to a regular
83
+ # expression and allow that sort of matching.
84
+ regex = Regexp.new(pattern)
85
+
86
+ @env.vms.each do |name, vm|
87
+ vms << vm if name =~ regex
88
+ end
89
+
90
+ raise Errors::VMNoMatchError if vms.empty?
91
+ else
92
+ # String name, just look for a specific VM
93
+ vms << @env.vms[name.to_sym]
94
+ raise Errors::VMNotFoundError, :name => name if !vms[0]
95
+ end
96
+ end
97
+ else
98
+ vms = @env.vms_ordered
99
+ end
100
+
101
+ # Make sure we're only working with one VM if single target
102
+ if options[:single_target] && vms.length != 1
103
+ vm = @env.primary_vm
104
+ raise Errors::MultiVMTargetRequired if !vm
105
+ vms = [vm]
106
+ end
107
+
108
+ # If we asked for reversed ordering, then reverse it
109
+ vms.reverse! if options[:reverse]
110
+
111
+ # Go through each VM and yield it!
112
+ vms.each do |old_vm|
113
+ # We get a new VM from the environment here to avoid potentially
114
+ # stale VMs (if there was a config reload on the environment
115
+ # or something).
116
+ vm = @env.vms[old_vm.name]
117
+ yield vm
118
+ end
119
+ end
120
+
121
+ # This method will split the argv given into three parts: the
122
+ # flags to this command, the subcommand, and the flags to the
123
+ # subcommand. For example:
124
+ #
125
+ # -v status -h -v
126
+ #
127
+ # The above would yield 3 parts:
128
+ #
129
+ # ["-v"]
130
+ # "status"
131
+ # ["-h", "-v"]
132
+ #
133
+ # These parts are useful because the first is a list of arguments
134
+ # given to the current command, the second is a subcommand, and the
135
+ # third are the commands given to the subcommand.
136
+ #
137
+ # @return [Array] The three parts.
138
+ def split_main_and_subcommand(argv)
139
+ # Initialize return variables
140
+ main_args = nil
141
+ sub_command = nil
142
+ sub_args = []
143
+
144
+ # We split the arguments into two: One set containing any
145
+ # flags before a word, and then the rest. The rest are what
146
+ # get actually sent on to the subcommand.
147
+ argv.each_index do |i|
148
+ if !argv[i].start_with?("-")
149
+ # We found the beginning of the sub command. Split the
150
+ # args up.
151
+ main_args = argv[0, i]
152
+ sub_command = argv[i]
153
+ sub_args = argv[i + 1, argv.length - i + 1]
154
+
155
+ # Break so we don't find the next non flag and shift our
156
+ # main args.
157
+ break
158
+ end
159
+ end
160
+
161
+ # Handle the case that argv was empty or didn't contain any subcommand
162
+ main_args = argv.dup if main_args.nil?
163
+
164
+ return [main_args, sub_command, sub_args]
165
+ end
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,98 @@
1
+ module Vagrant
2
+ module Plugin
3
+ module V1
4
+ # Base class for a communicator in Vagrant. A communicator is
5
+ # responsible for communicating with a machine in some way. There
6
+ # are various stages of Vagrant that require things such as uploading
7
+ # files to the machine, executing shell commands, etc. Implementors
8
+ # of this class are expected to provide this functionality in some
9
+ # way.
10
+ #
11
+ # Note that a communicator must provide **all** of the methods
12
+ # in this base class. There is currently no way for one communicator
13
+ # to provide say a more efficient way of uploading a file, but not
14
+ # provide shell execution. This sort of thing will come in a future
15
+ # version.
16
+ class Communicator
17
+ # This returns true/false depending on if the given machine
18
+ # can be communicated with using this communicator. If this returns
19
+ # `true`, then this class will be used as the primary communication
20
+ # method for the machine.
21
+ #
22
+ # @return [Boolean]
23
+ def self.match?(machine)
24
+ false
25
+ end
26
+
27
+ # Initializes the communicator with the machine that we will be
28
+ # communicating with. This base method does nothing (it doesn't
29
+ # even store the machine in an instance variable for you), so you're
30
+ # expected to override this and do something with the machine if
31
+ # you care about it.
32
+ #
33
+ # @param [Machine] machine The machine this instance is expected to
34
+ # communicate with.
35
+ def initialize(machine)
36
+ end
37
+
38
+ # Checks if the target machine is ready for communication. If this
39
+ # returns true, then all the other methods for communicating with
40
+ # the machine are expected to be functional.
41
+ #
42
+ # @return [Boolean]
43
+ def ready?
44
+ false
45
+ end
46
+
47
+ # Download a file from the remote machine to the local machine.
48
+ #
49
+ # @param [String] from Path of the file on the remote machine.
50
+ # @param [String] to Path of where to save the file locally.
51
+ def download(from, to)
52
+ end
53
+
54
+ # Upload a file to the remote machine.
55
+ #
56
+ # @param [String] from Path of the file locally to upload.
57
+ # @param [String] to Path of where to save the file on the remote
58
+ # machine.
59
+ def upload(from, to)
60
+ end
61
+
62
+ # Execute a command on the remote machine. The exact semantics
63
+ # of this method are up to the implementor, but in general the
64
+ # users of this class will expect this to be a shell.
65
+ #
66
+ # This method gives you no way to write data back to the remote
67
+ # machine, so only execute commands that don't expect input.
68
+ #
69
+ # @param [String] command Command to execute.
70
+ # @yield [type, data] Realtime output of the command being executed.
71
+ # @yieldparam [String] type Type of the output. This can be
72
+ # `:stdout`, `:stderr`, etc. The exact types are up to the
73
+ # implementor.
74
+ # @yieldparam [String] data Data for the given output.
75
+ # @return [Integer] Exit code of the command.
76
+ def execute(command, opts=nil)
77
+ end
78
+
79
+ # Executes a command on the remote machine with administrative
80
+ # privileges. See {#execute} for documentation, as the API is the
81
+ # same.
82
+ #
83
+ # @see #execute
84
+ def sudo(command, opts=nil)
85
+ end
86
+
87
+ # Executes a command and returns true if the command succeeded,
88
+ # and false otherwise. By default, this executes as a normal user,
89
+ # and it is up to the communicator implementation if they expose an
90
+ # option for running tests as an administrator.
91
+ #
92
+ # @see #execute
93
+ def test(command, opts=nil)
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,112 @@
1
+ module Vagrant
2
+ module Plugin
3
+ module V1
4
+ # This is the base class for a configuration key defined for
5
+ # V1. Any configuration key plugins for V1 should inherit from this
6
+ # class.
7
+ class Config
8
+ # This constant represents an unset value. This is useful so it is
9
+ # possible to know the difference between a configuration value that
10
+ # was never set, and a value that is nil (explicitly). Best practice
11
+ # is to initialize all variables to this value, then the {#merge}
12
+ # method below will "just work" in many cases.
13
+ UNSET_VALUE = Object.new
14
+
15
+ # This is called as a last-minute hook that allows the configuration
16
+ # object to finalize itself before it will be put into use. This is
17
+ # a useful place to do some defaults in the case the user didn't
18
+ # configure something or so on.
19
+ #
20
+ # An example of where this sort of thing is used or has been used:
21
+ # the "vm" configuration key uses this to make sure that at least
22
+ # one sub-VM has been defined: the default VM.
23
+ #
24
+ # The configuration object is expected to mutate itself.
25
+ def finalize!
26
+ # Default implementation is to do nothing.
27
+ end
28
+
29
+ # Merge another configuration object into this one. This assumes that
30
+ # the other object is the same class as this one. This should not
31
+ # mutate this object, but instead should return a new, merged object.
32
+ #
33
+ # The default implementation will simply iterate over the instance
34
+ # variables and merge them together, with this object overriding
35
+ # any conflicting instance variables of the older object. Instance
36
+ # variables starting with "__" (double underscores) will be ignored.
37
+ # This lets you set some sort of instance-specific state on your
38
+ # configuration keys without them being merged together later.
39
+ #
40
+ # @param [Object] other The other configuration object to merge from,
41
+ # this must be the same type of object as this one.
42
+ # @return [Object] The merged object.
43
+ def merge(other)
44
+ result = self.class.new
45
+
46
+ # Set all of our instance variables on the new class
47
+ [self, other].each do |obj|
48
+ obj.instance_variables.each do |key|
49
+ # Ignore keys that start with a double underscore. This allows
50
+ # configuration classes to still hold around internal state
51
+ # that isn't propagated.
52
+ if !key.to_s.start_with?("@__")
53
+ result.instance_variable_set(key, obj.instance_variable_get(key))
54
+ end
55
+ end
56
+ end
57
+
58
+ result
59
+ end
60
+
61
+ # Allows setting options from a hash. By default this simply calls
62
+ # the `#{key}=` method on the config class with the value, which is
63
+ # the expected behavior most of the time.
64
+ #
65
+ # This is expected to mutate itself.
66
+ #
67
+ # @param [Hash] options A hash of options to set on this configuration
68
+ # key.
69
+ def set_options(options)
70
+ options.each do |key, value|
71
+ send("#{key}=", value)
72
+ end
73
+ end
74
+
75
+ # Converts this configuration object to JSON.
76
+ def to_json(*a)
77
+ instance_variables_hash.to_json(*a)
78
+ end
79
+
80
+ # Returns the instance variables as a hash of key-value pairs.
81
+ def instance_variables_hash
82
+ instance_variables.inject({}) do |acc, iv|
83
+ acc[iv.to_s[1..-1]] = instance_variable_get(iv)
84
+ acc
85
+ end
86
+ end
87
+
88
+ # This is called to upgrade this V1 config to V2. The parameter given
89
+ # is the full V2 configuration object, so you can do anything to it
90
+ # that you want.
91
+ #
92
+ # No return value is expected, modifications should be made directly
93
+ # to the new V2 object.
94
+ #
95
+ # @param [V2::Root] new
96
+ def upgrade(new)
97
+ end
98
+
99
+ # Called after the configuration is finalized and loaded to validate
100
+ # this object.
101
+ #
102
+ # @param [Environment] env Vagrant::Environment object of the
103
+ # environment that this configuration has been loaded into. This
104
+ # gives you convenient access to things like the the root path
105
+ # and so on.
106
+ # @param [ErrorRecorder] errors
107
+ def validate(env, errors)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,15 @@
1
+ # This file contains all the errors that the V1 plugin interface
2
+ # may throw.
3
+
4
+ module Vagrant
5
+ module Plugin
6
+ module V1
7
+ # Exceptions that can be thrown within the plugin interface all
8
+ # inherit from this parent exception.
9
+ class Error < StandardError; end
10
+
11
+ # This is thrown when a command name given is invalid.
12
+ class InvalidCommandName < Error; end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,92 @@
1
+ module Vagrant
2
+ module Plugin
3
+ module V1
4
+ # The base class for a guest. A guest represents an installed system
5
+ # within a machine that Vagrant manages. There are some portions of
6
+ # Vagrant which are OS-specific such as mountaing shared folders and
7
+ # halting the machine, and this abstraction allows the implementation
8
+ # for these to be seperate from the core of Vagrant.
9
+ class Guest
10
+ class BaseError < Errors::VagrantError
11
+ error_namespace("vagrant.guest.base")
12
+ end
13
+
14
+ include Vagrant::Util
15
+
16
+ # The VM which this system is tied to.
17
+ attr_reader :vm
18
+
19
+ # Initializes the system. Any subclasses MUST make sure this
20
+ # method is called on the parent. Therefore, if a subclass overrides
21
+ # `initialize`, then you must call `super`.
22
+ def initialize(vm)
23
+ @vm = vm
24
+ end
25
+
26
+ # This method is automatically called when the system is available (when
27
+ # Vagrant can successfully SSH into the machine) to give the system a chance
28
+ # to determine the distro and return a distro-specific system.
29
+ #
30
+ # If this method returns nil, then this instance is assumed to be
31
+ # the most specific guest implementation.
32
+ def distro_dispatch
33
+ end
34
+
35
+ # Halt the machine. This method should gracefully shut down the
36
+ # operating system. This method will cause `vagrant halt` and associated
37
+ # commands to _block_, meaning that if the machine doesn't halt
38
+ # in a reasonable amount of time, this method should just return.
39
+ #
40
+ # If when this method returns, the machine's state isn't "powered_off,"
41
+ # Vagrant will proceed to forcefully shut the machine down.
42
+ def halt
43
+ raise BaseError, :_key => :unsupported_halt
44
+ end
45
+
46
+ # Mounts a shared folder.
47
+ #
48
+ # This method should create, mount, and properly set permissions
49
+ # on the shared folder. This method should also properly
50
+ # adhere to any configuration values such as `shared_folder_uid`
51
+ # on `config.vm`.
52
+ #
53
+ # @param [String] name The name of the shared folder.
54
+ # @param [String] guestpath The path on the machine which the user
55
+ # wants the folder mounted.
56
+ # @param [Hash] options Additional options for the shared folder
57
+ # which can be honored.
58
+ def mount_shared_folder(name, guestpath, options)
59
+ raise BaseError, :_key => :unsupported_shared_folder
60
+ end
61
+
62
+ # Mounts a shared folder via NFS. This assumes that the exports
63
+ # via the host are already done.
64
+ def mount_nfs(ip, folders)
65
+ raise BaseError, :_key => :unsupported_nfs
66
+ end
67
+
68
+ # Configures the given list of networks on the virtual machine.
69
+ #
70
+ # The networks parameter will be an array of hashes where the hashes
71
+ # represent the configuration of a network interface. The structure
72
+ # of the hash will be roughly the following:
73
+ #
74
+ # {
75
+ # :type => :static,
76
+ # :ip => "192.168.33.10",
77
+ # :netmask => "255.255.255.0",
78
+ # :interface => 1
79
+ # }
80
+ #
81
+ def configure_networks(networks)
82
+ raise BaseError, :_key => :unsupported_configure_networks
83
+ end
84
+
85
+ # Called to change the hostname of the virtual machine.
86
+ def change_host_name(name)
87
+ raise BaseError, :_key => :unsupported_host_name
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,66 @@
1
+ module Vagrant
2
+ module Plugin
3
+ module V1
4
+ # Base class for a host in Vagrant. A host class contains functionality
5
+ # that is specific to a specific OS that is running Vagrant. This
6
+ # abstraction is done becauase there is some host-specific logic that
7
+ # Vagrant must do in some cases.
8
+ class Host
9
+ # This returns true/false depending on if the current running system
10
+ # matches the host class.
11
+ #
12
+ # @return [Boolean]
13
+ def self.match?
14
+ nil
15
+ end
16
+
17
+ # The precedence of the host when checking for matches. This is to
18
+ # allow certain host such as generic OS's ("Linux", "BSD", etc.)
19
+ # to be specified last.
20
+ #
21
+ # The hosts with the higher numbers will be checked first.
22
+ #
23
+ # If you're implementing a basic host, you can probably ignore this.
24
+ def self.precedence
25
+ 5
26
+ end
27
+
28
+ # Initializes a new host class.
29
+ #
30
+ # The only required parameter is a UI object so that the host
31
+ # objects have some way to communicate with the outside world.
32
+ #
33
+ # @param [UI] ui UI for the hosts to output to.
34
+ def initialize(ui)
35
+ @ui = ui
36
+ end
37
+
38
+ # Returns true of false denoting whether or not this host supports
39
+ # NFS shared folder setup. This method ideally should verify that
40
+ # NFS is installed.
41
+ #
42
+ # @return [Boolean]
43
+ def nfs?
44
+ false
45
+ end
46
+
47
+ # Exports the given hash of folders via NFS.
48
+ #
49
+ # @param [String] id A unique ID that is guaranteed to be unique to
50
+ # match these sets of folders.
51
+ # @param [String] ip IP of the guest machine.
52
+ # @param [Hash] folders Shared folders to sync.
53
+ def nfs_export(id, ip, folders)
54
+ end
55
+
56
+ # Prunes any NFS exports made by Vagrant which aren't in the set
57
+ # of valid ids given.
58
+ #
59
+ # @param [Array<String>] valid_ids Valid IDs that should not be
60
+ # pruned.
61
+ def nfs_prune(valid_ids)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,131 @@
1
+ require "log4r"
2
+
3
+ module Vagrant
4
+ module Plugin
5
+ module V1
6
+ # This class maintains a list of all the registered plugins as well
7
+ # as provides methods that allow querying all registered components of
8
+ # those plugins as a single unit.
9
+ class Manager
10
+ attr_reader :registered
11
+
12
+ def initialize
13
+ @logger = Log4r::Logger.new("vagrant::plugin::v1::manager")
14
+ @registered = []
15
+ end
16
+
17
+ # This returns all the registered communicators.
18
+ #
19
+ # @return [Hash]
20
+ def communicators
21
+ result = {}
22
+
23
+ @registered.each do |plugin|
24
+ result.merge!(plugin.communicator.to_hash)
25
+ end
26
+
27
+ result
28
+ end
29
+
30
+ # This returns all the registered configuration classes.
31
+ #
32
+ # @return [Hash]
33
+ def config
34
+ result = {}
35
+
36
+ @registered.each do |plugin|
37
+ plugin.config.each do |key, klass|
38
+ result[key] = klass
39
+ end
40
+ end
41
+
42
+ result
43
+ end
44
+
45
+ # This returns all the registered configuration classes that were
46
+ # marked as "upgrade safe."
47
+ #
48
+ # @return [Hash]
49
+ def config_upgrade_safe
50
+ result = {}
51
+
52
+ @registered.each do |plugin|
53
+ configs = plugin.data[:config_upgrade_safe]
54
+ if configs
55
+ configs.each do |key|
56
+ result[key] = plugin.config.get(key)
57
+ end
58
+ end
59
+ end
60
+
61
+ result
62
+ end
63
+
64
+ # This returns all the registered guests.
65
+ #
66
+ # @return [Hash]
67
+ def guests
68
+ result = {}
69
+
70
+ @registered.each do |plugin|
71
+ result.merge!(plugin.guest.to_hash)
72
+ end
73
+
74
+ result
75
+ end
76
+
77
+ # This returns all registered host classes.
78
+ #
79
+ # @return [Hash]
80
+ def hosts
81
+ hosts = {}
82
+
83
+ @registered.each do |plugin|
84
+ hosts.merge!(plugin.host.to_hash)
85
+ end
86
+
87
+ hosts
88
+ end
89
+
90
+ # This returns all registered providers.
91
+ #
92
+ # @return [Hash]
93
+ def providers
94
+ providers = {}
95
+
96
+ @registered.each do |plugin|
97
+ providers.merge!(plugin.provider.to_hash)
98
+ end
99
+
100
+ providers
101
+ end
102
+
103
+ # This registers a plugin. This should _NEVER_ be called by the public
104
+ # and should only be called from within Vagrant. Vagrant will
105
+ # automatically register V1 plugins when a name is set on the
106
+ # plugin.
107
+ def register(plugin)
108
+ if !@registered.include?(plugin)
109
+ @logger.info("Registered plugin: #{plugin.name}")
110
+ @registered << plugin
111
+ end
112
+ end
113
+
114
+ # This clears out all the registered plugins. This is only used by
115
+ # unit tests and should not be called directly.
116
+ def reset!
117
+ @registered.clear
118
+ end
119
+
120
+ # This unregisters a plugin so that its components will no longer
121
+ # be used. Note that this should only be used for testing purposes.
122
+ def unregister(plugin)
123
+ if @registered.include?(plugin)
124
+ @logger.info("Unregistered: #{plugin.name}")
125
+ @registered.delete(plugin)
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end