tnargav 1.3.5 → 1.3.6

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 (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,45 @@
1
+ require 'vagrant/action/builder'
2
+
3
+ module Vagrant
4
+ module Action
5
+ autoload :Runner, 'vagrant/action/runner'
6
+ autoload :Warden, 'vagrant/action/warden'
7
+
8
+ # Builtin contains middleware classes that are shipped with Vagrant-core
9
+ # and are thus available to all plugins as a "standard library" of sorts.
10
+ module Builtin
11
+ autoload :BoxAdd, "vagrant/action/builtin/box_add"
12
+ autoload :Call, "vagrant/action/builtin/call"
13
+ autoload :Confirm, "vagrant/action/builtin/confirm"
14
+ autoload :ConfigValidate, "vagrant/action/builtin/config_validate"
15
+ autoload :DestroyConfirm, "vagrant/action/builtin/destroy_confirm"
16
+ autoload :EnvSet, "vagrant/action/builtin/env_set"
17
+ autoload :GracefulHalt, "vagrant/action/builtin/graceful_halt"
18
+ autoload :HandleBoxUrl, "vagrant/action/builtin/handle_box_url"
19
+ autoload :HandleForwardedPortCollisions, "vagrant/action/builtin/handle_forwarded_port_collisions"
20
+ autoload :Lock, "vagrant/action/builtin/lock"
21
+ autoload :NFS, "vagrant/action/builtin/nfs"
22
+ autoload :Provision, "vagrant/action/builtin/provision"
23
+ autoload :ProvisionerCleanup, "vagrant/action/builtin/provisioner_cleanup"
24
+ autoload :SetHostname, "vagrant/action/builtin/set_hostname"
25
+ autoload :SSHExec, "vagrant/action/builtin/ssh_exec"
26
+ autoload :SSHRun, "vagrant/action/builtin/ssh_run"
27
+ autoload :WaitForCommunicator, "vagrant/action/builtin/wait_for_communicator"
28
+ end
29
+
30
+ module General
31
+ autoload :Package, 'vagrant/action/general/package'
32
+ end
33
+
34
+ # This is the action that will add a box from a URL. This middleware
35
+ # sequence is built-in to Vagrant. Plugins can hook into this like any
36
+ # other middleware sequence. This is particularly useful for provider
37
+ # plugins, which can hook in to do things like verification of boxes
38
+ # that are downloaded.
39
+ def self.action_box_add
40
+ Builder.new.tap do |b|
41
+ b.use Builtin::BoxAdd
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,174 @@
1
+ module Vagrant
2
+ module Action
3
+ # Action builder which provides a nice DSL for building up
4
+ # a middleware sequence for Vagrant actions. This code is based
5
+ # heavily off of `Rack::Builder` and `ActionDispatch::MiddlewareStack`
6
+ # in Rack and Rails, respectively.
7
+ #
8
+ # Usage
9
+ #
10
+ # Building an action sequence is very easy:
11
+ #
12
+ # app = Vagrant::Action::Builder.new.tap do |b|
13
+ # b.use MiddlewareA
14
+ # b.use MiddlewareB
15
+ # end
16
+ #
17
+ # Vagrant::Action.run(app)
18
+ #
19
+ class Builder
20
+ # This is the stack of middlewares added. This should NOT be used
21
+ # directly.
22
+ #
23
+ # @return [Array]
24
+ attr_reader :stack
25
+
26
+ # This is a shortcut for a middleware sequence with only one item
27
+ # in it. For a description of the arguments and the documentation, please
28
+ # see {#use} instead.
29
+ #
30
+ # @return [Builder]
31
+ def self.build(middleware, *args, &block)
32
+ new.use(middleware, *args, &block)
33
+ end
34
+
35
+ def initialize
36
+ @stack = []
37
+ end
38
+
39
+ # Implement a custom copy that copies the stack variable over so that
40
+ # we don't clobber that.
41
+ def initialize_copy(original)
42
+ super
43
+
44
+ @stack = original.stack.dup
45
+ end
46
+
47
+ # Returns a mergeable version of the builder. If `use` is called with
48
+ # the return value of this method, then the stack will merge, instead
49
+ # of being treated as a separate single middleware.
50
+ def flatten
51
+ lambda do |env|
52
+ self.call(env)
53
+ end
54
+ end
55
+
56
+ # Adds a middleware class to the middleware stack. Any additional
57
+ # args and a block, if given, are saved and passed to the initializer
58
+ # of the middleware.
59
+ #
60
+ # @param [Class] middleware The middleware class
61
+ def use(middleware, *args, &block)
62
+ if middleware.kind_of?(Builder)
63
+ # Merge in the other builder's stack into our own
64
+ self.stack.concat(middleware.stack)
65
+ else
66
+ self.stack << [middleware, args, block]
67
+ end
68
+
69
+ self
70
+ end
71
+
72
+ # Inserts a middleware at the given index or directly before the
73
+ # given middleware object.
74
+ def insert(index, middleware, *args, &block)
75
+ index = self.index(index) unless index.is_a?(Integer)
76
+ raise "no such middleware to insert before: #{index.inspect}" unless index
77
+
78
+ if middleware.kind_of?(Builder)
79
+ middleware.stack.reverse.each do |stack_item|
80
+ stack.insert(index, stack_item)
81
+ end
82
+ else
83
+ stack.insert(index, [middleware, args, block])
84
+ end
85
+ end
86
+
87
+ alias_method :insert_before, :insert
88
+
89
+ # Inserts a middleware after the given index or middleware object.
90
+ def insert_after(index, middleware, *args, &block)
91
+ index = self.index(index) unless index.is_a?(Integer)
92
+ raise "no such middleware to insert after: #{index.inspect}" unless index
93
+ insert(index + 1, middleware, *args, &block)
94
+ end
95
+
96
+ # Replaces the given middlware object or index with the new
97
+ # middleware.
98
+ def replace(index, middleware, *args, &block)
99
+ if index.is_a?(Integer)
100
+ delete(index)
101
+ insert(index, middleware, *args, &block)
102
+ else
103
+ insert_before(index, middleware, *args, &block)
104
+ delete(index)
105
+ end
106
+ end
107
+
108
+ # Deletes the given middleware object or index
109
+ def delete(index)
110
+ index = self.index(index) unless index.is_a?(Integer)
111
+ stack.delete_at(index)
112
+ end
113
+
114
+ # Runs the builder stack with the given environment.
115
+ def call(env)
116
+ to_app(env).call(env)
117
+ end
118
+
119
+ # Returns the numeric index for the given middleware object.
120
+ #
121
+ # @param [Object] object The item to find the index for
122
+ # @return [Integer]
123
+ def index(object)
124
+ stack.each_with_index do |item, i|
125
+ return i if item[0] == object
126
+ return i if item[0].respond_to?(:name) && item[0].name == object
127
+ end
128
+
129
+ nil
130
+ end
131
+
132
+ # Converts the builder stack to a runnable action sequence.
133
+ #
134
+ # @param [Hash] env The action environment hash
135
+ # @return [Object] A callable object
136
+ def to_app(env)
137
+ app_stack = nil
138
+
139
+ # If we have action hooks, then we apply them
140
+ if env[:action_hooks]
141
+ builder = self.dup
142
+
143
+ # These are the options to pass into hook application.
144
+ options = {}
145
+
146
+ # If we already ran through once and did append/prepends,
147
+ # then don't do it again.
148
+ if env[:action_hooks_already_ran]
149
+ options[:no_prepend_or_append] = true
150
+ end
151
+
152
+ # Specify that we already ran, so in the future we don't repeat
153
+ # the prepend/append hooks.
154
+ env[:action_hooks_already_ran] = true
155
+
156
+ # Apply all the hooks to the new builder instance
157
+ env[:action_hooks].each do |hook|
158
+ hook.apply(builder, options)
159
+ end
160
+
161
+ # The stack is now the result of the new builder
162
+ app_stack = builder.stack.dup
163
+ end
164
+
165
+ # If we don't have a stack then default to using our own
166
+ app_stack ||= stack.dup
167
+
168
+ # Wrap the middleware stack with the Warden to provide a consistent
169
+ # and predictable behavior upon exceptions.
170
+ Warden.new(app_stack, env)
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,92 @@
1
+ require "log4r"
2
+
3
+ require "vagrant/util/downloader"
4
+ require "vagrant/util/platform"
5
+
6
+ module Vagrant
7
+ module Action
8
+ module Builtin
9
+ # This middleware will download a remote box and add it to the
10
+ # given box collection.
11
+ class BoxAdd
12
+ def initialize(app, env)
13
+ @app = app
14
+ @logger = Log4r::Logger.new("vagrant::action::builtin::box_add")
15
+ end
16
+
17
+ def call(env)
18
+ @temp_path = env[:tmp_path].join("box" + Time.now.to_i.to_s)
19
+ @logger.info("Downloading box to: #{@temp_path}")
20
+
21
+ url = env[:box_url]
22
+ if File.file?(url) || url !~ /^[a-z0-9]+:.*$/i
23
+ @logger.info("URL is a file or protocol not found and assuming file.")
24
+ file_path = File.expand_path(url)
25
+ file_path = Util::Platform.cygwin_windows_path(file_path)
26
+ url = "file:#{file_path}"
27
+ end
28
+
29
+ downloader_options = {}
30
+ downloader_options[:insecure] = env[:box_download_insecure]
31
+ downloader_options[:ui] = env[:ui]
32
+
33
+ # Download the box to a temporary path. We store the temporary
34
+ # path as an instance variable so that the `#recover` method can
35
+ # access it.
36
+ env[:ui].info(I18n.t("vagrant.actions.box.download.downloading"))
37
+ begin
38
+ downloader = Util::Downloader.new(url, @temp_path, downloader_options)
39
+ downloader.download!
40
+ rescue Errors::DownloaderInterrupted
41
+ # The downloader was interrupted, so just return, because that
42
+ # means we were interrupted as well.
43
+ env[:ui].info(I18n.t("vagrant.actions.box.download.interrupted"))
44
+ return
45
+ end
46
+
47
+ box_formats = env[:box_provider]
48
+ if box_formats
49
+ # Determine the formats a box can support and allow the box to
50
+ # be any of those formats.
51
+ provider_plugin = Vagrant.plugin("2").manager.providers[env[:box_provider]]
52
+ if provider_plugin
53
+ box_formats = provider_plugin[1][:box_format]
54
+ box_formats ||= env[:box_provider]
55
+ end
56
+ end
57
+
58
+ # Add the box
59
+ env[:ui].info I18n.t("vagrant.actions.box.add.adding", :name => env[:box_name])
60
+ added_box = nil
61
+ begin
62
+ added_box = env[:box_collection].add(
63
+ @temp_path, env[:box_name], box_formats, env[:box_force])
64
+ rescue Vagrant::Errors::BoxUpgradeRequired
65
+ # Upgrade the box
66
+ env[:box_collection].upgrade(env[:box_name])
67
+
68
+ # Try adding it again
69
+ retry
70
+ end
71
+
72
+ # Call the 'recover' method in all cases to clean up the
73
+ # downloaded temporary file.
74
+ recover(env)
75
+
76
+ # Success, we added a box!
77
+ env[:ui].success(
78
+ I18n.t("vagrant.actions.box.add.added", name: added_box.name, provider: added_box.provider))
79
+
80
+ # Carry on!
81
+ @app.call(env)
82
+ end
83
+
84
+ def recover(env)
85
+ if @temp_path && File.exist?(@temp_path)
86
+ File.unlink(@temp_path)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,67 @@
1
+ module Vagrant
2
+ module Action
3
+ module Builtin
4
+ # This middleware class allows a sort of "conditional" run within
5
+ # a single middlware sequence. It takes another middleware runnable,
6
+ # runs it with the same environment, then yields the resulting env to a block,
7
+ # allowing that block to determine the next course of action in the
8
+ # middleware sequence.
9
+ #
10
+ # The first argument to this middleware sequence is anywhere middleware
11
+ # runnable, whether it be a class, lambda, or something else that
12
+ # responds to `call`. This middleware runnable is run with the same
13
+ # environment as this class.
14
+ #
15
+ # After running, {Call} takes the environment and yields it to a block
16
+ # given to initialize the class, along with an instance of {Builder}.
17
+ # The result is used to build up a new sequence on the given builder.
18
+ # This builder is then run.
19
+ class Call
20
+ # For documentation, read the description of the {Call} class.
21
+ #
22
+ # @param [Object] callable A valid middleware runnable object. This
23
+ # can be a class, a lambda, or an object that responds to `call`.
24
+ # @yield [result, builder] This block is expected to build on `builder`
25
+ # which is the next middleware sequence that will be run.
26
+ def initialize(app, env, callable, *callable_args, &block)
27
+ raise ArgumentError, "A block must be given to Call" if !block
28
+
29
+ @app = app
30
+ @callable = callable
31
+ @callable_args = callable_args
32
+ @block = block
33
+ @child_app = nil
34
+ end
35
+
36
+ def call(env)
37
+ runner = Runner.new
38
+
39
+ # Build the callable that we'll run
40
+ callable = Builder.build(@callable, *@callable_args)
41
+
42
+ # Run our callable with our environment
43
+ new_env = runner.run(callable, env)
44
+
45
+ # Build our new builder based on the result
46
+ builder = Builder.new
47
+ @block.call(new_env, builder)
48
+
49
+ # Run the result with our new environment
50
+ @child_app = builder.to_app(new_env)
51
+ final_env = runner.run(@child_app, new_env)
52
+
53
+ # Merge the environment into our original environment
54
+ env.merge!(final_env)
55
+
56
+ # Call the next step using our final environment
57
+ @app.call(env)
58
+ end
59
+
60
+ def recover(env)
61
+ # Call back into our compiled application and recover it.
62
+ @child_app.recover(env) if @child_app
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,30 @@
1
+ require "vagrant/util/template_renderer"
2
+
3
+ module Vagrant
4
+ module Action
5
+ module Builtin
6
+ # This class validates the configuration and raises an exception
7
+ # if there are any validation errors.
8
+ class ConfigValidate
9
+ def initialize(app, env)
10
+ @app = app
11
+ end
12
+
13
+ def call(env)
14
+ if !env.has_key?(:config_validate) || env[:config_validate]
15
+ errors = env[:machine].config.validate(env[:machine])
16
+
17
+ if errors && !errors.empty?
18
+ raise Errors::ConfigInvalid,
19
+ :errors => Util::TemplateRenderer.render(
20
+ "config/validation_failed",
21
+ :errors => errors)
22
+ end
23
+ end
24
+
25
+ @app.call(env)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,39 @@
1
+ module Vagrant
2
+ module Action
3
+ module Builtin
4
+ # This class asks the user to confirm some sort of question with
5
+ # a "Y/N" question. The only parameter is the text to ask the user.
6
+ # The result is placed in `env[:result]` so that it can be used
7
+ # with the {Call} class.
8
+ class Confirm
9
+ # For documentation, read the description of the {Confirm} class.
10
+ #
11
+ # @param [String] message The message to ask the user.
12
+ # @param [Symbol] force_key The key that if present and true in
13
+ # the environment hash will skip the confirmation question.
14
+ def initialize(app, env, message, force_key=nil)
15
+ @app = app
16
+ @message = message
17
+ @force_key = force_key
18
+ end
19
+
20
+ def call(env)
21
+ choice = nil
22
+
23
+ # If we have a force key set and we're forcing, then set
24
+ # the result to "Y"
25
+ choice = "Y" if @force_key && env[@force_key]
26
+
27
+ # If we haven't chosen yes, then ask the user via TTY
28
+ choice = env[:ui].ask(@message) if !choice
29
+
30
+ # The result is only true if the user said "Y"
31
+ env[:result] = choice && choice.upcase == "Y"
32
+ env["#{@force_key}_result".to_sym] = env[:result]
33
+
34
+ @app.call(env)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end