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,485 @@
1
+ require 'log4r'
2
+
3
+ require "vagrant/util/platform"
4
+
5
+ require File.expand_path("../base", __FILE__)
6
+
7
+ module VagrantPlugins
8
+ module ProviderVirtualBox
9
+ module Driver
10
+ # Driver for VirtualBox 4.0.x
11
+ class Version_4_0 < Base
12
+ def initialize(uuid)
13
+ super()
14
+
15
+ @logger = Log4r::Logger.new("vagrant::provider::virtualbox_4_0")
16
+ @uuid = uuid
17
+ end
18
+
19
+ def clear_forwarded_ports
20
+ args = []
21
+ read_forwarded_ports(@uuid).each do |nic, name, _, _|
22
+ args.concat(["--natpf#{nic}", "delete", name])
23
+ end
24
+
25
+ execute("modifyvm", @uuid, *args) if !args.empty?
26
+ end
27
+
28
+ def clear_shared_folders
29
+ info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
30
+ info.split("\n").each do |line|
31
+ if name = line[/^SharedFolderNameMachineMapping\d+="(.+?)"$/, 1]
32
+ execute("sharedfolder", "remove", @uuid, "--name", name)
33
+ end
34
+ end
35
+ end
36
+
37
+ def create_dhcp_server(network, options)
38
+ execute("dhcpserver", "add", "--ifname", network,
39
+ "--ip", options[:dhcp_ip],
40
+ "--netmask", options[:netmask],
41
+ "--lowerip", options[:dhcp_lower],
42
+ "--upperip", options[:dhcp_upper],
43
+ "--enable")
44
+ end
45
+
46
+ def create_host_only_network(options)
47
+ # Create the interface
48
+ interface = execute("hostonlyif", "create")
49
+ name = interface[/^Interface '(.+?)' was successfully created$/, 1]
50
+
51
+ # Configure it
52
+ execute("hostonlyif", "ipconfig", name,
53
+ "--ip", options[:adapter_ip],
54
+ "--netmask", options[:netmask])
55
+
56
+ # Return the details
57
+ return {
58
+ :name => name,
59
+ :ip => options[:adapter_ip],
60
+ :netmask => options[:netmask],
61
+ :dhcp => nil
62
+ }
63
+ end
64
+
65
+ def delete
66
+ execute("unregistervm", @uuid, "--delete")
67
+ end
68
+
69
+ def delete_unused_host_only_networks
70
+ networks = []
71
+ execute("list", "hostonlyifs").split("\n").each do |line|
72
+ if network_name = line[/^Name:\s+(.+?)$/, 1]
73
+ networks << network_name
74
+ end
75
+ end
76
+
77
+ execute("list", "vms").split("\n").each do |line|
78
+ if vm_name = line[/^".+?"\s+\{(.+?)\}$/, 1]
79
+ info = execute("showvminfo", vm_name, "--machinereadable", :retryable => true)
80
+ info.split("\n").each do |line|
81
+ if network_name = line[/^hostonlyadapter\d+="(.+?)"$/, 1]
82
+ networks.delete(network_name)
83
+ end
84
+ end
85
+ end
86
+ end
87
+
88
+ networks.each do |name|
89
+ # First try to remove any DHCP servers attached. We use `raw` because
90
+ # it is okay if this fails. It usually means that a DHCP server was
91
+ # never attached.
92
+ raw("dhcpserver", "remove", "--ifname", name)
93
+
94
+ # Delete the actual host only network interface.
95
+ execute("hostonlyif", "remove", name)
96
+ end
97
+ end
98
+
99
+ def discard_saved_state
100
+ execute("discardstate", @uuid)
101
+ end
102
+
103
+ def enable_adapters(adapters)
104
+ args = []
105
+ adapters.each do |adapter|
106
+ args.concat(["--nic#{adapter[:adapter]}", adapter[:type].to_s])
107
+
108
+ if adapter[:bridge]
109
+ args.concat(["--bridgeadapter#{adapter[:adapter]}",
110
+ adapter[:bridge]])
111
+ end
112
+
113
+ if adapter[:hostonly]
114
+ args.concat(["--hostonlyadapter#{adapter[:adapter]}",
115
+ adapter[:hostonly]])
116
+ end
117
+
118
+ if adapter[:mac_address]
119
+ args.concat(["--macaddress#{adapter[:adapter]}",
120
+ adapter[:mac_address]])
121
+ end
122
+
123
+ if adapter[:nic_type]
124
+ args.concat(["--nictype#{adapter[:adapter]}", adapter[:nic_type].to_s])
125
+ end
126
+ end
127
+
128
+ execute("modifyvm", @uuid, *args)
129
+ end
130
+
131
+ def execute_command(command)
132
+ raw(*command)
133
+ end
134
+
135
+ def export(path)
136
+ # TODO: Progress
137
+ execute("export", @uuid, "--output", path.to_s)
138
+ end
139
+
140
+ def forward_ports(ports)
141
+ args = []
142
+ ports.each do |options|
143
+ pf_builder = [options[:name],
144
+ options[:protocol] || "tcp",
145
+ "",
146
+ options[:hostport],
147
+ "",
148
+ options[:guestport]]
149
+
150
+ args.concat(["--natpf#{options[:adapter] || 1}",
151
+ pf_builder.join(",")])
152
+ end
153
+
154
+ execute("modifyvm", @uuid, *args) if !args.empty?
155
+ end
156
+
157
+ def halt
158
+ execute("controlvm", @uuid, "poweroff")
159
+ end
160
+
161
+ def import(ovf)
162
+ ovf = Vagrant::Util::Platform.cygwin_windows_path(ovf)
163
+
164
+ output = ""
165
+ total = ""
166
+ last = 0
167
+ execute("import", ovf) do |type, data|
168
+ if type == :stdout
169
+ # Keep track of the stdout so that we can get the VM name
170
+ output << data
171
+ elsif type == :stderr
172
+ # Append the data so we can see the full view
173
+ total << data
174
+
175
+ # Break up the lines. We can't get the progress until we see an "OK"
176
+ lines = total.split("\n")
177
+ if lines.include?("OK.")
178
+ # The progress of the import will be in the last line. Do a greedy
179
+ # regular expression to find what we're looking for.
180
+ if current = lines.last[/.+(\d{2})%/, 1]
181
+ current = current.to_i
182
+ if current > last
183
+ last = current
184
+ yield current if block_given?
185
+ end
186
+ end
187
+ end
188
+ end
189
+ end
190
+
191
+ # Find the name of the VM name
192
+ name = output[/Suggested VM name "(.+?)"/, 1]
193
+ if !name
194
+ @logger.error("Couldn't find VM name in the output.")
195
+ return nil
196
+ end
197
+
198
+ output = execute("list", "vms")
199
+ if existing_vm = output[/^"#{Regexp.escape(name)}" \{(.+?)\}$/, 1]
200
+ return existing_vm
201
+ end
202
+
203
+ nil
204
+ end
205
+
206
+ def read_forwarded_ports(uuid=nil, active_only=false)
207
+ uuid ||= @uuid
208
+
209
+ @logger.debug("read_forward_ports: uuid=#{uuid} active_only=#{active_only}")
210
+
211
+ results = []
212
+ current_nic = nil
213
+ info = execute("showvminfo", uuid, "--machinereadable", :retryable => true)
214
+ info.split("\n").each do |line|
215
+ # This is how we find the nic that a FP is attached to,
216
+ # since this comes first.
217
+ if nic = line[/^nic(\d+)=".+?"$/, 1]
218
+ current_nic = nic.to_i
219
+ end
220
+
221
+ # If we care about active VMs only, then we check the state
222
+ # to verify the VM is running.
223
+ if active_only && (state = line[/^VMState="(.+?)"$/, 1] and state != "running")
224
+ return []
225
+ end
226
+
227
+ # Parse out the forwarded port information
228
+ if matcher = /^Forwarding.+?="(.+?),.+?,.*?,(.+?),.*?,(.+?)"$/.match(line)
229
+ result = [current_nic, matcher[1], matcher[2].to_i, matcher[3].to_i]
230
+ @logger.debug(" - #{result.inspect}")
231
+ results << result
232
+ end
233
+ end
234
+
235
+ results
236
+ end
237
+
238
+ def read_bridged_interfaces
239
+ execute("list", "bridgedifs").split("\n\n").collect do |block|
240
+ info = {}
241
+
242
+ block.split("\n").each do |line|
243
+ if name = line[/^Name:\s+(.+?)$/, 1]
244
+ info[:name] = name
245
+ elsif ip = line[/^IPAddress:\s+(.+?)$/, 1]
246
+ info[:ip] = ip
247
+ elsif netmask = line[/^NetworkMask:\s+(.+?)$/, 1]
248
+ info[:netmask] = netmask
249
+ elsif status = line[/^Status:\s+(.+?)$/, 1]
250
+ info[:status] = status
251
+ end
252
+ end
253
+
254
+ # Return the info to build up the results
255
+ info
256
+ end
257
+ end
258
+
259
+ def read_guest_additions_version
260
+ output = execute("guestproperty", "get", @uuid, "/VirtualBox/GuestAdd/Version",
261
+ :retryable => true)
262
+ if value = output[/^Value: (.+?)$/, 1]
263
+ # Split the version by _ since some distro versions modify it
264
+ # to look like this: 4.1.2_ubuntu, and the distro part isn't
265
+ # too important.
266
+ return value.split("_").first
267
+ end
268
+
269
+ return nil
270
+ end
271
+
272
+ def read_host_only_interfaces
273
+ dhcp = {}
274
+ execute("list", "dhcpservers", :retryable => true).split("\n\n").each do |block|
275
+ info = {}
276
+
277
+ block.split("\n").each do |line|
278
+ if network = line[/^NetworkName:\s+HostInterfaceNetworking-(.+?)$/, 1]
279
+ info[:network] = network
280
+ elsif ip = line[/^IP:\s+(.+?)$/, 1]
281
+ info[:ip] = ip
282
+ elsif lower = line[/^lowerIPAddress:\s+(.+?)$/, 1]
283
+ info[:lower] = lower
284
+ elsif upper = line[/^upperIPAddress:\s+(.+?)$/, 1]
285
+ info[:upper] = upper
286
+ end
287
+ end
288
+
289
+ # Set the DHCP info
290
+ dhcp[info[:network]] = info
291
+ end
292
+
293
+ execute("list", "hostonlyifs", :retryable => true).split("\n\n").collect do |block|
294
+ info = {}
295
+
296
+ block.split("\n").each do |line|
297
+ if name = line[/^Name:\s+(.+?)$/, 1]
298
+ info[:name] = name
299
+ elsif ip = line[/^IPAddress:\s+(.+?)$/, 1]
300
+ info[:ip] = ip
301
+ elsif netmask = line[/^NetworkMask:\s+(.+?)$/, 1]
302
+ info[:netmask] = netmask
303
+ elsif status = line[/^Status:\s+(.+?)$/, 1]
304
+ info[:status] = status
305
+ end
306
+ end
307
+
308
+ # Set the DHCP info if it exists
309
+ info[:dhcp] = dhcp[info[:name]] if dhcp[info[:name]]
310
+
311
+ info
312
+ end
313
+ end
314
+
315
+ def read_mac_address
316
+ info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
317
+ info.split("\n").each do |line|
318
+ if mac = line[/^macaddress1="(.+?)"$/, 1]
319
+ return mac
320
+ end
321
+ end
322
+
323
+ nil
324
+ end
325
+
326
+ def read_mac_addresses
327
+ macs = {}
328
+ info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
329
+ info.split("\n").each do |line|
330
+ if matcher = /^macaddress(\d+)="(.+?)"$/.match(line)
331
+ adapter = matcher[1].to_i
332
+ mac = matcher[2].to_s
333
+ macs[adapter] = mac
334
+ end
335
+ end
336
+ macs
337
+ end
338
+
339
+ def read_machine_folder
340
+ execute("list", "systemproperties", :retryable => true).split("\n").each do |line|
341
+ if folder = line[/^Default machine folder:\s+(.+?)$/i, 1]
342
+ return folder
343
+ end
344
+ end
345
+
346
+ nil
347
+ end
348
+
349
+ def read_network_interfaces
350
+ nics = {}
351
+ info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
352
+ info.split("\n").each do |line|
353
+ if matcher = /^nic(\d+)="(.+?)"$/.match(line)
354
+ adapter = matcher[1].to_i
355
+ type = matcher[2].to_sym
356
+
357
+ nics[adapter] ||= {}
358
+ nics[adapter][:type] = type
359
+ elsif matcher = /^hostonlyadapter(\d+)="(.+?)"$/.match(line)
360
+ adapter = matcher[1].to_i
361
+ network = matcher[2].to_s
362
+
363
+ nics[adapter] ||= {}
364
+ nics[adapter][:hostonly] = network
365
+ elsif matcher = /^bridgeadapter(\d+)="(.+?)"$/.match(line)
366
+ adapter = matcher[1].to_i
367
+ network = matcher[2].to_s
368
+
369
+ nics[adapter] ||= {}
370
+ nics[adapter][:bridge] = network
371
+ end
372
+ end
373
+
374
+ nics
375
+ end
376
+
377
+ def read_state
378
+ output = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
379
+ if output =~ /^name="<inaccessible>"$/
380
+ return :inaccessible
381
+ elsif state = output[/^VMState="(.+?)"$/, 1]
382
+ return state.to_sym
383
+ end
384
+
385
+ nil
386
+ end
387
+
388
+ def read_used_ports
389
+ ports = []
390
+ execute("list", "vms", :retryable => true).split("\n").each do |line|
391
+ if uuid = line[/^".+?" \{(.+?)\}$/, 1]
392
+ # Ignore our own used ports
393
+ next if uuid == @uuid
394
+
395
+ read_forwarded_ports(uuid, true).each do |_, _, hostport, _|
396
+ ports << hostport
397
+ end
398
+ end
399
+ end
400
+
401
+ ports
402
+ end
403
+
404
+ def read_vms
405
+ results = {}
406
+ execute("list", "vms", :retryable => true).split("\n").each do |line|
407
+ if line =~ /^"(.+?)" \{(.+?)\}$/
408
+ results[$1.to_s] = $2.to_s
409
+ end
410
+ end
411
+
412
+ results
413
+ end
414
+
415
+ def set_mac_address(mac)
416
+ execute("modifyvm", @uuid, "--macaddress1", mac)
417
+ end
418
+
419
+ def set_name(name)
420
+ execute("modifyvm", @uuid, "--name", name)
421
+ end
422
+
423
+ def share_folders(folders)
424
+ folders.each do |folder|
425
+ args = ["--name",
426
+ folder[:name],
427
+ "--hostpath",
428
+ folder[:hostpath]]
429
+ args << "--transient" if folder.has_key?(:transient) && folder[:transient]
430
+ execute("sharedfolder", "add", @uuid, *args)
431
+ end
432
+ end
433
+
434
+ def ssh_port(expected_port)
435
+ @logger.debug("Searching for SSH port: #{expected_port.inspect}")
436
+
437
+ # Look for the forwarded port only by comparing the guest port
438
+ read_forwarded_ports.each do |_, _, hostport, guestport|
439
+ return hostport if guestport == expected_port
440
+ end
441
+
442
+ nil
443
+ end
444
+
445
+ def resume
446
+ @logger.debug("Resuming paused VM...")
447
+ execute("controlvm", @uuid, "resume")
448
+ end
449
+
450
+ def start(mode)
451
+ command = ["startvm", @uuid, "--type", mode.to_s]
452
+ r = raw(*command)
453
+
454
+ if r.exit_code == 0 || r.stdout =~ /VM ".+?" has been successfully started/
455
+ # Some systems return an exit code 1 for some reason. For that
456
+ # we depend on the output.
457
+ return true
458
+ end
459
+
460
+ # If we reached this point then it didn't work out.
461
+ raise Vagrant::Errors::VBoxManageError, :command => command.inspect
462
+ end
463
+
464
+ def suspend
465
+ execute("controlvm", @uuid, "savestate")
466
+ end
467
+
468
+ def verify!
469
+ # This command sometimes fails if kernel drivers aren't properly loaded
470
+ # so we just run the command and verify that it succeeded.
471
+ execute("list", "hostonlyifs")
472
+ end
473
+
474
+ def verify_image(path)
475
+ r = raw("import", path.to_s, "--dry-run")
476
+ return r.exit_code == 0
477
+ end
478
+
479
+ def vm_exists?(uuid)
480
+ raw("showvminfo", uuid).exit_code == 0
481
+ end
482
+ end
483
+ end
484
+ end
485
+ end