tnargav 1.3.5 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (478) hide show
  1. data/lib/vagrant/action.rb +45 -0
  2. data/lib/vagrant/action/builder.rb +174 -0
  3. data/lib/vagrant/action/builtin/box_add.rb +92 -0
  4. data/lib/vagrant/action/builtin/call.rb +67 -0
  5. data/lib/vagrant/action/builtin/config_validate.rb +30 -0
  6. data/lib/vagrant/action/builtin/confirm.rb +39 -0
  7. data/lib/vagrant/action/builtin/destroy_confirm.rb +21 -0
  8. data/lib/vagrant/action/builtin/env_set.rb +24 -0
  9. data/lib/vagrant/action/builtin/graceful_halt.rb +82 -0
  10. data/lib/vagrant/action/builtin/handle_box_url.rb +86 -0
  11. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +134 -0
  12. data/lib/vagrant/action/builtin/lock.rb +57 -0
  13. data/lib/vagrant/action/builtin/mixin_provisioners.rb +43 -0
  14. data/lib/vagrant/action/builtin/nfs.rb +128 -0
  15. data/lib/vagrant/action/builtin/provision.rb +79 -0
  16. data/lib/vagrant/action/builtin/provisioner_cleanup.rb +35 -0
  17. data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
  18. data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
  19. data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
  20. data/lib/vagrant/action/builtin/wait_for_communicator.rb +84 -0
  21. data/lib/vagrant/action/general/package.rb +103 -0
  22. data/lib/vagrant/action/hook.rb +107 -0
  23. data/lib/vagrant/action/runner.rb +69 -0
  24. data/lib/vagrant/action/warden.rb +104 -0
  25. data/lib/vagrant/batch_action.rb +113 -0
  26. data/lib/vagrant/box.rb +97 -0
  27. data/lib/vagrant/box_collection.rb +393 -0
  28. data/lib/vagrant/cli.rb +74 -0
  29. data/lib/vagrant/config.rb +61 -0
  30. data/lib/vagrant/config/loader.rb +222 -0
  31. data/lib/vagrant/config/v1.rb +9 -0
  32. data/lib/vagrant/config/v1/dummy_config.rb +13 -0
  33. data/lib/vagrant/config/v1/loader.rb +105 -0
  34. data/lib/vagrant/config/v1/root.rb +60 -0
  35. data/lib/vagrant/config/v2.rb +9 -0
  36. data/lib/vagrant/config/v2/dummy_config.rb +13 -0
  37. data/lib/vagrant/config/v2/loader.rb +141 -0
  38. data/lib/vagrant/config/v2/root.rb +111 -0
  39. data/lib/vagrant/config/v2/util.rb +21 -0
  40. data/lib/vagrant/config/version_base.rb +80 -0
  41. data/lib/vagrant/environment.rb +819 -0
  42. data/lib/vagrant/errors.rb +614 -0
  43. data/lib/vagrant/guest.rb +172 -0
  44. data/lib/vagrant/hosts.rb +28 -0
  45. data/lib/vagrant/machine.rb +319 -0
  46. data/lib/vagrant/machine_state.rb +45 -0
  47. data/lib/vagrant/plugin.rb +6 -0
  48. data/lib/vagrant/plugin/v1.rb +19 -0
  49. data/lib/vagrant/plugin/v1/command.rb +169 -0
  50. data/lib/vagrant/plugin/v1/communicator.rb +98 -0
  51. data/lib/vagrant/plugin/v1/config.rb +112 -0
  52. data/lib/vagrant/plugin/v1/errors.rb +15 -0
  53. data/lib/vagrant/plugin/v1/guest.rb +92 -0
  54. data/lib/vagrant/plugin/v1/host.rb +66 -0
  55. data/lib/vagrant/plugin/v1/manager.rb +131 -0
  56. data/lib/vagrant/plugin/v1/plugin.rb +229 -0
  57. data/lib/vagrant/plugin/v1/provider.rb +68 -0
  58. data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
  59. data/lib/vagrant/plugin/v2.rb +22 -0
  60. data/lib/vagrant/plugin/v2/command.rb +237 -0
  61. data/lib/vagrant/plugin/v2/communicator.rb +119 -0
  62. data/lib/vagrant/plugin/v2/components.rb +47 -0
  63. data/lib/vagrant/plugin/v2/config.rb +136 -0
  64. data/lib/vagrant/plugin/v2/errors.rb +15 -0
  65. data/lib/vagrant/plugin/v2/guest.rb +23 -0
  66. data/lib/vagrant/plugin/v2/host.rb +66 -0
  67. data/lib/vagrant/plugin/v2/manager.rb +173 -0
  68. data/lib/vagrant/plugin/v2/plugin.rb +226 -0
  69. data/lib/vagrant/plugin/v2/provider.rb +69 -0
  70. data/lib/vagrant/plugin/v2/provisioner.rb +53 -0
  71. data/lib/vagrant/registry.rb +78 -0
  72. data/lib/vagrant/ui.rb +215 -0
  73. data/lib/vagrant/util.rb +12 -0
  74. data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
  75. data/lib/vagrant/util/busy.rb +59 -0
  76. data/lib/vagrant/util/counter.rb +24 -0
  77. data/lib/vagrant/util/downloader.rb +151 -0
  78. data/lib/vagrant/util/file_checksum.rb +38 -0
  79. data/lib/vagrant/util/file_mode.rb +12 -0
  80. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  81. data/lib/vagrant/util/is_port_open.rb +38 -0
  82. data/lib/vagrant/util/line_ending_helpers.rb +14 -0
  83. data/lib/vagrant/util/network_ip.rb +28 -0
  84. data/lib/vagrant/util/platform.rb +101 -0
  85. data/lib/vagrant/util/retryable.rb +31 -0
  86. data/lib/vagrant/util/safe_chdir.rb +33 -0
  87. data/lib/vagrant/util/safe_exec.rb +36 -0
  88. data/lib/vagrant/util/safe_puts.rb +31 -0
  89. data/lib/vagrant/util/scoped_hash_override.rb +45 -0
  90. data/lib/vagrant/util/ssh.rb +155 -0
  91. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  92. data/lib/vagrant/util/string_block_editor.rb +77 -0
  93. data/lib/vagrant/util/subprocess.rb +294 -0
  94. data/lib/vagrant/util/template_renderer.rb +83 -0
  95. data/lib/vagrant/util/which.rb +43 -0
  96. data/lib/vagrant/version.rb +6 -0
  97. data/plugins/commands/box/command/add.rb +51 -0
  98. data/plugins/commands/box/command/list.rb +41 -0
  99. data/plugins/commands/box/command/remove.rb +57 -0
  100. data/plugins/commands/box/command/repackage.rb +43 -0
  101. data/plugins/commands/box/command/root.rb +75 -0
  102. data/plugins/commands/box/plugin.rb +15 -0
  103. data/plugins/commands/destroy/command.rb +36 -0
  104. data/plugins/commands/destroy/plugin.rb +18 -0
  105. data/plugins/commands/halt/command.rb +33 -0
  106. data/plugins/commands/halt/plugin.rb +18 -0
  107. data/plugins/commands/help/command.rb +12 -0
  108. data/plugins/commands/help/plugin.rb +17 -0
  109. data/plugins/commands/init/command.rb +40 -0
  110. data/plugins/commands/init/plugin.rb +18 -0
  111. data/plugins/commands/package/command.rb +83 -0
  112. data/plugins/commands/package/plugin.rb +18 -0
  113. data/plugins/commands/plugin/action.rb +63 -0
  114. data/plugins/commands/plugin/action/bundler_check.rb +25 -0
  115. data/plugins/commands/plugin/action/install_gem.rb +106 -0
  116. data/plugins/commands/plugin/action/license_plugin.rb +54 -0
  117. data/plugins/commands/plugin/action/list_plugins.rb +54 -0
  118. data/plugins/commands/plugin/action/plugin_exists_check.rb +26 -0
  119. data/plugins/commands/plugin/action/prune_gems.rb +149 -0
  120. data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
  121. data/plugins/commands/plugin/command/base.rb +22 -0
  122. data/plugins/commands/plugin/command/install.rb +41 -0
  123. data/plugins/commands/plugin/command/license.rb +31 -0
  124. data/plugins/commands/plugin/command/list.rb +28 -0
  125. data/plugins/commands/plugin/command/mixin_install_opts.rb +30 -0
  126. data/plugins/commands/plugin/command/root.rb +80 -0
  127. data/plugins/commands/plugin/command/uninstall.rb +28 -0
  128. data/plugins/commands/plugin/command/update.rb +41 -0
  129. data/plugins/commands/plugin/gem_helper.rb +74 -0
  130. data/plugins/commands/plugin/plugin.rb +22 -0
  131. data/plugins/commands/plugin/state_file.rb +57 -0
  132. data/plugins/commands/provision/command.rb +34 -0
  133. data/plugins/commands/provision/plugin.rb +18 -0
  134. data/plugins/commands/reload/command.rb +41 -0
  135. data/plugins/commands/reload/plugin.rb +18 -0
  136. data/plugins/commands/resume/command.rb +25 -0
  137. data/plugins/commands/resume/plugin.rb +17 -0
  138. data/plugins/commands/ssh/command.rb +63 -0
  139. data/plugins/commands/ssh/plugin.rb +17 -0
  140. data/plugins/commands/ssh_config/command.rb +49 -0
  141. data/plugins/commands/ssh_config/plugin.rb +18 -0
  142. data/plugins/commands/status/command.rb +44 -0
  143. data/plugins/commands/status/plugin.rb +18 -0
  144. data/plugins/commands/suspend/command.rb +25 -0
  145. data/plugins/commands/suspend/plugin.rb +18 -0
  146. data/plugins/commands/up/command.rb +67 -0
  147. data/plugins/commands/up/plugin.rb +17 -0
  148. data/plugins/commands/up/start_mixins.rb +37 -0
  149. data/plugins/communicators/ssh/communicator.rb +400 -0
  150. data/plugins/communicators/ssh/plugin.rb +19 -0
  151. data/plugins/guests/arch/cap/change_host_name.rb +17 -0
  152. data/plugins/guests/arch/cap/configure_networks.rb +30 -0
  153. data/plugins/guests/arch/guest.rb +11 -0
  154. data/plugins/guests/arch/plugin.rb +25 -0
  155. data/plugins/guests/coreos/cap/change_host_name.rb +15 -0
  156. data/plugins/guests/coreos/cap/configure_networks.rb +72 -0
  157. data/plugins/guests/coreos/guest.rb +9 -0
  158. data/plugins/guests/coreos/plugin.rb +25 -0
  159. data/plugins/guests/darwin/cap/change_host_name.rb +14 -0
  160. data/plugins/guests/darwin/cap/configure_networks.rb +52 -0
  161. data/plugins/guests/darwin/cap/halt.rb +16 -0
  162. data/plugins/guests/darwin/cap/mount_nfs_folder.rb +25 -0
  163. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +36 -0
  164. data/plugins/guests/darwin/cap/shell_expand_guest_path.rb +26 -0
  165. data/plugins/guests/darwin/cap/verify_vmware_hgfs.rb +12 -0
  166. data/plugins/guests/darwin/guest.rb +15 -0
  167. data/plugins/guests/darwin/plugin.rb +50 -0
  168. data/plugins/guests/debian/cap/change_host_name.rb +19 -0
  169. data/plugins/guests/debian/cap/configure_networks.rb +61 -0
  170. data/plugins/guests/debian/guest.rb +9 -0
  171. data/plugins/guests/debian/plugin.rb +25 -0
  172. data/plugins/guests/fedora/cap/configure_networks.rb +59 -0
  173. data/plugins/guests/fedora/cap/network_scripts_dir.rb +15 -0
  174. data/plugins/guests/fedora/guest.rb +11 -0
  175. data/plugins/guests/fedora/plugin.rb +25 -0
  176. data/plugins/guests/freebsd/cap/change_host_name.rb +14 -0
  177. data/plugins/guests/freebsd/cap/configure_networks.rb +39 -0
  178. data/plugins/guests/freebsd/cap/halt.rb +16 -0
  179. data/plugins/guests/freebsd/cap/mount_nfs_folder.rb +14 -0
  180. data/plugins/guests/freebsd/guest.rb +14 -0
  181. data/plugins/guests/freebsd/plugin.rb +35 -0
  182. data/plugins/guests/gentoo/cap/change_host_name.rb +17 -0
  183. data/plugins/guests/gentoo/cap/configure_networks.rb +43 -0
  184. data/plugins/guests/gentoo/guest.rb +9 -0
  185. data/plugins/guests/gentoo/plugin.rb +25 -0
  186. data/plugins/guests/linux/cap/halt.rb +16 -0
  187. data/plugins/guests/linux/cap/mount_nfs.rb +38 -0
  188. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +59 -0
  189. data/plugins/guests/linux/cap/read_ip_address.rb +17 -0
  190. data/plugins/guests/linux/cap/shell_expand_guest_path.rb +29 -0
  191. data/plugins/guests/linux/guest.rb +11 -0
  192. data/plugins/guests/linux/plugin.rb +40 -0
  193. data/plugins/guests/omnios/cap/change_host_name.rb +17 -0
  194. data/plugins/guests/omnios/guest.rb +11 -0
  195. data/plugins/guests/omnios/plugin.rb +20 -0
  196. data/plugins/guests/openbsd/cap/change_host_name.rb +14 -0
  197. data/plugins/guests/openbsd/cap/configure_networks.rb +40 -0
  198. data/plugins/guests/openbsd/cap/halt.rb +16 -0
  199. data/plugins/guests/openbsd/cap/mount_nfs_folder.rb +14 -0
  200. data/plugins/guests/openbsd/guest.rb +11 -0
  201. data/plugins/guests/openbsd/plugin.rb +35 -0
  202. data/plugins/guests/pld/cap/network_scripts_dir.rb +11 -0
  203. data/plugins/guests/pld/guest.rb +11 -0
  204. data/plugins/guests/pld/plugin.rb +20 -0
  205. data/plugins/guests/redhat/cap/change_host_name.rb +18 -0
  206. data/plugins/guests/redhat/cap/configure_networks.rb +60 -0
  207. data/plugins/guests/redhat/cap/network_scripts_dir.rb +11 -0
  208. data/plugins/guests/redhat/guest.rb +11 -0
  209. data/plugins/guests/redhat/plugin.rb +30 -0
  210. data/plugins/guests/solaris/cap/change_host_name.rb +17 -0
  211. data/plugins/guests/solaris/cap/configure_networks.rb +25 -0
  212. data/plugins/guests/solaris/cap/halt.rb +22 -0
  213. data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +31 -0
  214. data/plugins/guests/solaris/config.rb +18 -0
  215. data/plugins/guests/solaris/guest.rb +14 -0
  216. data/plugins/guests/solaris/plugin.rb +40 -0
  217. data/plugins/guests/solaris11/cap/change_host_name.rb +25 -0
  218. data/plugins/guests/solaris11/cap/configure_networks.rb +32 -0
  219. data/plugins/guests/solaris11/cap/halt.rb +26 -0
  220. data/plugins/guests/solaris11/cap/mount_virtualbox_shared_folder.rb +35 -0
  221. data/plugins/guests/solaris11/config.rb +22 -0
  222. data/plugins/guests/solaris11/guest.rb +15 -0
  223. data/plugins/guests/solaris11/plugin.rb +44 -0
  224. data/plugins/guests/suse/cap/change_host_name.rb +18 -0
  225. data/plugins/guests/suse/cap/configure_networks.rb +60 -0
  226. data/plugins/guests/suse/cap/network_scripts_dir.rb +11 -0
  227. data/plugins/guests/suse/guest.rb +11 -0
  228. data/plugins/guests/suse/plugin.rb +30 -0
  229. data/plugins/guests/ubuntu/cap/change_host_name.rb +24 -0
  230. data/plugins/guests/ubuntu/cap/mount_nfs.rb +19 -0
  231. data/plugins/guests/ubuntu/cap/mount_virtualbox_shared_folder.rb +14 -0
  232. data/plugins/guests/ubuntu/guest.rb +13 -0
  233. data/plugins/guests/ubuntu/plugin.rb +30 -0
  234. data/plugins/hosts/arch/host.rb +45 -0
  235. data/plugins/hosts/arch/plugin.rb +15 -0
  236. data/plugins/hosts/bsd/host.rb +178 -0
  237. data/plugins/hosts/bsd/plugin.rb +15 -0
  238. data/plugins/hosts/fedora/host.rb +57 -0
  239. data/plugins/hosts/fedora/plugin.rb +15 -0
  240. data/plugins/hosts/freebsd/host.rb +43 -0
  241. data/plugins/hosts/freebsd/plugin.rb +15 -0
  242. data/plugins/hosts/gentoo/host.rb +26 -0
  243. data/plugins/hosts/gentoo/plugin.rb +15 -0
  244. data/plugins/hosts/linux/host.rb +128 -0
  245. data/plugins/hosts/linux/plugin.rb +15 -0
  246. data/plugins/hosts/opensuse/host.rb +36 -0
  247. data/plugins/hosts/opensuse/plugin.rb +15 -0
  248. data/plugins/hosts/slackware/host.rb +26 -0
  249. data/plugins/hosts/slackware/plugin.rb +15 -0
  250. data/plugins/hosts/windows/host.rb +17 -0
  251. data/plugins/hosts/windows/plugin.rb +15 -0
  252. data/plugins/kernel_v1/config/nfs.rb +20 -0
  253. data/plugins/kernel_v1/config/package.rb +17 -0
  254. data/plugins/kernel_v1/config/ssh.rb +46 -0
  255. data/plugins/kernel_v1/config/vagrant.rb +31 -0
  256. data/plugins/kernel_v1/config/vm.rb +187 -0
  257. data/plugins/kernel_v1/plugin.rb +44 -0
  258. data/plugins/kernel_v2/config/nfs.rb +14 -0
  259. data/plugins/kernel_v2/config/package.rb +13 -0
  260. data/plugins/kernel_v2/config/ssh.rb +68 -0
  261. data/plugins/kernel_v2/config/ssh_connect.rb +40 -0
  262. data/plugins/kernel_v2/config/vagrant.rb +13 -0
  263. data/plugins/kernel_v2/config/vm.rb +486 -0
  264. data/plugins/kernel_v2/config/vm_provisioner.rb +55 -0
  265. data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
  266. data/plugins/kernel_v2/plugin.rb +44 -0
  267. data/plugins/providers/virtualbox/action.rb +324 -0
  268. data/plugins/providers/virtualbox/action/boot.rb +23 -0
  269. data/plugins/providers/virtualbox/action/check_accessible.rb +23 -0
  270. data/plugins/providers/virtualbox/action/check_created.rb +21 -0
  271. data/plugins/providers/virtualbox/action/check_guest_additions.rb +45 -0
  272. data/plugins/providers/virtualbox/action/check_running.rb +21 -0
  273. data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
  274. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +43 -0
  275. data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +18 -0
  276. data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +31 -0
  277. data/plugins/providers/virtualbox/action/clear_shared_folders.rb +17 -0
  278. data/plugins/providers/virtualbox/action/created.rb +20 -0
  279. data/plugins/providers/virtualbox/action/customize.rb +43 -0
  280. data/plugins/providers/virtualbox/action/destroy.rb +19 -0
  281. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +23 -0
  282. data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
  283. data/plugins/providers/virtualbox/action/export.rb +57 -0
  284. data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
  285. data/plugins/providers/virtualbox/action/forward_ports.rb +89 -0
  286. data/plugins/providers/virtualbox/action/import.rb +54 -0
  287. data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
  288. data/plugins/providers/virtualbox/action/is_running.rb +20 -0
  289. data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
  290. data/plugins/providers/virtualbox/action/match_mac_address.rb +21 -0
  291. data/plugins/providers/virtualbox/action/message_already_running.rb +16 -0
  292. data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
  293. data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
  294. data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
  295. data/plugins/providers/virtualbox/action/network.rb +424 -0
  296. data/plugins/providers/virtualbox/action/package.rb +20 -0
  297. data/plugins/providers/virtualbox/action/package_vagrantfile.rb +33 -0
  298. data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
  299. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +69 -0
  300. data/plugins/providers/virtualbox/action/prune_nfs_exports.rb +20 -0
  301. data/plugins/providers/virtualbox/action/resume.rb +25 -0
  302. data/plugins/providers/virtualbox/action/sane_defaults.rb +91 -0
  303. data/plugins/providers/virtualbox/action/set_name.rb +52 -0
  304. data/plugins/providers/virtualbox/action/setup_package_files.rb +51 -0
  305. data/plugins/providers/virtualbox/action/share_folders.rb +128 -0
  306. data/plugins/providers/virtualbox/action/suspend.rb +20 -0
  307. data/plugins/providers/virtualbox/config.rb +123 -0
  308. data/plugins/providers/virtualbox/driver/base.rb +374 -0
  309. data/plugins/providers/virtualbox/driver/meta.rb +148 -0
  310. data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
  311. data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
  312. data/plugins/providers/virtualbox/driver/version_4_2.rb +499 -0
  313. data/plugins/providers/virtualbox/model/forwarded_port.rb +70 -0
  314. data/plugins/providers/virtualbox/plugin.rb +42 -0
  315. data/plugins/providers/virtualbox/provider.rb +92 -0
  316. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +35 -0
  317. data/plugins/provisioners/ansible/config.rb +89 -0
  318. data/plugins/provisioners/ansible/plugin.rb +23 -0
  319. data/plugins/provisioners/ansible/provisioner.rb +100 -0
  320. data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +19 -0
  321. data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +14 -0
  322. data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +34 -0
  323. data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +24 -0
  324. data/plugins/provisioners/cfengine/config.rb +126 -0
  325. data/plugins/provisioners/cfengine/plugin.rb +42 -0
  326. data/plugins/provisioners/cfengine/provisioner.rb +135 -0
  327. data/plugins/provisioners/chef/config/base.rb +116 -0
  328. data/plugins/provisioners/chef/config/chef_client.rb +66 -0
  329. data/plugins/provisioners/chef/config/chef_solo.rb +94 -0
  330. data/plugins/provisioners/chef/plugin.rb +33 -0
  331. data/plugins/provisioners/chef/provisioner/base.rb +113 -0
  332. data/plugins/provisioners/chef/provisioner/chef_client.rb +126 -0
  333. data/plugins/provisioners/chef/provisioner/chef_solo.rb +195 -0
  334. data/plugins/provisioners/file/config.rb +29 -0
  335. data/plugins/provisioners/file/plugin.rb +23 -0
  336. data/plugins/provisioners/file/provisioner.rb +16 -0
  337. data/plugins/provisioners/puppet/config/puppet.rb +93 -0
  338. data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
  339. data/plugins/provisioners/puppet/plugin.rb +33 -0
  340. data/plugins/provisioners/puppet/provisioner/puppet.rb +146 -0
  341. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +74 -0
  342. data/plugins/provisioners/salt/bootstrap-salt.sh +6 -0
  343. data/plugins/provisioners/salt/config.rb +105 -0
  344. data/plugins/provisioners/salt/errors.rb +11 -0
  345. data/plugins/provisioners/salt/plugin.rb +22 -0
  346. data/plugins/provisioners/salt/provisioner.rb +249 -0
  347. data/plugins/provisioners/shell/config.rb +65 -0
  348. data/plugins/provisioners/shell/plugin.rb +23 -0
  349. data/plugins/provisioners/shell/provisioner.rb +98 -0
  350. data/templates/commands/init/Vagrantfile.erb +118 -0
  351. data/templates/commands/ssh_config/config.erb +20 -0
  352. data/templates/config/messages.erb +14 -0
  353. data/templates/config/validation_failed.erb +7 -0
  354. data/templates/guests/arch/network_dhcp.erb +4 -0
  355. data/templates/guests/arch/network_static.erb +5 -0
  356. data/templates/guests/coreos/etcd.service.erb +10 -0
  357. data/templates/guests/debian/network_dhcp.erb +11 -0
  358. data/templates/guests/debian/network_static.erb +7 -0
  359. data/templates/guests/fedora/network_dhcp.erb +6 -0
  360. data/templates/guests/fedora/network_static.erb +12 -0
  361. data/templates/guests/freebsd/network_dhcp.erb +3 -0
  362. data/templates/guests/freebsd/network_static.erb +3 -0
  363. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  364. data/templates/guests/gentoo/network_static.erb +4 -0
  365. data/templates/guests/openbsd/network_dhcp.erb +1 -0
  366. data/templates/guests/openbsd/network_static.erb +1 -0
  367. data/templates/guests/redhat/network_dhcp.erb +6 -0
  368. data/templates/guests/redhat/network_static.erb +8 -0
  369. data/templates/guests/suse/network_dhcp.erb +6 -0
  370. data/templates/guests/suse/network_static.erb +10 -0
  371. data/templates/locales/en.yml +1248 -0
  372. data/templates/nfs/exports.erb +5 -0
  373. data/templates/nfs/exports_freebsd.erb +5 -0
  374. data/templates/nfs/exports_linux.erb +7 -0
  375. data/templates/provisioners/chef_client/client.erb +41 -0
  376. data/templates/provisioners/chef_solo/solo.erb +45 -0
  377. data/test/acceptance/base.rb +48 -0
  378. data/test/acceptance/box_test.rb +99 -0
  379. data/test/acceptance/destroy_test.rb +37 -0
  380. data/test/acceptance/halt_test.rb +72 -0
  381. data/test/acceptance/init_test.rb +33 -0
  382. data/test/acceptance/networking/host_only_test.rb +37 -0
  383. data/test/acceptance/networking/port_forward_test.rb +125 -0
  384. data/test/acceptance/package_test.rb +46 -0
  385. data/test/acceptance/provisioning/basic_test.rb +61 -0
  386. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  387. data/test/acceptance/provisioning/shell_test.rb +53 -0
  388. data/test/acceptance/resume_test.rb +17 -0
  389. data/test/acceptance/shared_folders_test.rb +84 -0
  390. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  391. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  392. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  393. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  394. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  395. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  396. data/test/acceptance/ssh_test.rb +46 -0
  397. data/test/acceptance/support/config.rb +42 -0
  398. data/test/acceptance/support/isolated_environment.rb +118 -0
  399. data/test/acceptance/support/matchers/have_color.rb +9 -0
  400. data/test/acceptance/support/matchers/match_output.rb +14 -0
  401. data/test/acceptance/support/matchers/succeed.rb +14 -0
  402. data/test/acceptance/support/network_tests.rb +29 -0
  403. data/test/acceptance/support/output.rb +95 -0
  404. data/test/acceptance/support/shared/base_context.rb +72 -0
  405. data/test/acceptance/support/shared/command_examples.rb +33 -0
  406. data/test/acceptance/support/virtualbox.rb +36 -0
  407. data/test/acceptance/suspend_test.rb +56 -0
  408. data/test/acceptance/up_basic_test.rb +33 -0
  409. data/test/acceptance/up_with_box_url.rb +40 -0
  410. data/test/acceptance/vagrant_test.rb +47 -0
  411. data/test/acceptance/version_test.rb +15 -0
  412. data/test/config/acceptance_boxes.yml +7 -0
  413. data/test/support/isolated_environment.rb +46 -0
  414. data/test/support/tempdir.rb +43 -0
  415. data/test/unit/base.rb +27 -0
  416. data/test/unit/support/dummy_provider.rb +16 -0
  417. data/test/unit/support/isolated_environment.rb +179 -0
  418. data/test/unit/support/shared/base_context.rb +104 -0
  419. data/test/unit/vagrant/action/builder_test.rb +242 -0
  420. data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
  421. data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
  422. data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
  423. data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +60 -0
  424. data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
  425. data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
  426. data/test/unit/vagrant/action/hook_test.rb +120 -0
  427. data/test/unit/vagrant/action/runner_test.rb +71 -0
  428. data/test/unit/vagrant/action/warden_test.rb +92 -0
  429. data/test/unit/vagrant/batch_action_test.rb +36 -0
  430. data/test/unit/vagrant/box_collection_test.rb +237 -0
  431. data/test/unit/vagrant/box_test.rb +122 -0
  432. data/test/unit/vagrant/cli_test.rb +28 -0
  433. data/test/unit/vagrant/config/loader_test.rb +184 -0
  434. data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
  435. data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
  436. data/test/unit/vagrant/config/v1/root_test.rb +40 -0
  437. data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
  438. data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
  439. data/test/unit/vagrant/config/v2/root_test.rb +115 -0
  440. data/test/unit/vagrant/config/v2/util_test.rb +21 -0
  441. data/test/unit/vagrant/config_test.rb +66 -0
  442. data/test/unit/vagrant/environment_test.rb +746 -0
  443. data/test/unit/vagrant/guest_test.rb +179 -0
  444. data/test/unit/vagrant/hosts_test.rb +37 -0
  445. data/test/unit/vagrant/machine_state_test.rb +26 -0
  446. data/test/unit/vagrant/machine_test.rb +384 -0
  447. data/test/unit/vagrant/plugin/v1/command_test.rb +143 -0
  448. data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
  449. data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
  450. data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
  451. data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
  452. data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
  453. data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
  454. data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
  455. data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
  456. data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
  457. data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
  458. data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
  459. data/test/unit/vagrant/plugin/v2/manager_test.rb +174 -0
  460. data/test/unit/vagrant/plugin/v2/plugin_test.rb +305 -0
  461. data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
  462. data/test/unit/vagrant/registry_test.rb +128 -0
  463. data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
  464. data/test/unit/vagrant/util/downloader_test.rb +57 -0
  465. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  466. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
  467. data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
  468. data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
  469. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  470. data/test/unit/vagrant/util/retryable_test.rb +106 -0
  471. data/test/unit/vagrant/util/safe_chdir_test.rb +43 -0
  472. data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
  473. data/test/unit/vagrant/util/ssh_test.rb +30 -0
  474. data/test/unit/vagrant/util/string_block_editor_test.rb +106 -0
  475. data/test/unit/vagrant/util/which_test.rb +43 -0
  476. data/test/unit/vagrant_test.rb +74 -0
  477. data/tnargav.gemspec +1 -1
  478. metadata +477 -1
