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,721 @@
1
+ require File.expand_path("../../base", __FILE__)
2
+ require "json"
3
+ require "pathname"
4
+ require "tempfile"
5
+ require "tmpdir"
6
+
7
+ require "vagrant/util/file_mode"
8
+
9
+ describe Vagrant::Environment do
10
+ include_context "unit"
11
+
12
+ let(:env) do
13
+ isolated_environment.tap do |e|
14
+ e.box2("base", :virtualbox)
15
+ e.vagrantfile <<-VF
16
+ Vagrant.configure("2") do |config|
17
+ config.vm.box = "base"
18
+ end
19
+ VF
20
+ end
21
+ end
22
+
23
+ let(:instance) { env.create_vagrant_env }
24
+
25
+ subject { instance }
26
+
27
+ describe "active machines" do
28
+ it "should be empty if the machines folder doesn't exist" do
29
+ folder = instance.local_data_path.join("machines")
30
+ folder.should_not be_exist
31
+
32
+ instance.active_machines.should be_empty
33
+ end
34
+
35
+ it "should return the name and provider of active machines" do
36
+ machines = instance.local_data_path.join("machines")
37
+
38
+ # Valid machine, with "foo" and virtualbox
39
+ machine_foo = machines.join("foo/virtualbox")
40
+ machine_foo.mkpath
41
+ machine_foo.join("id").open("w+") { |f| f.write("") }
42
+
43
+ # Invalid machine (no ID)
44
+ machine_bar = machines.join("bar/virtualbox")
45
+ machine_bar.mkpath
46
+
47
+ instance.active_machines.should == [[:foo, :virtualbox]]
48
+ end
49
+ end
50
+
51
+ describe "batching" do
52
+ let(:batch) do
53
+ double("batch") do |b|
54
+ b.stub(:run)
55
+ end
56
+ end
57
+
58
+ context "without the disabling env var" do
59
+ it "should run without disabling parallelization" do
60
+ with_temp_env("VAGRANT_NO_PARALLEL" => nil) do
61
+ Vagrant::BatchAction.should_receive(:new).with(true).and_return(batch)
62
+ batch.should_receive(:run)
63
+
64
+ instance.batch {}
65
+ end
66
+ end
67
+
68
+ it "should run with disabling parallelization if explicit" do
69
+ with_temp_env("VAGRANT_NO_PARALLEL" => nil) do
70
+ Vagrant::BatchAction.should_receive(:new).with(false).and_return(batch)
71
+ batch.should_receive(:run)
72
+
73
+ instance.batch(false) {}
74
+ end
75
+ end
76
+ end
77
+
78
+ context "with the disabling env var" do
79
+ it "should run with disabling parallelization" do
80
+ with_temp_env("VAGRANT_NO_PARALLEL" => "yes") do
81
+ Vagrant::BatchAction.should_receive(:new).with(false).and_return(batch)
82
+ batch.should_receive(:run)
83
+
84
+ instance.batch {}
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ describe "current working directory" do
91
+ it "is the cwd by default" do
92
+ Dir.mktmpdir do |temp_dir|
93
+ Dir.chdir(temp_dir) do
94
+ with_temp_env("VAGRANT_CWD" => nil) do
95
+ described_class.new.cwd.should == Pathname.new(Dir.pwd)
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ it "is set to the cwd given" do
102
+ Dir.mktmpdir do |directory|
103
+ instance = described_class.new(:cwd => directory)
104
+ instance.cwd.should == Pathname.new(directory)
105
+ end
106
+ end
107
+
108
+ it "is set to the environmental variable VAGRANT_CWD" do
109
+ Dir.mktmpdir do |directory|
110
+ instance = with_temp_env("VAGRANT_CWD" => directory) do
111
+ described_class.new
112
+ end
113
+
114
+ instance.cwd.should == Pathname.new(directory)
115
+ end
116
+ end
117
+
118
+ it "raises an exception if the CWD doesn't exist" do
119
+ expect { described_class.new(:cwd => "doesntexist") }.
120
+ to raise_error(Vagrant::Errors::EnvironmentNonExistentCWD)
121
+ end
122
+ end
123
+
124
+ describe "default provider" do
125
+ it "is virtualbox without any environmental variable" do
126
+ with_temp_env("VAGRANT_DEFAULT_PROVIDER" => nil) do
127
+ subject.default_provider.should == :virtualbox
128
+ end
129
+ end
130
+
131
+ it "is whatever the environmental variable is if set" do
132
+ with_temp_env("VAGRANT_DEFAULT_PROVIDER" => "foo") do
133
+ subject.default_provider.should == :foo
134
+ end
135
+ end
136
+ end
137
+
138
+ describe "home path" do
139
+ it "is set to the home path given" do
140
+ Dir.mktmpdir do |dir|
141
+ instance = described_class.new(:home_path => dir)
142
+ instance.home_path.should == Pathname.new(dir)
143
+ end
144
+ end
145
+
146
+ it "is set to the environmental variable VAGRANT_HOME" do
147
+ Dir.mktmpdir do |dir|
148
+ instance = with_temp_env("VAGRANT_HOME" => dir) do
149
+ described_class.new
150
+ end
151
+
152
+ instance.home_path.should == Pathname.new(dir)
153
+ end
154
+ end
155
+
156
+ context "default home path" do
157
+ before :each do
158
+ Vagrant::Util::Platform.stub(:windows? => false)
159
+ end
160
+
161
+ it "is set to '~/.vagrant.d' by default" do
162
+ expected = Pathname.new(File.expand_path("~/.vagrant.d"))
163
+ described_class.new.home_path.should == expected
164
+ end
165
+
166
+ it "is set to '~/.vagrant.d' if on Windows but no USERPROFILE" do
167
+ Vagrant::Util::Platform.stub(:windows? => true)
168
+
169
+ expected = Pathname.new(File.expand_path("~/.vagrant.d"))
170
+
171
+ with_temp_env("USERPROFILE" => nil) do
172
+ described_class.new.home_path.should == expected
173
+ end
174
+ end
175
+
176
+ it "is set to '%USERPROFILE%/.vagrant.d' if on Windows and USERPROFILE is set" do
177
+ Vagrant::Util::Platform.stub(:windows? => true)
178
+
179
+ Dir.mktmpdir do |dir|
180
+ expected = Pathname.new(File.expand_path("#{dir}/.vagrant.d"))
181
+
182
+ with_temp_env("USERPROFILE" => dir) do
183
+ described_class.new.home_path.should == expected
184
+ end
185
+ end
186
+ end
187
+ end
188
+
189
+ it "throws an exception if inaccessible" do
190
+ expect {
191
+ described_class.new(:home_path => "/")
192
+ }.to raise_error(Vagrant::Errors::HomeDirectoryNotAccessible)
193
+ end
194
+ end
195
+
196
+ describe "local data path" do
197
+ it "is set to the proper default" do
198
+ default = instance.root_path.join(described_class::DEFAULT_LOCAL_DATA)
199
+ instance.local_data_path.should == default
200
+ end
201
+
202
+ it "is expanded relative to the cwd" do
203
+ instance = described_class.new(:local_data_path => "foo")
204
+ instance.local_data_path.should == instance.cwd.join("foo")
205
+ end
206
+
207
+ it "is set to the given value" do
208
+ Dir.mktmpdir do |dir|
209
+ instance = described_class.new(:local_data_path => dir)
210
+ instance.local_data_path.to_s.should == dir
211
+ end
212
+ end
213
+
214
+ describe "upgrading V1 dotfiles" do
215
+ let(:v1_dotfile_tempfile) { Tempfile.new("vagrant") }
216
+ let(:v1_dotfile) { Pathname.new(v1_dotfile_tempfile.path) }
217
+ let(:local_data_path) { v1_dotfile_tempfile.path }
218
+ let(:instance) { described_class.new(:local_data_path => local_data_path) }
219
+
220
+ it "should be fine if dotfile is empty" do
221
+ v1_dotfile.open("w+") do |f|
222
+ f.write("")
223
+ end
224
+
225
+ expect { instance }.to_not raise_error
226
+ Pathname.new(local_data_path).should be_directory
227
+ end
228
+
229
+ it "should upgrade all active VMs" do
230
+ active_vms = {
231
+ "foo" => "foo_id",
232
+ "bar" => "bar_id"
233
+ }
234
+
235
+ v1_dotfile.open("w+") do |f|
236
+ f.write(JSON.dump({
237
+ "active" => active_vms
238
+ }))
239
+ end
240
+
241
+ expect { instance }.to_not raise_error
242
+
243
+ local_data_pathname = Pathname.new(local_data_path)
244
+ foo_id_file = local_data_pathname.join("machines/foo/virtualbox/id")
245
+ foo_id_file.should be_file
246
+ foo_id_file.read.should == "foo_id"
247
+
248
+ bar_id_file = local_data_pathname.join("machines/bar/virtualbox/id")
249
+ bar_id_file.should be_file
250
+ bar_id_file.read.should == "bar_id"
251
+ end
252
+
253
+ it "should raise an error if invalid JSON" do
254
+ v1_dotfile.open("w+") do |f|
255
+ f.write("bad")
256
+ end
257
+
258
+ expect { instance }.
259
+ to raise_error(Vagrant::Errors::DotfileUpgradeJSONError)
260
+ end
261
+ end
262
+ end
263
+
264
+ describe "copying the private SSH key" do
265
+ it "copies the SSH key into the home directory" do
266
+ env = isolated_environment
267
+ instance = described_class.new(:home_path => env.homedir)
268
+
269
+ pk = env.homedir.join("insecure_private_key")
270
+ pk.should be_exist
271
+ Vagrant::Util::FileMode.from_octal(pk.stat.mode).should == "600"
272
+ end
273
+ end
274
+
275
+ it "has a box collection pointed to the proper directory" do
276
+ collection = instance.boxes
277
+ collection.should be_kind_of(Vagrant::BoxCollection)
278
+ collection.directory.should == instance.boxes_path
279
+ end
280
+
281
+ describe "action runner" do
282
+ it "has an action runner" do
283
+ instance.action_runner.should be_kind_of(Vagrant::Action::Runner)
284
+ end
285
+
286
+ it "has a `ui` in the globals" do
287
+ result = nil
288
+ callable = lambda { |env| result = env[:ui] }
289
+
290
+ instance.action_runner.run(callable)
291
+ result.should eql(instance.ui)
292
+ end
293
+ end
294
+
295
+ describe "#hook" do
296
+ it "should call the action runner with the proper hook" do
297
+ hook_name = :foo
298
+
299
+ instance.action_runner.should_receive(:run).with do |callable, env|
300
+ env[:action_name].should == hook_name
301
+ end
302
+
303
+ instance.hook(hook_name)
304
+ end
305
+
306
+ it "should return the result of the action runner run" do
307
+ instance.action_runner.should_receive(:run).and_return(:foo)
308
+
309
+ instance.hook(:bar).should == :foo
310
+ end
311
+ end
312
+
313
+ describe "primary machine name" do
314
+ it "should be the only machine if not a multi-machine environment" do
315
+ instance.primary_machine_name.should == instance.machine_names.first
316
+ end
317
+
318
+ it "should be the machine marked as the primary" do
319
+ environment = isolated_environment do |env|
320
+ env.vagrantfile(<<-VF)
321
+ Vagrant.configure("2") do |config|
322
+ config.vm.box = "base"
323
+ config.vm.define :foo
324
+ config.vm.define :bar, :primary => true
325
+ end
326
+ VF
327
+
328
+ env.box2("base", :virtualbox)
329
+ end
330
+
331
+ env = environment.create_vagrant_env
332
+ env.primary_machine_name.should == :bar
333
+ end
334
+
335
+ it "should be nil if no primary is specified in a multi-machine environment" do
336
+ environment = isolated_environment do |env|
337
+ env.vagrantfile(<<-VF)
338
+ Vagrant.configure("2") do |config|
339
+ config.vm.box = "base"
340
+ config.vm.define :foo
341
+ config.vm.define :bar
342
+ end
343
+ VF
344
+
345
+ env.box2("base", :virtualbox)
346
+ end
347
+
348
+ env = environment.create_vagrant_env
349
+ env.primary_machine_name.should be_nil
350
+ end
351
+ end
352
+
353
+ describe "loading configuration" do
354
+ it "should load global configuration" do
355
+ environment = isolated_environment do |env|
356
+ env.vagrantfile(<<-VF)
357
+ Vagrant.configure("2") do |config|
358
+ config.ssh.port = 200
359
+ end
360
+ VF
361
+ end
362
+
363
+ env = environment.create_vagrant_env
364
+ env.config_global.ssh.port.should == 200
365
+ end
366
+
367
+ it "should load from a custom Vagrantfile" do
368
+ environment = isolated_environment do |env|
369
+ env.file("non_standard_name", <<-VF)
370
+ Vagrant.configure("2") do |config|
371
+ config.ssh.port = 200
372
+ end
373
+ VF
374
+ end
375
+
376
+ env = environment.create_vagrant_env(:vagrantfile_name => "non_standard_name")
377
+ env.config_global.ssh.port.should == 200
378
+ end
379
+
380
+ it "should load from a custom Vagrantfile specified by env var" do
381
+ environment = isolated_environment do |env|
382
+ env.file("some_other_name", <<-VF)
383
+ Vagrant.configure("2") do |config|
384
+ config.ssh.port = 400
385
+ end
386
+ VF
387
+ end
388
+
389
+ env = with_temp_env("VAGRANT_VAGRANTFILE" => "some_other_name") do
390
+ environment.create_vagrant_env
391
+ end
392
+
393
+ env.config_global.ssh.port.should == 400
394
+ end
395
+ end
396
+
397
+ describe "ui" do
398
+ it "should be a silent UI by default" do
399
+ described_class.new.ui.should be_kind_of(Vagrant::UI::Silent)
400
+ end
401
+
402
+ it "should be a UI given in the constructor" do
403
+ # Create a custom UI for our test
404
+ class CustomUI < Vagrant::UI::Interface; end
405
+
406
+ instance = described_class.new(:ui_class => CustomUI)
407
+ instance.ui.should be_kind_of(CustomUI)
408
+ end
409
+ end
410
+
411
+ describe "#unload" do
412
+ it "should run the unload hook" do
413
+ instance.should_receive(:hook).with(:environment_unload).once
414
+ instance.unload
415
+ end
416
+ end
417
+
418
+ describe "getting a machine" do
419
+ # A helper to register a provider for use in tests.
420
+ def register_provider(name, config_class=nil, options=nil)
421
+ provider_cls = Class.new(Vagrant.plugin("2", :provider))
422
+
423
+ register_plugin("2") do |p|
424
+ p.provider(name, options) { provider_cls }
425
+
426
+ if config_class
427
+ p.config(name, :provider) { config_class }
428
+ end
429
+ end
430
+
431
+ provider_cls
432
+ end
433
+
434
+ it "should return a machine object with the correct provider" do
435
+ # Create a provider
436
+ foo_provider = register_provider("foo")
437
+
438
+ # Create the configuration
439
+ isolated_env = isolated_environment do |e|
440
+ e.vagrantfile(<<-VF)
441
+ Vagrant.configure("2") do |config|
442
+ config.vm.box = "base"
443
+ config.vm.define "foo"
444
+ end
445
+ VF
446
+
447
+ e.box2("base", :foo)
448
+ end
449
+
450
+ # Verify that we can get the machine
451
+ env = isolated_env.create_vagrant_env
452
+ machine = env.machine(:foo, :foo)
453
+ machine.should be_kind_of(Vagrant::Machine)
454
+ machine.name.should == :foo
455
+ machine.provider.should be_kind_of(foo_provider)
456
+ machine.provider_config.should be_nil
457
+ end
458
+
459
+ it "should return a machine object with the machine configuration" do
460
+ # Create a provider
461
+ foo_config = Class.new(Vagrant.plugin("2", :config)) do
462
+ attr_accessor :value
463
+ end
464
+
465
+ foo_provider = register_provider("foo", foo_config)
466
+
467
+ # Create the configuration
468
+ isolated_env = isolated_environment do |e|
469
+ e.vagrantfile(<<-VF)
470
+ Vagrant.configure("2") do |config|
471
+ config.vm.box = "base"
472
+ config.vm.define "foo"
473
+
474
+ config.vm.provider :foo do |fooconfig|
475
+ fooconfig.value = 100
476
+ end
477
+ end
478
+ VF
479
+
480
+ e.box2("base", :foo)
481
+ end
482
+
483
+ # Verify that we can get the machine
484
+ env = isolated_env.create_vagrant_env
485
+ machine = env.machine(:foo, :foo)
486
+ machine.should be_kind_of(Vagrant::Machine)
487
+ machine.name.should == :foo
488
+ machine.provider.should be_kind_of(foo_provider)
489
+ machine.provider_config.value.should == 100
490
+ end
491
+
492
+ it "should cache the machine objects by name and provider" do
493
+ # Create a provider
494
+ foo_provider = register_provider("foo")
495
+ bar_provider = register_provider("bar")
496
+
497
+ # Create the configuration
498
+ isolated_env = isolated_environment do |e|
499
+ e.vagrantfile(<<-VF)
500
+ Vagrant.configure("2") do |config|
501
+ config.vm.box = "base"
502
+ config.vm.define "vm1"
503
+ config.vm.define "vm2"
504
+ end
505
+ VF
506
+
507
+ e.box2("base", :foo)
508
+ e.box2("base", :bar)
509
+ end
510
+
511
+ env = isolated_env.create_vagrant_env
512
+ vm1_foo = env.machine(:vm1, :foo)
513
+ vm1_bar = env.machine(:vm1, :bar)
514
+ vm2_foo = env.machine(:vm2, :foo)
515
+
516
+ vm1_foo.should eql(env.machine(:vm1, :foo))
517
+ vm1_bar.should eql(env.machine(:vm1, :bar))
518
+ vm1_foo.should_not eql(vm1_bar)
519
+ vm2_foo.should eql(env.machine(:vm2, :foo))
520
+ end
521
+
522
+ it "should load a machine without a box" do
523
+ register_provider("foo")
524
+
525
+ environment = isolated_environment do |env|
526
+ env.vagrantfile(<<-VF)
527
+ Vagrant.configure("2") do |config|
528
+ config.vm.box = "i-dont-exist"
529
+ end
530
+ VF
531
+ end
532
+
533
+ env = environment.create_vagrant_env
534
+ machine = env.machine(:default, :foo)
535
+ machine.box.should be_nil
536
+ end
537
+
538
+ it "should load the machine configuration" do
539
+ register_provider("foo")
540
+
541
+ environment = isolated_environment do |env|
542
+ env.vagrantfile(<<-VF)
543
+ Vagrant.configure("2") do |config|
544
+ config.ssh.port = 1
545
+ config.vm.box = "base"
546
+
547
+ config.vm.define "vm1" do |inner|
548
+ inner.ssh.port = 100
549
+ end
550
+ end
551
+ VF
552
+
553
+ env.box2("base", :foo)
554
+ end
555
+
556
+ env = environment.create_vagrant_env
557
+ machine = env.machine(:vm1, :foo)
558
+ machine.config.ssh.port.should == 100
559
+ machine.config.vm.box.should == "base"
560
+ end
561
+
562
+ it "should load the box configuration for a V2 box" do
563
+ register_provider("foo")
564
+
565
+ environment = isolated_environment do |env|
566
+ env.vagrantfile(<<-VF)
567
+ Vagrant.configure("2") do |config|
568
+ config.vm.box = "base"
569
+ end
570
+ VF
571
+
572
+ env.box2("base", :foo, :vagrantfile => <<-VF)
573
+ Vagrant.configure("2") do |config|
574
+ config.ssh.port = 100
575
+ end
576
+ VF
577
+ end
578
+
579
+ env = environment.create_vagrant_env
580
+ machine = env.machine(:default, :foo)
581
+ machine.config.ssh.port.should == 100
582
+ end
583
+
584
+ it "should load the box configuration for other formats for a V2 box" do
585
+ register_provider("foo", nil, box_format: "bar")
586
+
587
+ environment = isolated_environment do |env|
588
+ env.vagrantfile(<<-VF)
589
+ Vagrant.configure("2") do |config|
590
+ config.vm.box = "base"
591
+ end
592
+ VF
593
+
594
+ env.box2("base", :bar, :vagrantfile => <<-VF)
595
+ Vagrant.configure("2") do |config|
596
+ config.ssh.port = 100
597
+ end
598
+ VF
599
+ end
600
+
601
+ env = environment.create_vagrant_env
602
+ machine = env.machine(:default, :foo)
603
+ machine.config.ssh.port.should == 100
604
+ end
605
+
606
+ it "prefer sooner formats when multiple box formats are available" do
607
+ register_provider("foo", nil, box_format: ["fA", "fB"])
608
+
609
+ environment = isolated_environment do |env|
610
+ env.vagrantfile(<<-VF)
611
+ Vagrant.configure("2") do |config|
612
+ config.vm.box = "base"
613
+ end
614
+ VF
615
+
616
+ env.box2("base", :fA, :vagrantfile => <<-VF)
617
+ Vagrant.configure("2") do |config|
618
+ config.ssh.port = 100
619
+ end
620
+ VF
621
+
622
+ env.box2("base", :fB, :vagrantfile => <<-VF)
623
+ Vagrant.configure("2") do |config|
624
+ config.ssh.port = 200
625
+ end
626
+ VF
627
+ end
628
+
629
+ env = environment.create_vagrant_env
630
+ machine = env.machine(:default, :foo)
631
+ machine.config.ssh.port.should == 100
632
+ end
633
+
634
+ it "should load the provider override if set" do
635
+ register_provider("bar")
636
+ register_provider("foo")
637
+
638
+ isolated_env = isolated_environment do |e|
639
+ e.vagrantfile(<<-VF)
640
+ Vagrant.configure("2") do |config|
641
+ config.vm.box = "foo"
642
+
643
+ config.vm.provider :foo do |_, c|
644
+ c.vm.box = "bar"
645
+ end
646
+ end
647
+ VF
648
+ end
649
+
650
+ env = isolated_env.create_vagrant_env
651
+ foo_vm = env.machine(:default, :foo)
652
+ bar_vm = env.machine(:default, :bar)
653
+ foo_vm.config.vm.box.should == "bar"
654
+ bar_vm.config.vm.box.should == "foo"
655
+ end
656
+
657
+ it "should reload the cache if refresh is set" do
658
+ # Create a provider
659
+ foo_provider = register_provider("foo")
660
+
661
+ # Create the configuration
662
+ isolated_env = isolated_environment do |e|
663
+ e.vagrantfile(<<-VF)
664
+ Vagrant.configure("2") do |config|
665
+ config.vm.box = "base"
666
+ end
667
+ VF
668
+
669
+ e.box2("base", :foo)
670
+ end
671
+
672
+ env = isolated_env.create_vagrant_env
673
+ vm1 = env.machine(:default, :foo)
674
+ vm2 = env.machine(:default, :foo, true)
675
+ vm3 = env.machine(:default, :foo)
676
+
677
+ vm1.should_not eql(vm2)
678
+ vm2.should eql(vm3)
679
+ end
680
+
681
+ it "should raise an error if the VM is not found" do
682
+ expect { instance.machine("i-definitely-dont-exist", :virtualbox) }.
683
+ to raise_error(Vagrant::Errors::MachineNotFound)
684
+ end
685
+
686
+ it "should raise an error if the provider is not found" do
687
+ expect { instance.machine(:default, :lol_no) }.
688
+ to raise_error(Vagrant::Errors::ProviderNotFound)
689
+ end
690
+ end
691
+
692
+ describe "getting machine names" do
693
+ it "should return the default machine if no multi-VM is used" do
694
+ # Create the config
695
+ isolated_env = isolated_environment do |e|
696
+ e.vagrantfile(<<-VF)
697
+ Vagrant.configure("2") do |config|
698
+ end
699
+ VF
700
+ end
701
+
702
+ env = isolated_env.create_vagrant_env
703
+ env.machine_names.should == [:default]
704
+ end
705
+
706
+ it "should return the machine names in order" do
707
+ # Create the config
708
+ isolated_env = isolated_environment do |e|
709
+ e.vagrantfile(<<-VF)
710
+ Vagrant.configure("2") do |config|
711
+ config.vm.define "foo"
712
+ config.vm.define "bar"
713
+ end
714
+ VF
715
+ end
716
+
717
+ env = isolated_env.create_vagrant_env
718
+ env.machine_names.should == [:foo, :bar]
719
+ end
720
+ end
721
+ end