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,44 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module Kernel_V1
5
+ # This is the "kernel" of Vagrant and contains the configuration classes
6
+ # that make up the core of Vagrant.
7
+ class Plugin < Vagrant.plugin("1")
8
+ name "kernel"
9
+ description <<-DESC
10
+ The kernel of Vagrant. This plugin contains required items for even
11
+ basic functionality of Vagrant version 1.
12
+ DESC
13
+
14
+ # Core configuration keys provided by the kernel. Note that all
15
+ # the kernel configuration classes are marked as _upgrade safe_ (the
16
+ # true 2nd param). This means that these can be loaded in ANY version
17
+ # of the core of Vagrant.
18
+ config("ssh", true) do
19
+ require File.expand_path("../config/ssh", __FILE__)
20
+ SSHConfig
21
+ end
22
+
23
+ config("nfs", true) do
24
+ require File.expand_path("../config/nfs", __FILE__)
25
+ NFSConfig
26
+ end
27
+
28
+ config("package", true) do
29
+ require File.expand_path("../config/package", __FILE__)
30
+ PackageConfig
31
+ end
32
+
33
+ config("vagrant", true) do
34
+ require File.expand_path("../config/vagrant", __FILE__)
35
+ VagrantConfig
36
+ end
37
+
38
+ config("vm", true) do
39
+ require File.expand_path("../config/vm", __FILE__)
40
+ VMConfig
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,14 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module Kernel_V2
5
+ class NFSConfig < Vagrant.plugin("2", :config)
6
+ attr_accessor :map_uid
7
+ attr_accessor :map_gid
8
+
9
+ def to_s
10
+ "NFS"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module Kernel_V2
5
+ class PackageConfig < Vagrant.plugin("2", :config)
6
+ attr_accessor :name
7
+
8
+ def to_s
9
+ "Package"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,76 @@
1
+ require "vagrant"
2
+
3
+ require_relative "ssh_connect"
4
+
5
+ module VagrantPlugins
6
+ module Kernel_V2
7
+ class SSHConfig < SSHConnectConfig
8
+ attr_accessor :forward_agent
9
+ attr_accessor :forward_x11
10
+ attr_accessor :guest_port
11
+ attr_accessor :keep_alive
12
+ attr_accessor :max_tries
13
+ attr_accessor :shell
14
+ attr_accessor :timeout
15
+
16
+ attr_reader :default
17
+
18
+ def initialize
19
+ super
20
+
21
+ @forward_agent = UNSET_VALUE
22
+ @forward_x11 = UNSET_VALUE
23
+ @guest_port = UNSET_VALUE
24
+ @keep_alive = UNSET_VALUE
25
+ @max_tries = UNSET_VALUE
26
+ @shell = UNSET_VALUE
27
+ @timeout = UNSET_VALUE
28
+
29
+ @default = SSHConnectConfig.new
30
+ end
31
+
32
+ def merge(other)
33
+ super.tap do |result|
34
+ merged_defaults = @default.merge(other.default)
35
+ result.instance_variable_set(:@default, merged_defaults)
36
+ end
37
+ end
38
+
39
+ def finalize!
40
+ super
41
+
42
+ @forward_agent = false if @forward_agent == UNSET_VALUE
43
+ @forward_x11 = false if @forward_x11 == UNSET_VALUE
44
+ @guest_port = nil if @guest_port == UNSET_VALUE
45
+ @keep_alive = false if @keep_alive == UNSET_VALUE
46
+ @max_tries = nil if @max_tries == UNSET_VALUE
47
+ @shell = nil if @shell == UNSET_VALUE
48
+ @timeout = nil if @timeout == UNSET_VALUE
49
+
50
+ @default.finalize!
51
+ end
52
+
53
+ def to_s
54
+ "SSH"
55
+ end
56
+
57
+ def validate(machine)
58
+ errors = super
59
+
60
+ [:max_tries, :timeout].each do |field|
61
+ value = instance_variable_get("@#{field}".to_sym)
62
+ errors << I18n.t("vagrant.config.common.error_empty", :field => field) if !value
63
+ end
64
+
65
+ # Return the errors
66
+ result = { to_s => errors }
67
+
68
+ # Figure out the errors for the defaults
69
+ default_errors = @default.validate(machine)
70
+ result["SSH Defaults"] = default_errors if !default_errors.empty?
71
+
72
+ result
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,40 @@
1
+ module VagrantPlugins
2
+ module Kernel_V2
3
+ class SSHConnectConfig < Vagrant.plugin("2", :config)
4
+ attr_accessor :host
5
+ attr_accessor :port
6
+ attr_accessor :private_key_path
7
+ attr_accessor :username
8
+
9
+ def initialize
10
+ @host = UNSET_VALUE
11
+ @port = UNSET_VALUE
12
+ @private_key_path = UNSET_VALUE
13
+ @username = UNSET_VALUE
14
+ end
15
+
16
+ def finalize!
17
+ @host = nil if @host == UNSET_VALUE
18
+ @port = nil if @port == UNSET_VALUE
19
+ @private_key_path = nil if @private_key_path == UNSET_VALUE
20
+ @username = nil if @username == UNSET_VALUE
21
+ end
22
+
23
+ # NOTE: This is _not_ a valid config validation method, since it
24
+ # returns an _array_ of strings rather than a Hash. This is meant to
25
+ # be used with a subclass that handles this.
26
+ #
27
+ # @return [Array<String>]
28
+ def validate(machine)
29
+ errors = _detected_errors
30
+
31
+ if @private_key_path && \
32
+ !File.file?(File.expand_path(@private_key_path, machine.env.root_path))
33
+ errors << I18n.t("vagrant.config.ssh.private_key_missing", :path => @private_key_path)
34
+ end
35
+
36
+ errors
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,13 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module Kernel_V2
5
+ class VagrantConfig < Vagrant.plugin("2", :config)
6
+ attr_accessor :host
7
+
8
+ def to_s
9
+ "Vagrant"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,416 @@
1
+ require "pathname"
2
+ require "securerandom"
3
+ require "set"
4
+
5
+ require "vagrant"
6
+ require "vagrant/config/v2/util"
7
+
8
+ require File.expand_path("../vm_provisioner", __FILE__)
9
+ require File.expand_path("../vm_subvm", __FILE__)
10
+
11
+ module VagrantPlugins
12
+ module Kernel_V2
13
+ class VMConfig < Vagrant.plugin("2", :config)
14
+ DEFAULT_VM_NAME = :default
15
+
16
+ attr_accessor :base_mac
17
+ attr_accessor :box
18
+ attr_accessor :box_url
19
+ attr_accessor :graceful_halt_retry_count
20
+ attr_accessor :graceful_halt_retry_interval
21
+ attr_accessor :guest
22
+ attr_accessor :hostname
23
+ attr_accessor :usable_port_range
24
+ attr_reader :provisioners
25
+
26
+ def initialize
27
+ @graceful_halt_retry_count = UNSET_VALUE
28
+ @graceful_halt_retry_interval = UNSET_VALUE
29
+ @hostname = UNSET_VALUE
30
+ @provisioners = []
31
+
32
+ # Internal state
33
+ @__compiled_provider_configs = {}
34
+ @__defined_vm_keys = []
35
+ @__defined_vms = {}
36
+ @__finalized = false
37
+ @__networks = {}
38
+ @__providers = {}
39
+ @__provider_overrides = {}
40
+ @__synced_folders = {}
41
+ end
42
+
43
+ # Custom merge method since some keys here are merged differently.
44
+ def merge(other)
45
+ super.tap do |result|
46
+ other_networks = other.instance_variable_get(:@__networks)
47
+
48
+ result.instance_variable_set(:@__networks, @__networks.merge(other_networks))
49
+ result.instance_variable_set(:@provisioners, @provisioners + other.provisioners)
50
+
51
+ # Merge defined VMs by first merging the defined VM keys,
52
+ # preserving the order in which they were defined.
53
+ other_defined_vm_keys = other.instance_variable_get(:@__defined_vm_keys)
54
+ other_defined_vm_keys -= @__defined_vm_keys
55
+ new_defined_vm_keys = @__defined_vm_keys + other_defined_vm_keys
56
+
57
+ # Merge the actual defined VMs.
58
+ other_defined_vms = other.instance_variable_get(:@__defined_vms)
59
+ new_defined_vms = {}
60
+
61
+ @__defined_vms.each do |key, subvm|
62
+ new_defined_vms[key] = subvm.clone
63
+ end
64
+
65
+ other_defined_vms.each do |key, subvm|
66
+ if !new_defined_vms.has_key?(key)
67
+ new_defined_vms[key] = subvm.clone
68
+ else
69
+ new_defined_vms[key].config_procs.concat(subvm.config_procs)
70
+ new_defined_vms[key].options.merge!(subvm.options)
71
+ end
72
+ end
73
+
74
+ # Merge the providers by prepending any configuration blocks we
75
+ # have for providers onto the new configuration.
76
+ other_providers = other.instance_variable_get(:@__providers)
77
+ new_providers = @__providers.dup
78
+ other_providers.each do |key, blocks|
79
+ new_providers[key] ||= []
80
+ new_providers[key] += blocks
81
+ end
82
+
83
+ # Merge the provider overrides by appending them...
84
+ other_overrides = other.instance_variable_get(:@__provider_overrides)
85
+ new_overrides = @__provider_overrides.dup
86
+ other_overrides.each do |key, blocks|
87
+ new_overrides[key] ||= []
88
+ new_overrides[key] += blocks
89
+ end
90
+
91
+ # Merge synced folders.
92
+ other_folders = other.instance_variable_get(:@__synced_folders)
93
+ new_folders = @__synced_folders.dup
94
+ other_folders.each do |id, options|
95
+ new_folders[id] ||= {}
96
+ new_folders[id].merge!(options)
97
+ end
98
+
99
+ result.instance_variable_set(:@__defined_vm_keys, new_defined_vm_keys)
100
+ result.instance_variable_set(:@__defined_vms, new_defined_vms)
101
+ result.instance_variable_set(:@__providers, new_providers)
102
+ result.instance_variable_set(:@__provider_overrides, new_overrides)
103
+ result.instance_variable_set(:@__synced_folders, new_folders)
104
+ end
105
+ end
106
+
107
+ # Defines a synced folder pair. This pair of folders will be synced
108
+ # to/from the machine. Note that if the machine you're using doesn't
109
+ # support multi-directional syncing (perhaps an rsync backed synced
110
+ # folder) then the host is always synced to the guest but guest data
111
+ # may not be synced back to the host.
112
+ #
113
+ # @param [String] hostpath Path to the host folder to share. If this
114
+ # is a relative path, it is relative to the location of the
115
+ # Vagrantfile.
116
+ # @param [String] guestpath Path on the guest to mount the shared
117
+ # folder.
118
+ # @param [Hash] options Additional options.
119
+ def synced_folder(hostpath, guestpath, options=nil)
120
+ options ||= {}
121
+ options[:guestpath] = guestpath.to_s.gsub(/\/$/, '')
122
+ options[:hostpath] = hostpath
123
+
124
+ @__synced_folders[options[:guestpath]] = options
125
+ end
126
+
127
+ # Define a way to access the machine via a network. This exposes a
128
+ # high-level abstraction for networking that may not directly map
129
+ # 1-to-1 for every provider. For example, AWS has no equivalent to
130
+ # "port forwarding." But most providers will attempt to implement this
131
+ # in a way that behaves similarly.
132
+ #
133
+ # `type` can be one of:
134
+ #
135
+ # * `:forwarded_port` - A port that is accessible via localhost
136
+ # that forwards into the machine.
137
+ # * `:private_network` - The machine gets an IP that is not directly
138
+ # publicly accessible, but ideally accessible from this machine.
139
+ # * `:public_network` - The machine gets an IP on a shared network.
140
+ #
141
+ # @param [Symbol] type Type of network
142
+ # @param [Hash] options Options for the network.
143
+ def network(type, options=nil)
144
+ options ||= {}
145
+
146
+ if !options[:id]
147
+ default_id = nil
148
+
149
+ if type == :forwarded_port
150
+ # For forwarded ports, set the default ID to the
151
+ # host port so that host ports overwrite each other.
152
+ default_id = options[:host]
153
+ end
154
+
155
+ options[:id] = default_id || SecureRandom.uuid
156
+ end
157
+
158
+ # Scope the ID by type so that different types can share IDs
159
+ id = options[:id]
160
+ id = "#{type}-#{id}"
161
+
162
+ # Merge in the previous settings if we have them.
163
+ if @__networks.has_key?(id)
164
+ options = @__networks[id][1].merge(options)
165
+ end
166
+
167
+ # Merge in the latest settings and set the internal state
168
+ @__networks[id] = [type.to_sym, options]
169
+ end
170
+
171
+ # Configures a provider for this VM.
172
+ #
173
+ # @param [Symbol] name The name of the provider.
174
+ def provider(name, &block)
175
+ name = name.to_sym
176
+ @__providers[name] ||= []
177
+ @__provider_overrides[name] ||= []
178
+
179
+ if block_given?
180
+ @__providers[name] << block if block_given?
181
+
182
+ # If this block takes two arguments, then we curry it and store
183
+ # the configuration override for use later.
184
+ if block.arity == 2
185
+ @__provider_overrides[name] << block.curry[Vagrant::Config::V2::DummyConfig.new]
186
+ end
187
+ end
188
+ end
189
+
190
+ def provision(name, options=nil, &block)
191
+ @provisioners << VagrantConfigProvisioner.new(name.to_sym, options, &block)
192
+ end
193
+
194
+ def defined_vms
195
+ @__defined_vms
196
+ end
197
+
198
+ # This returns the keys of the sub-vms in the order they were
199
+ # defined.
200
+ def defined_vm_keys
201
+ @__defined_vm_keys
202
+ end
203
+
204
+ def define(name, options=nil, &block)
205
+ name = name.to_sym
206
+ options ||= {}
207
+ options[:config_version] ||= "2"
208
+
209
+ # Add the name to the array of VM keys. This array is used to
210
+ # preserve the order in which VMs are defined.
211
+ @__defined_vm_keys << name if !@__defined_vm_keys.include?(name)
212
+
213
+ # Add the SubVM to the hash of defined VMs
214
+ if !@__defined_vms[name]
215
+ @__defined_vms[name] = VagrantConfigSubVM.new
216
+ end
217
+
218
+ @__defined_vms[name].options.merge!(options)
219
+ @__defined_vms[name].config_procs << [options[:config_version], block] if block
220
+ end
221
+
222
+ #-------------------------------------------------------------------
223
+ # Internal methods, don't call these.
224
+ #-------------------------------------------------------------------
225
+
226
+ def finalize!
227
+ # Defaults
228
+ @hostname = nil if @hostname == UNSET_VALUE
229
+
230
+ # If we haven't defined a single VM, then we need to define a
231
+ # default VM which just inherits the rest of the configuration.
232
+ define(DEFAULT_VM_NAME) if defined_vm_keys.empty?
233
+
234
+ # Compile all the provider configurations
235
+ @__providers.each do |name, blocks|
236
+ # If we don't have any configuration blocks, then ignore it
237
+ next if blocks.empty?
238
+
239
+ # Find the configuration class for this provider
240
+ config_class = Vagrant.plugin("2").manager.provider_configs[name]
241
+ config_class ||= Vagrant::Config::V2::DummyConfig
242
+
243
+ # Load it up
244
+ config = config_class.new
245
+
246
+ blocks.each do |b|
247
+ b.call(config, Vagrant::Config::V2::DummyConfig.new)
248
+ end
249
+
250
+ config.finalize!
251
+
252
+ # Store it for retrieval later
253
+ @__compiled_provider_configs[name] = config
254
+ end
255
+
256
+ # Flag that we finalized
257
+ @__finalized = true
258
+ end
259
+
260
+ # This returns the compiled provider-specific configurationf or the
261
+ # given provider.
262
+ #
263
+ # @param [Symbol] name Name of the provider.
264
+ def get_provider_config(name)
265
+ raise "Must finalize first." if !@__finalized
266
+
267
+ result = @__compiled_provider_configs[name]
268
+
269
+ # If no compiled configuration was found, then we try to just
270
+ # use the default configuration from the plugin.
271
+ if !result
272
+ config_class = Vagrant.plugin("2").manager.provider_configs[name]
273
+ if config_class
274
+ result = config_class.new
275
+ result.finalize!
276
+ end
277
+ end
278
+
279
+ return result
280
+ end
281
+
282
+ # This returns a list of VM configurations that are overrides
283
+ # for this provider.
284
+ #
285
+ # @param [Symbol] name Name of the provider
286
+ # @return [Array<Proc>]
287
+ def get_provider_overrides(name)
288
+ (@__provider_overrides[name] || []).map do |p|
289
+ ["2", p]
290
+ end
291
+ end
292
+
293
+ # This returns the list of networks configured.
294
+ def networks
295
+ @__networks.values
296
+ end
297
+
298
+ # This returns the list of synced folders
299
+ def synced_folders
300
+ @__synced_folders
301
+ end
302
+
303
+ def validate(machine)
304
+ errors = _detected_errors
305
+ errors << I18n.t("vagrant.config.vm.box_missing") if !box
306
+ errors << I18n.t("vagrant.config.vm.box_not_found", :name => box) if \
307
+ box && !box_url && !machine.box
308
+ errors << I18n.t("vagrant.config.vm.hostname_invalid_characters") if \
309
+ @hostname && @hostname !~ /^[-.a-z0-9]+$/i
310
+
311
+ has_nfs = false
312
+ used_guest_paths = Set.new
313
+ @__synced_folders.each do |id, options|
314
+ # If the shared folder is disabled then don't worry about validating it
315
+ next if options[:disabled]
316
+
317
+ guestpath = Pathname.new(options[:guestpath])
318
+ hostpath = Pathname.new(options[:hostpath]).expand_path(machine.env.root_path)
319
+
320
+ if guestpath.relative?
321
+ errors << I18n.t("vagrant.config.vm.shared_folder_guestpath_relative",
322
+ :path => options[:guestpath])
323
+ else
324
+ if used_guest_paths.include?(options[:guestpath])
325
+ errors << I18n.t("vagrant.config.vm.shared_folder_guestpath_duplicate",
326
+ :path => options[:guestpath])
327
+ end
328
+
329
+ used_guest_paths.add(options[:guestpath])
330
+ end
331
+
332
+ if !hostpath.directory? && !options[:create]
333
+ errors << I18n.t("vagrant.config.vm.shared_folder_hostpath_missing",
334
+ :path => options[:hostpath])
335
+ end
336
+
337
+ if options[:nfs]
338
+ has_nfs = true
339
+
340
+ if options[:owner] || options[:group]
341
+ # Owner/group don't work with NFS
342
+ errors << I18n.t("vagrant.config.vm.shared_folder_nfs_owner_group",
343
+ :path => options[:hostpath])
344
+ end
345
+ end
346
+ end
347
+
348
+ if has_nfs
349
+ if !machine.env.host
350
+ errors << I18n.t("vagrant.config.vm.nfs_requires_host")
351
+ else
352
+ errors << I18n.t("vagrant.config.vm.nfs_not_supported") if \
353
+ !machine.env.host.nfs?
354
+ end
355
+ end
356
+
357
+ # Validate networks
358
+ has_fp_port_error = false
359
+ fp_host_ports = Set.new
360
+ valid_network_types = [:forwarded_port, :private_network, :public_network]
361
+
362
+ networks.each do |type, options|
363
+ if !valid_network_types.include?(type)
364
+ errors << I18n.t("vagrant.config.vm.network_type_invalid",
365
+ :type => type.to_s)
366
+ end
367
+
368
+ if type == :forwarded_port
369
+ if !has_fp_port_error && (!options[:guest] || !options[:host])
370
+ errors << I18n.t("vagrant.config.vm.network_fp_requires_ports")
371
+ has_fp_port_error = true
372
+ end
373
+
374
+ if options[:host]
375
+ if fp_host_ports.include?(options[:host])
376
+ errors << I18n.t("vagrant.config.vm.network_fp_host_not_unique",
377
+ :host => options[:host].to_s)
378
+ end
379
+
380
+ fp_host_ports.add(options[:host])
381
+ end
382
+ end
383
+ end
384
+
385
+ # We're done with VM level errors so prepare the section
386
+ errors = { "vm" => errors }
387
+
388
+ # Validate only the _active_ provider
389
+ if machine.provider_config
390
+ provider_errors = machine.provider_config.validate(machine)
391
+ if provider_errors
392
+ errors = Vagrant::Config::V2::Util.merge_errors(errors, provider_errors)
393
+ end
394
+ end
395
+
396
+ # Validate provisioners
397
+ @provisioners.each do |vm_provisioner|
398
+ if vm_provisioner.invalid?
399
+ errors["vm"] << I18n.t("vagrant.config.vm.provisioner_not_found",
400
+ :name => vm_provisioner.name)
401
+ next
402
+ end
403
+
404
+ if vm_provisioner.config
405
+ provisioner_errors = vm_provisioner.config.validate(machine)
406
+ if provisioner_errors
407
+ errors = Vagrant::Config::V2::Util.merge_errors(errors, provisioner_errors)
408
+ end
409
+ end
410
+ end
411
+
412
+ errors
413
+ end
414
+ end
415
+ end
416
+ end
@@ -0,0 +1,55 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Kernel_V2
5
+ # Represents a single configured provisioner for a VM.
6
+ class VagrantConfigProvisioner
7
+ # The name of the provisioner that should be registered
8
+ # as a plugin.
9
+ #
10
+ # @return [Symbol]
11
+ attr_reader :name
12
+
13
+ # The configuration associated with the provisioner, if there is any.
14
+ #
15
+ # @return [Object]
16
+ attr_reader :config
17
+
18
+ def initialize(name, options=nil, &block)
19
+ @logger = Log4r::Logger.new("vagrant::config::vm::provisioner")
20
+ @logger.debug("Provisioner defined: #{name}")
21
+
22
+ @config = nil
23
+ @invalid = false
24
+ @name = name
25
+
26
+ # Attempt to find the provisioner...
27
+ if !Vagrant.plugin("2").manager.provisioners[name]
28
+ @logger.warn("Provisioner '#{name}' not found.")
29
+ @invalid = true
30
+ end
31
+
32
+ # Attempt to find the configuration class for this provider
33
+ # if it exists and load the configuration.
34
+ config_class = Vagrant.plugin("2").manager.provisioner_configs[@name]
35
+ if !config_class
36
+ @logger.info("Provisioner config for '#{@name}' not found. Ignoring config.")
37
+ return
38
+ end
39
+
40
+ @config = config_class.new
41
+ @config.set_options(options) if options
42
+ block.call(@config) if block
43
+ @config.finalize!
44
+ end
45
+
46
+ # Returns whether the provisioner used was invalid or not. A provisioner
47
+ # is invalid if it can't be found.
48
+ #
49
+ # @return [Boolean]
50
+ def invalid?
51
+ @invalid
52
+ end
53
+ end
54
+ end
55
+ end