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,18 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommandSuspend
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "suspend command"
7
+ description <<-DESC
8
+ The `suspend` command suspends execution and puts it to sleep.
9
+ The command `resume` returns it to running status.
10
+ DESC
11
+
12
+ command("suspend") do
13
+ require File.expand_path("../command", __FILE__)
14
+ Command
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,57 @@
1
+ require 'optparse'
2
+
3
+ require "vagrant"
4
+
5
+ require File.expand_path("../start_mixins", __FILE__)
6
+
7
+ module VagrantPlugins
8
+ module CommandUp
9
+ class Command < Vagrant.plugin("2", :command)
10
+ include StartMixins
11
+
12
+ def execute
13
+ options = {}
14
+ options[:parallel] = true
15
+
16
+ opts = OptionParser.new do |o|
17
+ o.banner = "Usage: vagrant up [vm-name] [options] [-h]"
18
+ o.separator ""
19
+
20
+ build_start_options(o, options)
21
+
22
+ o.on("--[no-]parallel",
23
+ "Enable or disable parallelism if provider supports it.") do |parallel|
24
+ options[:parallel] = parallel
25
+ end
26
+
27
+ o.on("--provider provider", String,
28
+ "Back the machine with a specific provider.") do |provider|
29
+ options[:provider] = provider
30
+ end
31
+ end
32
+
33
+ # Parse the options
34
+ argv = parse_options(opts)
35
+ return if !argv
36
+
37
+ # Go over each VM and bring it up
38
+ @logger.debug("'Up' each target VM...")
39
+
40
+ # Build up the batch job of what we'll do
41
+ @env.batch(options[:parallel]) do |batch|
42
+ with_target_vms(argv, :provider => options[:provider]) do |machine|
43
+ @env.ui.info(I18n.t(
44
+ "vagrant.commands.up.upping",
45
+ :name => machine.name,
46
+ :provider => machine.provider_name))
47
+
48
+ batch.action(machine, :up, options)
49
+ end
50
+ end
51
+
52
+ # Success, exit status 0
53
+ 0
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,17 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommandUp
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "up command"
7
+ description <<-DESC
8
+ The `up` command brings the virtual environment up and running.
9
+ DESC
10
+
11
+ command("up") do
12
+ require File.expand_path("../command", __FILE__)
13
+ Command
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+ module VagrantPlugins
2
+ module CommandUp
3
+ module StartMixins
4
+ # This adds the standard `start` command line flags to the given
5
+ # OptionParser, storing the result in the `options` dictionary.
6
+ #
7
+ # @param [OptionParser] parser
8
+ # @param [Hash] options
9
+ def build_start_options(parser, options)
10
+ # Setup the defaults
11
+ options[:provision_enabled] = true
12
+ options[:provision_types] = nil
13
+
14
+ # Add the options
15
+ parser.on("--[no-]provision", "Enable or disable provisioning") do |p|
16
+ options[:provision_enabled] = p
17
+ end
18
+
19
+ parser.on("--provision-with x,y,z", Array,
20
+ "Enable only certain provisioners, by type.") do |list|
21
+ options[:provision_types] = list.map { |type| type.to_sym }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,342 @@
1
+ require 'logger'
2
+ require 'pathname'
3
+ require 'stringio'
4
+ require 'timeout'
5
+
6
+ require 'log4r'
7
+ require 'net/ssh'
8
+ require 'net/scp'
9
+
10
+ require 'vagrant/util/ansi_escape_code_remover'
11
+ require 'vagrant/util/file_mode'
12
+ require 'vagrant/util/platform'
13
+ require 'vagrant/util/retryable'
14
+ require 'vagrant/util/ssh'
15
+
16
+ module VagrantPlugins
17
+ module CommunicatorSSH
18
+ # This class provides communication with the VM via SSH.
19
+ class Communicator < Vagrant.plugin("2", :communicator)
20
+ include Vagrant::Util::ANSIEscapeCodeRemover
21
+ include Vagrant::Util::Retryable
22
+
23
+ def self.match?(machine)
24
+ # All machines are currently expected to have SSH.
25
+ true
26
+ end
27
+
28
+ def initialize(machine)
29
+ @machine = machine
30
+ @logger = Log4r::Logger.new("vagrant::communication::ssh")
31
+ @connection = nil
32
+ end
33
+
34
+ def ready?
35
+ @logger.debug("Checking whether SSH is ready...")
36
+
37
+ # Attempt to connect. This will raise an exception if it fails.
38
+ connect
39
+
40
+ # If we reached this point then we successfully connected
41
+ @logger.info("SSH is ready!")
42
+ true
43
+ rescue Vagrant::Errors::VagrantError => e
44
+ # We catch a `VagrantError` which would signal that something went
45
+ # wrong expectedly in the `connect`, which means we didn't connect.
46
+ @logger.info("SSH not up: #{e.inspect}")
47
+ return false
48
+ end
49
+
50
+ def execute(command, opts=nil, &block)
51
+ opts = {
52
+ :error_check => true,
53
+ :error_class => Vagrant::Errors::VagrantError,
54
+ :error_key => :ssh_bad_exit_status,
55
+ :command => command,
56
+ :sudo => false
57
+ }.merge(opts || {})
58
+
59
+ # Connect via SSH and execute the command in the shell.
60
+ exit_status = connect do |connection|
61
+ shell_execute(connection, command, opts[:sudo], &block)
62
+ end
63
+
64
+ # Check for any errors
65
+ if opts[:error_check] && exit_status != 0
66
+ # The error classes expect the translation key to be _key,
67
+ # but that makes for an ugly configuration parameter, so we
68
+ # set it here from `error_key`
69
+ error_opts = opts.merge(:_key => opts[:error_key])
70
+ raise opts[:error_class], error_opts
71
+ end
72
+
73
+ # Return the exit status
74
+ exit_status
75
+ end
76
+
77
+ def sudo(command, opts=nil, &block)
78
+ # Run `execute` but with the `sudo` option.
79
+ opts = { :sudo => true }.merge(opts || {})
80
+ execute(command, opts, &block)
81
+ end
82
+
83
+ def download(from, to=nil)
84
+ @logger.debug("Downloading: #{from} to #{to}")
85
+
86
+ scp_connect do |scp|
87
+ scp.download!(from, to)
88
+ end
89
+ end
90
+
91
+ def test(command, opts=nil)
92
+ opts = { :error_check => false }.merge(opts || {})
93
+ execute(command, opts) == 0
94
+ end
95
+
96
+ def upload(from, to)
97
+ @logger.debug("Uploading: #{from} to #{to}")
98
+
99
+ scp_connect do |scp|
100
+ if File.directory?(from)
101
+ # Recurisvely upload directories
102
+ scp.upload!(from, to, :recursive => true)
103
+ else
104
+ # Open file read only to fix issue [GH-1036]
105
+ scp.upload!(File.open(from, "r"), to)
106
+ end
107
+ end
108
+ rescue RuntimeError => e
109
+ # Net::SCP raises a runtime error for this so the only way we have
110
+ # to really catch this exception is to check the message to see if
111
+ # it is something we care about. If it isn't, we re-raise.
112
+ raise if e.message !~ /Permission denied/
113
+
114
+ # Otherwise, it is a permission denied, so let's raise a proper
115
+ # exception
116
+ raise Vagrant::Errors::SCPPermissionDenied, :path => from.to_s
117
+ end
118
+
119
+ protected
120
+
121
+ # Opens an SSH connection and yields it to a block.
122
+ def connect
123
+ if @connection && !@connection.closed?
124
+ # There is a chance that the socket is closed despite us checking
125
+ # 'closed?' above. To test this we need to send data through the
126
+ # socket.
127
+ begin
128
+ @connection.exec!("")
129
+ rescue Exception => e
130
+ @logger.info("Connection errored, not re-using. Will reconnect.")
131
+ @logger.debug(e.inspect)
132
+ @connection = nil
133
+ end
134
+
135
+ # If the @connection is still around, then it is valid,
136
+ # and we use it.
137
+ if @connection
138
+ @logger.debug("Re-using SSH connection.")
139
+ return yield @connection if block_given?
140
+ return
141
+ end
142
+ end
143
+
144
+ # Get the SSH info for the machine, raise an exception if the
145
+ # provider is saying that SSH is not ready.
146
+ ssh_info = @machine.ssh_info
147
+ raise Vagrant::Errors::SSHNotReady if ssh_info.nil?
148
+
149
+ # Build the options we'll use to initiate the connection via Net::SSH
150
+ opts = {
151
+ :auth_methods => ["none", "publickey", "hostbased", "password"],
152
+ :config => false,
153
+ :forward_agent => ssh_info[:forward_agent],
154
+ :keys => [ssh_info[:private_key_path]],
155
+ :keys_only => true,
156
+ :paranoid => false,
157
+ :port => ssh_info[:port],
158
+ :user_known_hosts_file => []
159
+ }
160
+
161
+ # Check that the private key permissions are valid
162
+ Vagrant::Util::SSH.check_key_permissions(Pathname.new(ssh_info[:private_key_path]))
163
+
164
+ # Connect to SSH, giving it a few tries
165
+ connection = nil
166
+ begin
167
+ # These are the exceptions that we retry because they represent
168
+ # errors that are generally fixed from a retry and don't
169
+ # necessarily represent immediate failure cases.
170
+ exceptions = [
171
+ Errno::EACCES,
172
+ Errno::EADDRINUSE,
173
+ Errno::ECONNREFUSED,
174
+ Errno::ECONNRESET,
175
+ Errno::EHOSTUNREACH,
176
+ Net::SSH::Disconnect,
177
+ Timeout::Error
178
+ ]
179
+
180
+ retries = @machine.config.ssh.max_tries
181
+ timeout = @machine.config.ssh.timeout
182
+
183
+ @logger.info("Attempting SSH. Retries: #{retries}. Timeout: #{timeout}")
184
+ connection = retryable(:tries => retries, :on => exceptions) do
185
+ Timeout.timeout(timeout) do
186
+ begin
187
+ # This logger will get the Net-SSH log data for us.
188
+ ssh_logger_io = StringIO.new
189
+ ssh_logger = Logger.new(ssh_logger_io)
190
+
191
+ # Setup logging for connections
192
+ connect_opts = opts.merge({
193
+ :logger => ssh_logger,
194
+ :verbose => :debug
195
+ })
196
+
197
+ @logger.info("Attempting to connect to SSH...")
198
+ @logger.info(" - Host: #{ssh_info[:host]}")
199
+ @logger.info(" - Port: #{ssh_info[:port]}")
200
+ @logger.info(" - Username: #{ssh_info[:username]}")
201
+ @logger.info(" - Key Path: #{ssh_info[:private_key_path]}")
202
+
203
+ Net::SSH.start(ssh_info[:host], ssh_info[:username], connect_opts)
204
+ ensure
205
+ # Make sure we output the connection log
206
+ @logger.debug("== Net-SSH connection debug-level log START ==")
207
+ @logger.debug(ssh_logger_io.string)
208
+ @logger.debug("== Net-SSH connection debug-level log END ==")
209
+ end
210
+ end
211
+ end
212
+ rescue Errno::EACCES
213
+ # This happens on connect() for unknown reasons yet...
214
+ raise Vagrant::Errors::SSHConnectEACCES
215
+ rescue Errno::ETIMEDOUT, Timeout::Error
216
+ # This happens if we continued to timeout when attempting to connect.
217
+ raise Vagrant::Errors::SSHConnectionTimeout
218
+ rescue Net::SSH::AuthenticationFailed
219
+ # This happens if authentication failed. We wrap the error in our
220
+ # own exception.
221
+ raise Vagrant::Errors::SSHAuthenticationFailed
222
+ rescue Net::SSH::Disconnect
223
+ # This happens if the remote server unexpectedly closes the
224
+ # connection. This is usually raised when SSH is running on the
225
+ # other side but can't properly setup a connection. This is
226
+ # usually a server-side issue.
227
+ raise Vagrant::Errors::SSHDisconnected
228
+ rescue Errno::ECONNREFUSED
229
+ # This is raised if we failed to connect the max amount of times
230
+ raise Vagrant::Errors::SSHConnectionRefused
231
+ rescue Errno::ECONNRESET
232
+ # This is raised if we failed to connect the max number of times
233
+ # due to an ECONNRESET.
234
+ raise Vagrant::Errors::SSHConnectionReset
235
+ rescue Errno::EHOSTDOWN
236
+ # This is raised if we get an ICMP DestinationUnknown error.
237
+ raise Vagrant::Errors::SSHHostDown
238
+ rescue NotImplementedError
239
+ # This is raised if a private key type that Net-SSH doesn't support
240
+ # is used. Show a nicer error.
241
+ raise Vagrant::Errors::SSHKeyTypeNotSupported
242
+ end
243
+
244
+ @connection = connection
245
+
246
+ # Yield the connection that is ready to be used and
247
+ # return the value of the block
248
+ return yield connection if block_given?
249
+ end
250
+
251
+ # Executes the command on an SSH connection within a login shell.
252
+ def shell_execute(connection, command, sudo=false)
253
+ @logger.info("Execute: #{command} (sudo=#{sudo.inspect})")
254
+ exit_status = nil
255
+
256
+ # Determine the shell to execute. If we are using `sudo` then we
257
+ # need to wrap the shell in a `sudo` call.
258
+ shell = @machine.config.ssh.shell
259
+ shell = "sudo -H #{shell}" if sudo
260
+
261
+ # Open the channel so we can execute or command
262
+ channel = connection.open_channel do |ch|
263
+ ch.exec(shell) do |ch2, _|
264
+ # Setup the channel callbacks so we can get data and exit status
265
+ ch2.on_data do |ch3, data|
266
+ # Filter out the clear screen command
267
+ data = remove_ansi_escape_codes(data)
268
+ @logger.debug("stdout: #{data}")
269
+ yield :stdout, data if block_given?
270
+ end
271
+
272
+ ch2.on_extended_data do |ch3, type, data|
273
+ # Filter out the clear screen command
274
+ data = remove_ansi_escape_codes(data)
275
+ @logger.debug("stderr: #{data}")
276
+ yield :stderr, data if block_given?
277
+ end
278
+
279
+ ch2.on_request("exit-status") do |ch3, data|
280
+ exit_status = data.read_long
281
+ @logger.debug("Exit status: #{exit_status}")
282
+ end
283
+
284
+ # Set the terminal
285
+ ch2.send_data "export TERM=vt100\n"
286
+
287
+ # Output the command
288
+ ch2.send_data "#{command}\n"
289
+
290
+ # Remember to exit or this channel will hang open
291
+ ch2.send_data "exit\n"
292
+
293
+ # Send eof to let server know we're done
294
+ ch2.eof!
295
+ end
296
+ end
297
+
298
+ begin
299
+ keep_alive = nil
300
+
301
+ if @machine.config.ssh.keep_alive
302
+ # Begin sending keep-alive packets while we wait for the script
303
+ # to complete. This avoids connections closing on long-running
304
+ # scripts.
305
+ keep_alive = Thread.new do
306
+ loop do
307
+ sleep 5
308
+ @logger.debug("Sending SSH keep-alive...")
309
+ connection.send_global_request("keep-alive@openssh.com")
310
+ end
311
+ end
312
+ end
313
+
314
+ # Wait for the channel to complete
315
+ channel.wait
316
+ ensure
317
+ # Kill the keep-alive thread
318
+ keep_alive.kill if keep_alive
319
+ end
320
+
321
+ # Return the final exit status
322
+ return exit_status
323
+ end
324
+
325
+ # Opens an SCP connection and yields it so that you can download
326
+ # and upload files.
327
+ def scp_connect
328
+ # Connect to SCP and yield the SCP object
329
+ connect do |connection|
330
+ scp = Net::SCP.new(connection)
331
+ return yield scp
332
+ end
333
+ rescue Net::SCP::Error => e
334
+ # If we get the exit code of 127, then this means SCP is unavailable.
335
+ raise Vagrant::Errors::SCPUnavailable if e.message =~ /\(127\)/
336
+
337
+ # Otherwise, just raise the error up
338
+ raise
339
+ end
340
+ end
341
+ end
342
+ end
@@ -0,0 +1,19 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module CommunicatorSSH
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "ssh communicator"
7
+ description <<-DESC
8
+ This plugin allows Vagrant to communicate with remote machines using
9
+ SSH as the underlying protocol, powered internally by Ruby's
10
+ net-ssh library.
11
+ DESC
12
+
13
+ communicator("ssh") do
14
+ require File.expand_path("../communicator", __FILE__)
15
+ Communicator
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ module VagrantPlugins
2
+ module GuestArch
3
+ module Cap
4
+ class ChangeHostName
5
+ def self.change_host_name(machine, name)
6
+ machine.communicate.tap do |comm|
7
+ # Only do this if the hostname is not already set
8
+ if !comm.test("sudo hostname | grep '#{name}'")
9
+ comm.sudo("sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/rc.conf")
10
+ comm.sudo("hostname #{name}")
11
+ comm.sudo("sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} @' /etc/hosts")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ module VagrantPlugins
2
+ module GuestArch
3
+ module Cap
4
+ class ConfigureNetworks
5
+ def self.configure_networks(machine, networks)
6
+ networks.each do |network|
7
+ entry = TemplateRenderer.render("guests/arch/network_#{network[:type]}",
8
+ :options => network)
9
+
10
+ temp = Tempfile.new("vagrant")
11
+ temp.binmode
12
+ temp.write(entry)
13
+ temp.close
14
+
15
+ machine.communicate.upload(temp.path, "/tmp/vagrant_network")
16
+ machine.communicate.sudo("mv /tmp/vagrant_network /etc/network.d/interfaces/eth#{network[:interface]}")
17
+ machine.communicate.sudo("netcfg interfaces/eth#{network[:interface]}")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module GuestArch
5
+ class Guest < Vagrant.plugin("2", :guest)
6
+ def detect?(machine)
7
+ machine.communicate.test("cat /etc/arch-release")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module GuestArch
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "Arch guest"
7
+ description "Arch guest support."
8
+
9
+ guest("arch", "linux") do
10
+ require File.expand_path("../guest", __FILE__)
11
+ Guest
12
+ end
13
+
14
+ guest_capability("arch", "change_host_name") do
15
+ require_relative "cap/change_host_name"
16
+ Cap::ChangeHostName
17
+ end
18
+
19
+ guest_capability("arch", "configure_networks") do
20
+ require_relative "cap/configure_networks"
21
+ Cap::ConfigureNetworks
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ module VagrantPlugins
2
+ module GuestDebian
3
+ module Cap
4
+ class ChangeHostName
5
+ def self.change_host_name(machine, name)
6
+ machine.communicate.tap do |comm|
7
+ if !comm.test("hostname --fqdn | grep '^#{name}$' || hostname --short | grep '^#{name}$'")
8
+ comm.sudo("sed -r -i 's/^(127[.]0[.]1[.]1[[:space:]]+).*$/\\1#{name} #{name.split('.')[0]}/' /etc/hosts")
9
+ comm.sudo("sed -i 's/.*$/#{name.split('.')[0]}/' /etc/hostname")
10
+ comm.sudo("hostname -F /etc/hostname")
11
+ comm.sudo("hostname --fqdn > /etc/mailname")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,61 @@
1
+ require 'set'
2
+ require 'tempfile'
3
+
4
+ require "vagrant/util/template_renderer"
5
+
6
+ module VagrantPlugins
7
+ module GuestDebian
8
+ module Cap
9
+ class ConfigureNetworks
10
+ include Vagrant::Util
11
+
12
+ def self.configure_networks(machine, networks)
13
+ machine.communicate.tap do |comm|
14
+ # First, remove any previous network modifications
15
+ # from the interface file.
16
+ comm.sudo("sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/network/interfaces > /tmp/vagrant-network-interfaces")
17
+ comm.sudo("su -c 'cat /tmp/vagrant-network-interfaces > /etc/network/interfaces'")
18
+ comm.sudo("rm /tmp/vagrant-network-interfaces")
19
+
20
+ # Accumulate the configurations to add to the interfaces file as
21
+ # well as what interfaces we're actually configuring since we use that
22
+ # later.
23
+ interfaces = Set.new
24
+ entries = []
25
+ networks.each do |network|
26
+ interfaces.add(network[:interface])
27
+ entry = TemplateRenderer.render("guests/debian/network_#{network[:type]}",
28
+ :options => network)
29
+
30
+ entries << entry
31
+ end
32
+
33
+ # Perform the careful dance necessary to reconfigure
34
+ # the network interfaces
35
+ temp = Tempfile.new("vagrant")
36
+ temp.binmode
37
+ temp.write(entries.join("\n"))
38
+ temp.close
39
+
40
+ comm.upload(temp.path, "/tmp/vagrant-network-entry")
41
+
42
+ # Bring down all the interfaces we're reconfiguring. By bringing down
43
+ # each specifically, we avoid reconfiguring eth0 (the NAT interface) so
44
+ # SSH never dies.
45
+ interfaces.each do |interface|
46
+ comm.sudo("/sbin/ifdown eth#{interface} 2> /dev/null")
47
+ end
48
+
49
+ comm.sudo("cat /tmp/vagrant-network-entry >> /etc/network/interfaces")
50
+ comm.sudo("rm /tmp/vagrant-network-entry")
51
+
52
+ # Bring back up each network interface, reconfigured
53
+ interfaces.each do |interface|
54
+ comm.sudo("/sbin/ifup eth#{interface}")
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,9 @@
1
+ module VagrantPlugins
2
+ module GuestDebian
3
+ class Guest < Vagrant.plugin("2", :guest)
4
+ def detect?(machine)
5
+ machine.communicate.test("cat /proc/version | grep 'Debian'")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ require "vagrant"
2
+
3
+ module VagrantPlugins
4
+ module GuestDebian
5
+ class Plugin < Vagrant.plugin("2")
6
+ name "Debian guest"
7
+ description "Debian guest support."
8
+
9
+ guest("debian", "linux") do
10
+ require File.expand_path("../guest", __FILE__)
11
+ Guest
12
+ end
13
+
14
+ guest_capability("debian", "configure_networks") do
15
+ require_relative "cap/configure_networks"
16
+ Cap::ConfigureNetworks
17
+ end
18
+
19
+ guest_capability("debian", "change_host_name") do
20
+ require_relative "cap/change_host_name"
21
+ Cap::ChangeHostName
22
+ end
23
+ end
24
+ end
25
+ end