@@ -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,68 @@
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 :shell
13
+ attr_accessor :proxy_command
14
+
15
+ attr_reader :default
16
+
17
+ def initialize
18
+ super
19
+
20
+ @forward_agent = UNSET_VALUE
21
+ @forward_x11 = UNSET_VALUE
22
+ @guest_port = UNSET_VALUE
23
+ @keep_alive = UNSET_VALUE
24
+ @proxy_command = UNSET_VALUE
25
+ @shell = UNSET_VALUE
26
+
27
+ @default = SSHConnectConfig.new
28
+ end
29
+
30
+ def merge(other)
31
+ super.tap do |result|
32
+ merged_defaults = @default.merge(other.default)
33
+ result.instance_variable_set(:@default, merged_defaults)
34
+ end
35
+ end
36
+
37
+ def finalize!
38
+ super
39
+
40
+ @forward_agent = false if @forward_agent == UNSET_VALUE
41
+ @forward_x11 = false if @forward_x11 == UNSET_VALUE
42
+ @guest_port = nil if @guest_port == UNSET_VALUE
43
+ @keep_alive = false if @keep_alive == UNSET_VALUE
44
+ @proxy_command = nil if @proxy_command == UNSET_VALUE
45
+ @shell = nil if @shell == UNSET_VALUE
46
+
47
+ @default.finalize!
48
+ end
49
+
50
+ def to_s
51
+ "SSH"
52
+ end
53
+
54
+ def validate(machine)
55
+ errors = super
56
+
57
+ # Return the errors
58
+ result = { to_s => errors }
59
+
60
+ # Figure out the errors for the defaults
61
+ default_errors = @default.validate(machine)
62
+ result["SSH Defaults"] = default_errors if !default_errors.empty?
63
+
64
+ result
65
+ end
66
+ end
67
+ end
68
+ 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,486 @@
1
+ require "pathname"
2
+ require "securerandom"
3
+ require "set"
4
+
5
+ require "vagrant"
6
+ require "vagrant/config/v2/util"
7
+ require "vagrant/util/platform"
8
+
9
+ require File.expand_path("../vm_provisioner", __FILE__)
10
+ require File.expand_path("../vm_subvm", __FILE__)
11
+
12
+ module VagrantPlugins
13
+ module Kernel_V2
14
+ class VMConfig < Vagrant.plugin("2", :config)
15
+ DEFAULT_VM_NAME = :default
16
+
17
+ attr_accessor :base_mac
18
+ attr_accessor :boot_timeout
19
+ attr_accessor :box
20
+ attr_accessor :box_url
21
+ attr_accessor :box_download_insecure
22
+ attr_accessor :graceful_halt_timeout
23
+ attr_accessor :guest
24
+ attr_accessor :hostname
25
+ attr_accessor :usable_port_range
26
+ attr_reader :provisioners
27
+
28
+ def initialize
29
+ @boot_timeout = UNSET_VALUE
30
+ @box_download_insecure = UNSET_VALUE
31
+ @graceful_halt_timeout = UNSET_VALUE
32
+ @guest = UNSET_VALUE
33
+ @hostname = UNSET_VALUE
34
+ @provisioners = []
35
+
36
+ # Internal state
37
+ @__compiled_provider_configs = {}
38
+ @__defined_vm_keys = []
39
+ @__defined_vms = {}
40
+ @__finalized = false
41
+ @__networks = {}
42
+ @__providers = {}
43
+ @__provider_overrides = {}
44
+ @__synced_folders = {}
45
+ end
46
+
47
+ # This was from V1, but we just kept it here as an alias for hostname
48
+ # because too many people mess this up.
49
+ def host_name=(value)
50
+ @hostname = value
51
+ end
52
+
53
+ # Custom merge method since some keys here are merged differently.
54
+ def merge(other)
55
+ super.tap do |result|
56
+ other_networks = other.instance_variable_get(:@__networks)
57
+
58
+ result.instance_variable_set(:@__networks, @__networks.merge(other_networks))
59
+ result.instance_variable_set(:@provisioners, @provisioners + other.provisioners)
60
+
61
+ # Merge defined VMs by first merging the defined VM keys,
62
+ # preserving the order in which they were defined.
63
+ other_defined_vm_keys = other.instance_variable_get(:@__defined_vm_keys)
64
+ other_defined_vm_keys -= @__defined_vm_keys
65
+ new_defined_vm_keys = @__defined_vm_keys + other_defined_vm_keys
66
+
67
+ # Merge the actual defined VMs.
68
+ other_defined_vms = other.instance_variable_get(:@__defined_vms)
69
+ new_defined_vms = {}
70
+
71
+ @__defined_vms.each do |key, subvm|
72
+ new_defined_vms[key] = subvm.clone
73
+ end
74
+
75
+ other_defined_vms.each do |key, subvm|
76
+ if !new_defined_vms.has_key?(key)
77
+ new_defined_vms[key] = subvm.clone
78
+ else
79
+ new_defined_vms[key].config_procs.concat(subvm.config_procs)
80
+ new_defined_vms[key].options.merge!(subvm.options)
81
+ end
82
+ end
83
+
84
+ # Merge the providers by prepending any configuration blocks we
85
+ # have for providers onto the new configuration.
86
+ other_providers = other.instance_variable_get(:@__providers)
87
+ new_providers = @__providers.dup
88
+ other_providers.each do |key, blocks|
89
+ new_providers[key] ||= []
90
+ new_providers[key] += blocks
91
+ end
92
+
93
+ # Merge the provider overrides by appending them...
94
+ other_overrides = other.instance_variable_get(:@__provider_overrides)
95
+ new_overrides = @__provider_overrides.dup
96
+ other_overrides.each do |key, blocks|
97
+ new_overrides[key] ||= []
98
+ new_overrides[key] += blocks
99
+ end
100
+
101
+ # Merge synced folders.
102
+ other_folders = other.instance_variable_get(:@__synced_folders)
103
+ new_folders = {}
104
+ @__synced_folders.each do |key, value|
105
+ new_folders[key] = value.dup
106
+ end
107
+
108
+ other_folders.each do |id, options|
109
+ new_folders[id] ||= {}
110
+ new_folders[id].merge!(options)
111
+ end
112
+
113
+ result.instance_variable_set(:@__defined_vm_keys, new_defined_vm_keys)
114
+ result.instance_variable_set(:@__defined_vms, new_defined_vms)
115
+ result.instance_variable_set(:@__providers, new_providers)
116
+ result.instance_variable_set(:@__provider_overrides, new_overrides)
117
+ result.instance_variable_set(:@__synced_folders, new_folders)
118
+ end
119
+ end
120
+
121
+ # Defines a synced folder pair. This pair of folders will be synced
122
+ # to/from the machine. Note that if the machine you're using doesn't
123
+ # support multi-directional syncing (perhaps an rsync backed synced
124
+ # folder) then the host is always synced to the guest but guest data
125
+ # may not be synced back to the host.
126
+ #
127
+ # @param [String] hostpath Path to the host folder to share. If this
128
+ # is a relative path, it is relative to the location of the
129
+ # Vagrantfile.
130
+ # @param [String] guestpath Path on the guest to mount the shared
131
+ # folder.
132
+ # @param [Hash] options Additional options.
133
+ def synced_folder(hostpath, guestpath, options=nil)
134
+ if Vagrant::Util::Platform.windows?
135
+ # On Windows, Ruby just uses normal '/' for path seps, so
136
+ # just replace normal Windows style seps with Unix ones.
137
+ hostpath = hostpath.to_s.gsub("\\", "/")
138
+ end
139
+
140
+ options ||= {}
141
+ options = options.dup
142
+ options[:guestpath] = guestpath.to_s.gsub(/\/$/, '')
143
+ options[:hostpath] = hostpath
144
+
145
+ @__synced_folders[options[:guestpath]] = options
146
+ end
147
+
148
+ # Define a way to access the machine via a network. This exposes a
149
+ # high-level abstraction for networking that may not directly map
150
+ # 1-to-1 for every provider. For example, AWS has no equivalent to
151
+ # "port forwarding." But most providers will attempt to implement this
152
+ # in a way that behaves similarly.
153
+ #
154
+ # `type` can be one of:
155
+ #
156
+ # * `:forwarded_port` - A port that is accessible via localhost
157
+ # that forwards into the machine.
158
+ # * `:private_network` - The machine gets an IP that is not directly
159
+ # publicly accessible, but ideally accessible from this machine.
160
+ # * `:public_network` - The machine gets an IP on a shared network.
161
+ #
162
+ # @param [Symbol] type Type of network
163
+ # @param [Hash] options Options for the network.
164
+ def network(type, options=nil)
165
+ options ||= {}
166
+ options = options.dup
167
+ options[:protocol] ||= "tcp"
168
+
169
+ if !options[:id]
170
+ default_id = nil
171
+
172
+ if type == :forwarded_port
173
+ # For forwarded ports, set the default ID to the
174
+ # host port so that host ports overwrite each other.
175
+ default_id = "#{options[:protocol]}#{options[:host]}"
176
+ end
177
+
178
+ options[:id] = default_id || SecureRandom.uuid
179
+ end
180
+
181
+ # Scope the ID by type so that different types can share IDs
182
+ id = options[:id]
183
+ id = "#{type}-#{id}"
184
+
185
+ # Merge in the previous settings if we have them.
186
+ if @__networks.has_key?(id)
187
+ options = @__networks[id][1].merge(options)
188
+ end
189
+
190
+ # Merge in the latest settings and set the internal state
191
+ @__networks[id] = [type.to_sym, options]
192
+ end
193
+
194
+ # Configures a provider for this VM.
195
+ #
196
+ # @param [Symbol] name The name of the provider.
197
+ def provider(name, &block)
198
+ name = name.to_sym
199
+ @__providers[name] ||= []
200
+ @__provider_overrides[name] ||= []
201
+
202
+ if block_given?
203
+ @__providers[name] << block if block_given?
204
+
205
+ # If this block takes two arguments, then we curry it and store
206
+ # the configuration override for use later.
207
+ if block.arity == 2
208
+ @__provider_overrides[name] << block.curry[Vagrant::Config::V2::DummyConfig.new]
209
+ end
210
+ end
211
+ end
212
+
213
+ def provision(name, options=nil, &block)
214
+ @provisioners << VagrantConfigProvisioner.new(name.to_sym, options, &block)
215
+ end
216
+
217
+ def defined_vms
218
+ @__defined_vms
219
+ end
220
+
221
+ # This returns the keys of the sub-vms in the order they were
222
+ # defined.
223
+ def defined_vm_keys
224
+ @__defined_vm_keys
225
+ end
226
+
227
+ def define(name, options=nil, &block)
228
+ name = name.to_sym
229
+ options ||= {}
230
+ options = options.dup
231
+ options[:config_version] ||= "2"
232
+
233
+ # Add the name to the array of VM keys. This array is used to
234
+ # preserve the order in which VMs are defined.
235
+ @__defined_vm_keys << name if !@__defined_vm_keys.include?(name)
236
+
237
+ # Add the SubVM to the hash of defined VMs
238
+ if !@__defined_vms[name]
239
+ @__defined_vms[name] = VagrantConfigSubVM.new
240
+ end
241
+
242
+ @__defined_vms[name].options.merge!(options)
243
+ @__defined_vms[name].config_procs << [options[:config_version], block] if block
244
+ end
245
+
246
+ #-------------------------------------------------------------------
247
+ # Internal methods, don't call these.
248
+ #-------------------------------------------------------------------
249
+
250
+ def finalize!
251
+ # Defaults
252
+ @boot_timeout = 300 if @boot_timeout == UNSET_VALUE
253
+ @box_download_insecure = false if @box_download_insecure == UNSET_VALUE
254
+ @graceful_halt_timeout = 300 if @graceful_halt_timeout == UNSET_VALUE
255
+ @guest = nil if @guest == UNSET_VALUE
256
+ @hostname = nil if @hostname == UNSET_VALUE
257
+ @hostname = @hostname.to_s if @hostname
258
+
259
+ # Set the guest properly
260
+ @guest = @guest.to_sym if @guest
261
+
262
+ # If we haven't defined a single VM, then we need to define a
263
+ # default VM which just inherits the rest of the configuration.
264
+ define(DEFAULT_VM_NAME) if defined_vm_keys.empty?
265
+
266
+ # Clean up some network configurations
267
+ @__networks.each do |type, opts|
268
+ if type == :forwarded_port
269
+ opts[:guest] = opts[:guest].to_i if opts[:guest]
270
+ opts[:host] = opts[:host].to_i if opts[:host]
271
+ end
272
+ end
273
+
274
+ # Compile all the provider configurations
275
+ @__providers.each do |name, blocks|
276
+ # If we don't have any configuration blocks, then ignore it
277
+ next if blocks.empty?
278
+
279
+ # Find the configuration class for this provider
280
+ config_class = Vagrant.plugin("2").manager.provider_configs[name]
281
+ config_class ||= Vagrant::Config::V2::DummyConfig
282
+
283
+ # Load it up
284
+ config = config_class.new
285
+
286
+ blocks.each do |b|
287
+ b.call(config, Vagrant::Config::V2::DummyConfig.new)
288
+ end
289
+
290
+ config.finalize!
291
+
292
+ # Store it for retrieval later
293
+ @__compiled_provider_configs[name] = config
294
+ end
295
+
296
+ @__synced_folders.each do |id, options|
297
+ # Ignore NFS on Windows
298
+ if options[:nfs] && Vagrant::Util::Platform.windows?
299
+ options[:nfs] = false
300
+ end
301
+ end
302
+
303
+ # Flag that we finalized
304
+ @__finalized = true
305
+ end
306
+
307
+ # This returns the compiled provider-specific configurationf or the
308
+ # given provider.
309
+ #
310
+ # @param [Symbol] name Name of the provider.
311
+ def get_provider_config(name)
312
+ raise "Must finalize first." if !@__finalized
313
+
314
+ result = @__compiled_provider_configs[name]
315
+
316
+ # If no compiled configuration was found, then we try to just
317
+ # use the default configuration from the plugin.
318
+ if !result
319
+ config_class = Vagrant.plugin("2").manager.provider_configs[name]
320
+ if config_class
321
+ result = config_class.new
322
+ result.finalize!
323
+ end
324
+ end
325
+
326
+ return result
327
+ end
328
+
329
+ # This returns a list of VM configurations that are overrides
330
+ # for this provider.
331
+ #
332
+ # @param [Symbol] name Name of the provider
333
+ # @return [Array<Proc>]
334
+ def get_provider_overrides(name)
335
+ (@__provider_overrides[name] || []).map do |p|
336
+ ["2", p]
337
+ end
338
+ end
339
+
340
+ # This returns the list of networks configured.
341
+ def networks
342
+ @__networks.values
343
+ end
344
+
345
+ # This returns the list of synced folders
346
+ def synced_folders
347
+ @__synced_folders
348
+ end
349
+
350
+ def validate(machine)
351
+ errors = _detected_errors
352
+ errors << I18n.t("vagrant.config.vm.box_missing") if !box
353
+ errors << I18n.t("vagrant.config.vm.box_not_found", :name => box) if \
354
+ box && !box_url && !machine.box
355
+ errors << I18n.t("vagrant.config.vm.hostname_invalid_characters") if \
356
+ @hostname && @hostname !~ /^[-.a-z0-9]+$/i
357
+
358
+ has_nfs = false
359
+ used_guest_paths = Set.new
360
+ @__synced_folders.each do |id, options|
361
+ # If the shared folder is disabled then don't worry about validating it
362
+ next if options[:disabled]
363
+
364
+ guestpath = Pathname.new(options[:guestpath])
365
+ hostpath = Pathname.new(options[:hostpath]).expand_path(machine.env.root_path)
366
+
367
+ if guestpath.relative? && guestpath.to_s !~ /^\w+:/
368
+ errors << I18n.t("vagrant.config.vm.shared_folder_guestpath_relative",
369
+ :path => options[:guestpath])
370
+ else
371
+ if used_guest_paths.include?(options[:guestpath])
372
+ errors << I18n.t("vagrant.config.vm.shared_folder_guestpath_duplicate",
373
+ :path => options[:guestpath])
374
+ end
375
+
376
+ used_guest_paths.add(options[:guestpath])
377
+ end
378
+
379
+ if !hostpath.directory? && !options[:create]
380
+ errors << I18n.t("vagrant.config.vm.shared_folder_hostpath_missing",
381
+ :path => options[:hostpath])
382
+ end
383
+
384
+ if options[:nfs]
385
+ has_nfs = true
386
+
387
+ if options[:owner] || options[:group]
388
+ # Owner/group don't work with NFS
389
+ errors << I18n.t("vagrant.config.vm.shared_folder_nfs_owner_group",
390
+ :path => options[:hostpath])
391
+ end
392
+ end
393
+
394
+ if options[:mount_options] && !options[:mount_options].is_a?(Array)
395
+ errors << I18n.t("vagrant.config.vm.shared_folder_mount_options_array")
396
+ end
397
+
398
+ # One day remove this probably.
399
+ if options[:extra]
400
+ errors << "The 'extra' flag on synced folders is now 'mount_options'"
401
+ end
402
+ end
403
+
404
+ if has_nfs
405
+ if !machine.env.host
406
+ errors << I18n.t("vagrant.config.vm.nfs_requires_host")
407
+ else
408
+ errors << I18n.t("vagrant.config.vm.nfs_not_supported") if \
409
+ !machine.env.host.nfs?
410
+ end
411
+ end
412
+
413
+ # Validate networks
414
+ has_fp_port_error = false
415
+ fp_used = Set.new
416
+ valid_network_types = [:forwarded_port, :private_network, :public_network]
417
+
418
+ networks.each do |type, options|
419
+ if !valid_network_types.include?(type)
420
+ errors << I18n.t("vagrant.config.vm.network_type_invalid",
421
+ :type => type.to_s)
422
+ end
423
+
424
+ if type == :forwarded_port
425
+ if !has_fp_port_error && (!options[:guest] || !options[:host])
426
+ errors << I18n.t("vagrant.config.vm.network_fp_requires_ports")
427
+ has_fp_port_error = true
428
+ end
429
+
430
+ if options[:host]
431
+ key = "#{options[:protocol]}#{options[:host]}"
432
+ if fp_used.include?(key)
433
+ errors << I18n.t("vagrant.config.vm.network_fp_host_not_unique",
434
+ :host => options[:host].to_s,
435
+ :protocol => options[:protocol].to_s)
436
+ end
437
+
438
+ fp_used.add(key)
439
+ end
440
+ end
441
+
442
+ if type == :private_network
443
+ if options[:type] != :dhcp
444
+ if !options[:ip]
445
+ errors << I18n.t("vagrant.config.vm.network_ip_required")
446
+ end
447
+ end
448
+
449
+ if options[:ip] && options[:ip].end_with?(".1")
450
+ errors << I18n.t("vagrant.config.vm.network_ip_ends_in_one")
451
+ end
452
+ end
453
+ end
454
+
455
+ # We're done with VM level errors so prepare the section
456
+ errors = { "vm" => errors }
457
+
458
+ # Validate only the _active_ provider
459
+ if machine.provider_config
460
+ provider_errors = machine.provider_config.validate(machine)
461
+ if provider_errors
462
+ errors = Vagrant::Config::V2::Util.merge_errors(errors, provider_errors)
463
+ end
464
+ end
465
+
466
+ # Validate provisioners
467
+ @provisioners.each do |vm_provisioner|
468
+ if vm_provisioner.invalid?
469
+ errors["vm"] << I18n.t("vagrant.config.vm.provisioner_not_found",
470
+ :name => vm_provisioner.name)
471
+ next
472
+ end
473
+
474
+ if vm_provisioner.config
475
+ provisioner_errors = vm_provisioner.config.validate(machine)
476
+ if provisioner_errors
477
+ errors = Vagrant::Config::V2::Util.merge_errors(errors, provisioner_errors)
478
+ end
479
+ end
480
+ end
481
+
482
+ errors
483
+ end
484
+ end
485
+ end
486
+ end