vagrant-unbundled 1.8.1.2 → 1.8.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (348) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -13
  3. data/.travis.yml +3 -0
  4. data/CHANGELOG.md +167 -4
  5. data/LICENSE +1 -1
  6. data/README.md +7 -9
  7. data/RELEASE.md +28 -0
  8. data/bin/vagrant +1 -1
  9. data/contrib/bash/completion.sh +6 -1
  10. data/contrib/sudoers/linux-fedora +1 -1
  11. data/keys/README.md +1 -1
  12. data/lib/vagrant/action/builtin/box_add.rb +7 -3
  13. data/lib/vagrant/action/general/package.rb +47 -13
  14. data/lib/vagrant/box.rb +1 -1
  15. data/lib/vagrant/box_collection.rb +3 -4
  16. data/lib/vagrant/bundler.rb +29 -11
  17. data/lib/vagrant/machine.rb +14 -5
  18. data/lib/vagrant/ui.rb +1 -1
  19. data/lib/vagrant/util/is_port_open.rb +1 -1
  20. data/lib/vagrant/util/platform.rb +67 -42
  21. data/plugins/commands/box/command/remove.rb +1 -1
  22. data/plugins/commands/box/command/update.rb +10 -0
  23. data/plugins/commands/destroy/command.rb +1 -1
  24. data/plugins/commands/halt/command.rb +1 -1
  25. data/plugins/commands/init/command.rb +8 -2
  26. data/plugins/commands/login/client.rb +19 -1
  27. data/plugins/commands/package/command.rb +1 -1
  28. data/plugins/commands/plugin/command/mixin_install_opts.rb +1 -1
  29. data/plugins/commands/plugin/gem_helper.rb +1 -1
  30. data/plugins/commands/port/command.rb +1 -1
  31. data/plugins/commands/rdp/command.rb +1 -1
  32. data/plugins/commands/resume/command.rb +15 -1
  33. data/plugins/commands/snapshot/command/pop.rb +16 -1
  34. data/plugins/commands/snapshot/command/push_shared.rb +7 -9
  35. data/plugins/commands/snapshot/command/restore.rb +14 -1
  36. data/plugins/commands/ssh/command.rb +2 -1
  37. data/plugins/commands/ssh_config/command.rb +1 -1
  38. data/plugins/commands/status/command.rb +1 -1
  39. data/plugins/commands/suspend/command.rb +1 -1
  40. data/plugins/commands/up/command.rb +4 -4
  41. data/plugins/communicators/ssh/communicator.rb +2 -2
  42. data/plugins/communicators/winrm/communicator.rb +11 -11
  43. data/plugins/communicators/winrm/config.rb +7 -1
  44. data/plugins/communicators/winrm/shell.rb +41 -41
  45. data/plugins/guests/amazon/cap/flavor.rb +14 -0
  46. data/plugins/guests/amazon/guest.rb +9 -0
  47. data/plugins/guests/amazon/plugin.rb +20 -0
  48. data/plugins/guests/arch/cap/change_host_name.rb +15 -6
  49. data/plugins/guests/arch/cap/configure_networks.rb +33 -14
  50. data/plugins/guests/arch/plugin.rb +1 -1
  51. data/plugins/guests/atomic/cap/change_host_name.rb +16 -1
  52. data/plugins/guests/atomic/plugin.rb +2 -2
  53. data/plugins/guests/coreos/cap/change_host_name.rb +10 -4
  54. data/plugins/guests/coreos/cap/configure_networks.rb +49 -37
  55. data/plugins/guests/coreos/guest.rb +2 -0
  56. data/plugins/guests/coreos/plugin.rb +1 -1
  57. data/plugins/guests/darwin/cap/change_host_name.rb +25 -7
  58. data/plugins/guests/darwin/cap/choose_addressable_ip_addr.rb +7 -7
  59. data/plugins/guests/darwin/cap/insert_public_key.rb +19 -7
  60. data/plugins/guests/darwin/guest.rb +1 -1
  61. data/plugins/guests/darwin/plugin.rb +1 -1
  62. data/plugins/guests/debian/cap/change_host_name.rb +37 -84
  63. data/plugins/guests/debian/cap/configure_networks.rb +61 -46
  64. data/plugins/guests/debian/cap/nfs_client.rb +5 -4
  65. data/plugins/guests/debian/cap/rsync.rb +6 -3
  66. data/plugins/guests/debian/cap/smb.rb +6 -7
  67. data/plugins/guests/debian/guest.rb +2 -0
  68. data/plugins/guests/debian/plugin.rb +1 -1
  69. data/plugins/guests/fedora/cap/change_host_name.rb +18 -64
  70. data/plugins/guests/fedora/cap/configure_networks.rb +10 -9
  71. data/plugins/guests/fedora/plugin.rb +1 -1
  72. data/plugins/guests/freebsd/cap/change_host_name.rb +21 -3
  73. data/plugins/guests/freebsd/cap/configure_networks.rb +45 -30
  74. data/plugins/guests/freebsd/cap/halt.rb +1 -1
  75. data/plugins/guests/freebsd/cap/insert_public_key.rb +21 -8
  76. data/plugins/guests/freebsd/cap/mount_nfs_folder.rb +10 -7
  77. data/plugins/guests/freebsd/cap/rsync.rb +1 -11
  78. data/plugins/guests/freebsd/plugin.rb +1 -1
  79. data/plugins/guests/funtoo/cap/configure_networks.rb +10 -6
  80. data/plugins/guests/gentoo/cap/configure_networks.rb +9 -8
  81. data/plugins/guests/linux/cap/choose_addressable_ip_addr.rb +6 -6
  82. data/plugins/guests/linux/cap/insert_public_key.rb +18 -8
  83. data/plugins/guests/linux/cap/mount_nfs.rb +16 -12
  84. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +2 -2
  85. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +1 -1
  86. data/plugins/guests/linux/guest.rb +0 -2
  87. data/plugins/guests/linux/plugin.rb +1 -1
  88. data/plugins/guests/mint/guest.rb +0 -2
  89. data/plugins/guests/mint/plugin.rb +1 -1
  90. data/plugins/guests/netbsd/cap/configure_networks.rb +8 -8
  91. data/plugins/guests/nixos/cap/change_host_name.rb +11 -8
  92. data/plugins/guests/nixos/cap/configure_networks.rb +12 -9
  93. data/plugins/guests/omnios/cap/change_host_name.rb +17 -5
  94. data/plugins/guests/omnios/cap/mount_nfs_folder.rb +10 -4
  95. data/plugins/guests/omnios/cap/rsync.rb +11 -0
  96. data/plugins/guests/omnios/guest.rb +0 -2
  97. data/plugins/guests/omnios/plugin.rb +6 -1
  98. data/plugins/guests/openbsd/cap/configure_networks.rb +8 -6
  99. data/plugins/guests/photon/cap/change_host_name.rb +17 -4
  100. data/plugins/guests/photon/cap/configure_networks.rb +14 -26
  101. data/plugins/guests/photon/guest.rb +1 -1
  102. data/plugins/guests/photon/plugin.rb +12 -12
  103. data/plugins/guests/pld/cap/change_host_name.rb +21 -9
  104. data/plugins/guests/pld/guest.rb +0 -2
  105. data/plugins/guests/pld/plugin.rb +1 -1
  106. data/plugins/guests/redhat/cap/change_host_name.rb +30 -96
  107. data/plugins/guests/redhat/cap/configure_networks.rb +44 -50
  108. data/plugins/guests/redhat/cap/flavor.rb +3 -4
  109. data/plugins/guests/redhat/cap/nfs_client.rb +13 -25
  110. data/plugins/guests/redhat/cap/rsync.rb +6 -6
  111. data/plugins/guests/redhat/guest.rb +0 -2
  112. data/plugins/guests/redhat/plugin.rb +1 -10
  113. data/plugins/guests/slackware/cap/change_host_name.rb +19 -8
  114. data/plugins/guests/slackware/cap/configure_networks.rb +30 -14
  115. data/plugins/guests/slackware/guest.rb +0 -2
  116. data/plugins/guests/slackware/plugin.rb +1 -1
  117. data/plugins/guests/smartos/config.rb +3 -15
  118. data/plugins/guests/suse/cap/change_host_name.rb +15 -7
  119. data/plugins/guests/suse/cap/configure_networks.rb +31 -37
  120. data/plugins/guests/suse/cap/nfs_client.rb +5 -6
  121. data/plugins/guests/suse/cap/rsync.rb +1 -3
  122. data/plugins/guests/suse/guest.rb +0 -2
  123. data/plugins/guests/suse/plugin.rb +1 -1
  124. data/plugins/guests/tinycore/cap/mount_nfs.rb +46 -0
  125. data/plugins/guests/tinycore/plugin.rb +5 -0
  126. data/plugins/guests/trisquel/guest.rb +9 -0
  127. data/plugins/guests/trisquel/plugin.rb +15 -0
  128. data/plugins/guests/ubuntu/cap/change_host_name.rb +42 -41
  129. data/plugins/guests/ubuntu/guest.rb +0 -2
  130. data/plugins/guests/ubuntu/plugin.rb +1 -3
  131. data/plugins/guests/windows/guest_network.rb +1 -1
  132. data/plugins/hosts/arch/cap/nfs.rb +3 -19
  133. data/plugins/hosts/darwin/cap/provider_install_virtualbox.rb +4 -5
  134. data/plugins/hosts/darwin/cap/rdp.rb +34 -6
  135. data/plugins/hosts/gentoo/cap/nfs.rb +1 -1
  136. data/plugins/hosts/windows/cap/provider_install_virtualbox.rb +4 -5
  137. data/plugins/hosts/windows/cap/ps.rb +2 -2
  138. data/plugins/hosts/windows/cap/rdp.rb +8 -17
  139. data/plugins/kernel_v2/config/ssh_connect.rb +6 -0
  140. data/plugins/kernel_v2/config/vm.rb +3 -1
  141. data/plugins/providers/docker/action.rb +3 -3
  142. data/plugins/providers/docker/action/create.rb +1 -1
  143. data/plugins/providers/docker/command/exec.rb +104 -0
  144. data/plugins/providers/docker/config.rb +9 -1
  145. data/plugins/providers/docker/errors.rb +4 -0
  146. data/plugins/providers/docker/plugin.rb +6 -0
  147. data/plugins/providers/docker/provider.rb +1 -2
  148. data/plugins/providers/hyperv/action.rb +56 -1
  149. data/plugins/providers/hyperv/action/import.rb +13 -5
  150. data/plugins/providers/hyperv/action/snapshot_delete.rb +27 -0
  151. data/plugins/providers/hyperv/action/snapshot_restore.rb +23 -0
  152. data/plugins/providers/hyperv/action/snapshot_save.rb +27 -0
  153. data/plugins/providers/hyperv/cap/snapshot_list.rb +11 -0
  154. data/plugins/providers/hyperv/config.rb +5 -2
  155. data/plugins/providers/hyperv/driver.rb +18 -1
  156. data/plugins/providers/hyperv/plugin.rb +5 -0
  157. data/plugins/providers/hyperv/scripts/clone_vhd.ps1 +9 -0
  158. data/plugins/providers/hyperv/scripts/create_snapshot.ps1 +8 -0
  159. data/plugins/providers/hyperv/scripts/delete_snapshot.ps1 +8 -0
  160. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +8 -2
  161. data/plugins/providers/hyperv/scripts/import_vm.ps1 +5 -1
  162. data/plugins/providers/hyperv/scripts/list_snapshots.ps1 +12 -0
  163. data/plugins/providers/hyperv/scripts/restore_snapshot.ps1 +8 -0
  164. data/plugins/providers/virtualbox/action.rb +9 -4
  165. data/plugins/providers/virtualbox/action/import_master.rb +81 -75
  166. data/plugins/providers/virtualbox/action/package.rb +1 -29
  167. data/plugins/providers/virtualbox/action/package_setup_files.rb +51 -0
  168. data/plugins/providers/virtualbox/action/package_setup_folders.rb +38 -0
  169. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +23 -1
  170. data/plugins/providers/virtualbox/action/setup_package_files.rb +9 -43
  171. data/plugins/providers/virtualbox/driver/version_4_1.rb +104 -6
  172. data/plugins/providers/virtualbox/driver/version_4_2.rb +6 -5
  173. data/plugins/providers/virtualbox/driver/version_4_3.rb +6 -5
  174. data/plugins/providers/virtualbox/driver/version_5_0.rb +6 -5
  175. data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +8 -3
  176. data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +26 -4
  177. data/plugins/provisioners/ansible/cap/guest/facts.rb +24 -0
  178. data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +16 -6
  179. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +7 -2
  180. data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +28 -0
  181. data/plugins/provisioners/ansible/cap/guest/posix/ansible_installed.rb +1 -1
  182. data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +24 -7
  183. data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +6 -2
  184. data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +17 -6
  185. data/plugins/provisioners/ansible/config/base.rb +15 -23
  186. data/plugins/provisioners/ansible/config/guest.rb +9 -22
  187. data/plugins/provisioners/ansible/config/host.rb +9 -19
  188. data/plugins/provisioners/ansible/errors.rb +4 -0
  189. data/plugins/provisioners/ansible/helpers.rb +4 -24
  190. data/plugins/provisioners/ansible/provisioner/base.rb +58 -10
  191. data/plugins/provisioners/ansible/provisioner/guest.rb +55 -22
  192. data/plugins/provisioners/ansible/provisioner/host.rb +50 -9
  193. data/plugins/provisioners/chef/cap/linux/chef_installed.rb +2 -2
  194. data/plugins/provisioners/chef/cap/omnios/chef_installed.rb +3 -3
  195. data/plugins/provisioners/chef/cap/redhat/chef_install.rb +7 -11
  196. data/plugins/provisioners/chef/cap/suse/chef_install.rb +27 -0
  197. data/plugins/provisioners/chef/cap/windows/chef_installed.rb +1 -1
  198. data/plugins/provisioners/chef/command_builder.rb +1 -0
  199. data/plugins/provisioners/chef/config/base.rb +5 -6
  200. data/plugins/provisioners/chef/config/chef_solo.rb +6 -0
  201. data/plugins/provisioners/chef/installer.rb +2 -2
  202. data/plugins/provisioners/chef/omnibus.rb +1 -1
  203. data/plugins/provisioners/chef/plugin.rb +5 -0
  204. data/plugins/provisioners/chef/provisioner/base.rb +52 -56
  205. data/plugins/provisioners/chef/provisioner/chef_apply.rb +9 -10
  206. data/plugins/provisioners/chef/provisioner/chef_client.rb +1 -1
  207. data/plugins/provisioners/chef/provisioner/chef_solo.rb +1 -0
  208. data/plugins/provisioners/docker/client.rb +22 -4
  209. data/plugins/provisioners/puppet/provisioner/puppet.rb +3 -3
  210. data/plugins/provisioners/salt/provisioner.rb +19 -24
  211. data/plugins/pushes/ftp/adapter.rb +18 -1
  212. data/plugins/pushes/heroku/locales/en.yml +1 -1
  213. data/plugins/synced_folders/rsync/helper.rb +1 -1
  214. data/templates/commands/init/Vagrantfile.erb +6 -3
  215. data/templates/commands/init/Vagrantfile.min.erb +1 -1
  216. data/templates/commands/ssh_config/config.erb +5 -1
  217. data/templates/guests/debian/network_dhcp.erb +2 -2
  218. data/templates/guests/debian/network_static.erb +2 -2
  219. data/templates/guests/debian/network_static6.erb +2 -2
  220. data/templates/guests/fedora/network_static6.erb +9 -0
  221. data/templates/guests/freebsd/network_dhcp.erb +2 -1
  222. data/templates/guests/freebsd/network_static.erb +1 -1
  223. data/templates/guests/slackware/network_dhcp.erb +8 -20
  224. data/templates/guests/slackware/network_static.erb +10 -22
  225. data/templates/guests/suse/network_dhcp.erb +1 -1
  226. data/templates/guests/suse/network_static.erb +3 -3
  227. data/templates/locales/en.yml +35 -18
  228. data/templates/locales/providers_docker.yml +8 -0
  229. data/templates/provisioners/chef_solo/solo.erb +7 -7
  230. data/test/support/isolated_environment.rb +1 -1
  231. data/test/unit/base.rb +9 -1
  232. data/test/unit/plugins/commands/box/command/update_test.rb +7 -1
  233. data/test/unit/plugins/commands/init/command_test.rb +86 -0
  234. data/test/unit/plugins/commands/login/client_test.rb +7 -0
  235. data/test/unit/plugins/commands/ssh_config/command_test.rb +2 -14
  236. data/test/unit/plugins/communicators/winrm/shell_test.rb +40 -16
  237. data/test/unit/plugins/guests/amazon/cap/flavor_test.rb +19 -0
  238. data/test/unit/plugins/guests/arch/cap/change_host_name_test.rb +38 -0
  239. data/test/unit/plugins/guests/arch/cap/configure_networks_test.rb +55 -0
  240. data/test/unit/plugins/guests/atomic/cap/change_host_name_test.rb +38 -0
  241. data/test/unit/plugins/guests/atomic/cap/docker_test.rb +28 -0
  242. data/test/unit/plugins/guests/coreos/cap/change_host_name_test.rb +37 -0
  243. data/test/unit/plugins/guests/coreos/cap/configure_networks_test.rb +59 -0
  244. data/test/unit/plugins/guests/coreos/cap/docker_test.rb +28 -0
  245. data/test/unit/plugins/guests/darwin/cap/change_host_name_test.rb +40 -0
  246. data/test/unit/plugins/guests/darwin/cap/choose_addressable_ip_addr_test.rb +36 -0
  247. data/test/unit/plugins/guests/debian/cap/change_host_name_test.rb +23 -16
  248. data/test/unit/plugins/guests/debian/cap/configure_networks_test.rb +54 -0
  249. data/test/unit/plugins/guests/debian/cap/nfs_client_test.rb +30 -0
  250. data/test/unit/plugins/guests/debian/cap/rsync_test.rb +38 -0
  251. data/test/unit/plugins/guests/debian/cap/smb_test.rb +38 -0
  252. data/test/unit/plugins/guests/freebsd/cap/change_host_name_test.rb +40 -0
  253. data/test/unit/plugins/guests/freebsd/cap/configure_networks_test.rb +51 -0
  254. data/test/unit/plugins/guests/freebsd/cap/halt_test.rb +35 -0
  255. data/test/unit/plugins/guests/freebsd/cap/insert_public_key_test.rb +31 -0
  256. data/test/unit/plugins/guests/freebsd/cap/mount_nfs_folder_test.rb +53 -0
  257. data/test/unit/plugins/guests/freebsd/cap/rsync_test.rb +46 -0
  258. data/test/unit/plugins/guests/linux/cap/choose_addressable_ip_addr_test.rb +38 -0
  259. data/test/unit/plugins/guests/linux/cap/halt_test.rb +36 -0
  260. data/test/unit/plugins/guests/linux/cap/insert_public_key_test.rb +32 -0
  261. data/test/unit/plugins/guests/linux/cap/mount_nfs_test.rb +78 -0
  262. data/test/unit/plugins/guests/linux/cap/mount_shared_folder_test.rb +1 -1
  263. data/test/unit/plugins/guests/linux/cap/nfs_client_test.rb +29 -0
  264. data/test/unit/plugins/guests/linux/cap/port_test.rb +30 -0
  265. data/test/unit/plugins/guests/omnios/cap/change_host_name_test.rb +41 -0
  266. data/test/unit/plugins/guests/omnios/cap/mount_nfs_folder_test.rb +47 -0
  267. data/test/unit/plugins/guests/omnios/cap/rsync_test.rb +29 -0
  268. data/test/unit/plugins/guests/photon/cap/change_host_name_test.rb +26 -18
  269. data/test/unit/plugins/guests/photon/cap/configure_networks_test.rb +37 -26
  270. data/test/unit/plugins/guests/photon/cap/docker_test.rb +17 -12
  271. data/test/unit/plugins/guests/pld/cap/change_host_name_test.rb +39 -0
  272. data/test/unit/plugins/guests/pld/cap/flavor_test.rb +21 -0
  273. data/test/unit/plugins/guests/pld/cap/network_scripts_dir_test.rb +21 -0
  274. data/test/unit/plugins/guests/redhat/cap/change_host_name_test.rb +23 -51
  275. data/test/unit/plugins/guests/redhat/cap/configure_networks_test.rb +80 -0
  276. data/test/unit/plugins/guests/redhat/cap/flavor_test.rb +40 -0
  277. data/test/unit/plugins/guests/redhat/cap/network_scripts_dir_test.rb +21 -0
  278. data/test/unit/plugins/guests/redhat/cap/nfs_client_test.rb +30 -0
  279. data/test/unit/plugins/guests/redhat/cap/rsync_test.rb +29 -0
  280. data/test/unit/plugins/guests/slackware/cap/change_host_name_test.rb +40 -0
  281. data/test/unit/plugins/guests/slackware/cap/configure_networks_test.rb +48 -0
  282. data/test/unit/plugins/guests/smartos/cap/change_host_name_test.rb +2 -2
  283. data/test/unit/plugins/guests/smartos/cap/configure_networks_test.rb +1 -1
  284. data/test/unit/plugins/guests/smartos/cap/halt_test.rb +1 -1
  285. data/test/unit/plugins/guests/smartos/cap/mount_nfs_test.rb +1 -1
  286. data/test/unit/plugins/guests/smartos/cap/rsync_test.rb +1 -1
  287. data/test/unit/plugins/guests/suse/cap/change_host_name_test.rb +40 -0
  288. data/test/unit/plugins/guests/suse/cap/configure_networks_test.rb +60 -0
  289. data/test/unit/plugins/guests/suse/cap/halt_test.rb +36 -0
  290. data/test/unit/plugins/guests/suse/cap/network_scripts_dir_test.rb +19 -0
  291. data/test/unit/plugins/guests/suse/cap/nfs_client_test.rb +31 -0
  292. data/test/unit/plugins/guests/suse/cap/rsync_test.rb +38 -0
  293. data/test/unit/plugins/guests/tinycore/cap/change_host_name_test.rb +1 -1
  294. data/test/unit/plugins/guests/ubuntu/cap/change_host_name_test.rb +24 -16
  295. data/test/unit/plugins/guests/windows/cap/change_host_name_test.rb +1 -1
  296. data/test/unit/plugins/guests/windows/cap/halt_test.rb +1 -1
  297. data/test/unit/plugins/guests/windows/cap/mount_shared_folder_test.rb +1 -1
  298. data/test/unit/plugins/guests/windows/cap/reboot_test.rb +1 -1
  299. data/test/unit/plugins/guests/windows/cap/rsync_test.rb +1 -1
  300. data/test/unit/plugins/hosts/darwin/cap/rdp_test.rb +36 -0
  301. data/test/unit/plugins/kernel_v2/config/vm_test.rb +27 -1
  302. data/test/unit/plugins/providers/docker/action/create_test.rb +55 -0
  303. data/test/unit/plugins/providers/docker/command/exec_test.rb +44 -0
  304. data/test/unit/plugins/providers/docker/config_test.rb +7 -2
  305. data/test/unit/plugins/providers/virtualbox/action/prepare_nfs_settings_test.rb +18 -0
  306. data/test/unit/plugins/provisioners/ansible/config/guest_test.rb +83 -0
  307. data/test/unit/plugins/provisioners/ansible/config/host_test.rb +98 -0
  308. data/test/unit/plugins/provisioners/ansible/config/shared.rb +107 -0
  309. data/test/unit/plugins/provisioners/ansible/provisioner_test.rb +82 -10
  310. data/test/unit/plugins/provisioners/chef/config/base_test.rb +2 -2
  311. data/test/unit/plugins/provisioners/chef/provisioner/base_test.rb +29 -0
  312. data/test/unit/plugins/pushes/atlas/push_test.rb +12 -8
  313. data/test/unit/plugins/pushes/ftp/adapter_test.rb +1 -1
  314. data/test/unit/plugins/pushes/ftp/push_test.rb +5 -4
  315. data/test/unit/support/isolated_environment.rb +4 -4
  316. data/test/unit/support/shared/base_context.rb +11 -3
  317. data/test/unit/templates/guests/arch/network_dhcp_test.rb +2 -2
  318. data/test/unit/templates/guests/arch/network_static_test.rb +4 -4
  319. data/test/unit/templates/guests/debian/network_dhcp_test.rb +6 -6
  320. data/test/unit/templates/guests/debian/network_static_test.rb +6 -6
  321. data/test/unit/templates/guests/fedora/network_static6_test.rb +25 -0
  322. data/test/unit/templates/guests/freebsd/network_dhcp_test.rb +5 -2
  323. data/test/unit/templates/guests/freebsd/network_static_test.rb +13 -17
  324. data/test/unit/templates/guests/suse/network_dhcp_test.rb +2 -2
  325. data/test/unit/templates/guests/suse/network_static_test.rb +4 -4
  326. data/test/unit/vagrant/action/builtin/box_add_test.rb +33 -31
  327. data/test/unit/vagrant/action/builtin/lock_test.rb +5 -2
  328. data/test/unit/vagrant/action/builtin/mixin_synced_folders_test.rb +6 -2
  329. data/test/unit/vagrant/action/builtin/synced_folder_cleanup_test.rb +5 -1
  330. data/test/unit/vagrant/action/builtin/synced_folders_test.rb +5 -1
  331. data/test/unit/vagrant/box_collection_test.rb +19 -7
  332. data/test/unit/vagrant/box_test.rb +13 -2
  333. data/test/unit/vagrant/config_test.rb +1 -1
  334. data/test/unit/vagrant/environment_test.rb +16 -12
  335. data/test/unit/vagrant/machine_index_test.rb +5 -1
  336. data/test/unit/vagrant/machine_test.rb +5 -1
  337. data/test/unit/vagrant/plugin/manager_test.rb +1 -5
  338. data/test/unit/vagrant/plugin/state_file_test.rb +1 -5
  339. data/test/unit/vagrant/util/platform_test.rb +5 -0
  340. data/test/unit/vagrant/util/safe_chdir_test.rb +11 -5
  341. data/test/unit/vagrant/vagrantfile_test.rb +5 -1
  342. data/vagrant.gemspec +8 -3
  343. data/version.txt +1 -1
  344. metadata +3657 -12
  345. data/CONTRIBUTING.md +0 -41
  346. data/test/unit/plugins/guests/support/shared/debian_like_host_name_examples.rb +0 -106
  347. data/test/unit/plugins/guests/support/shared/redhat_like_host_name_examples.rb +0 -252
  348. data/test/unit/plugins/provisioners/ansible/config_test.rb +0 -224
@@ -238,7 +238,7 @@ module VagrantPlugins
238
238
  end
239
239
 
240
240
  def max_network_adapters
241
- 36
241
+ 8
242
242
  end
243
243
 
244
244
  def read_forwarded_ports(uuid=nil, active_only=false)
@@ -594,9 +594,9 @@ module VagrantPlugins
594
594
  result = raw("showvminfo", uuid)
595
595
  return true if result.exit_code == 0
596
596
 
597
- # GH-2479: Sometimes this happens. In this case, retry. If
598
- # we don't see this text, the VM really probably doesn't exist.
599
- return false if !result.stderr.include?("CO_E_SERVER_EXEC_FAILURE")
597
+ # If vboxmanage returned VBOX_E_OBJECT_NOT_FOUND,
598
+ # then the vm truly does not exist. Any other error might be transient
599
+ return false if result.stderr.include?("VBOX_E_OBJECT_NOT_FOUND")
600
600
 
601
601
  # Sleep a bit though to give VirtualBox time to fix itself
602
602
  sleep 2
@@ -656,7 +656,8 @@ module VagrantPlugins
656
656
 
657
657
  result.sort
658
658
  rescue Vagrant::Errors::VBoxManageError => e
659
- return [] if e.extra_data[:stdout].include?("does not have")
659
+ d = e.extra_data
660
+ return [] if d[:stderr].include?("does not have") || d[:stdout].include?("does not have")
660
661
  raise
661
662
  end
662
663
 
@@ -135,7 +135,8 @@ module VagrantPlugins
135
135
 
136
136
  result.sort
137
137
  rescue Vagrant::Errors::VBoxManageError => e
138
- return [] if e.extra_data[:stdout].include?("does not have")
138
+ d = e.extra_data
139
+ return [] if d[:stderr].include?("does not have") || d[:stdout].include?("does not have")
139
140
  raise
140
141
  end
141
142
 
@@ -347,7 +348,7 @@ module VagrantPlugins
347
348
  end
348
349
 
349
350
  def max_network_adapters
350
- 36
351
+ 8
351
352
  end
352
353
 
353
354
  def read_forwarded_ports(uuid=nil, active_only=false)
@@ -700,9 +701,9 @@ module VagrantPlugins
700
701
  result = raw("showvminfo", uuid)
701
702
  return true if result.exit_code == 0
702
703
 
703
- # GH-2479: Sometimes this happens. In this case, retry. If
704
- # we don't see this text, the VM really probably doesn't exist.
705
- return false if !result.stderr.include?("CO_E_SERVER_EXEC_FAILURE")
704
+ # If vboxmanage returned VBOX_E_OBJECT_NOT_FOUND,
705
+ # then the vm truly does not exist. Any other error might be transient
706
+ return false if result.stderr.include?("VBOX_E_OBJECT_NOT_FOUND")
706
707
 
707
708
  # Sleep a bit though to give VirtualBox time to fix itself
708
709
  sleep 2
@@ -131,7 +131,8 @@ module VagrantPlugins
131
131
 
132
132
  result.sort
133
133
  rescue Vagrant::Errors::VBoxManageError => e
134
- return [] if e.extra_data[:stdout].include?("does not have")
134
+ d = e.extra_data
135
+ return [] if d[:stderr].include?("does not have") || d[:stdout].include?("does not have")
135
136
  raise
136
137
  end
137
138
 
@@ -343,7 +344,7 @@ module VagrantPlugins
343
344
  end
344
345
 
345
346
  def max_network_adapters
346
- 36
347
+ 8
347
348
  end
348
349
 
349
350
  def read_forwarded_ports(uuid=nil, active_only=false)
@@ -701,9 +702,9 @@ module VagrantPlugins
701
702
  result = raw("showvminfo", uuid)
702
703
  return true if result.exit_code == 0
703
704
 
704
- # GH-2479: Sometimes this happens. In this case, retry. If
705
- # we don't see this text, the VM really probably doesn't exist.
706
- return false if !result.stderr.include?("CO_E_SERVER_EXEC_FAILURE")
705
+ # If vboxmanage returned VBOX_E_OBJECT_NOT_FOUND,
706
+ # then the vm truly does not exist. Any other error might be transient
707
+ return false if result.stderr.include?("VBOX_E_OBJECT_NOT_FOUND")
707
708
 
708
709
  # Sleep a bit though to give VirtualBox time to fix itself
709
710
  sleep 2
@@ -1,3 +1,4 @@
1
+ require_relative "../../../errors"
1
2
 
2
3
  module VagrantPlugins
3
4
  module Ansible
@@ -6,9 +7,13 @@ module VagrantPlugins
6
7
  module Arch
7
8
  module AnsibleInstall
8
9
 
9
- def self.ansible_install(machine)
10
- machine.communicate.sudo("pacman -Syy --noconfirm")
11
- machine.communicate.sudo("pacman -S --noconfirm ansible")
10
+ def self.ansible_install(machine, install_mode, ansible_version)
11
+ if install_mode == :pip
12
+ raise Ansible::Errors::AnsiblePipInstallIsNotSupported
13
+ else
14
+ machine.communicate.sudo "pacman -Syy --noconfirm"
15
+ machine.communicate.sudo "pacman -S --noconfirm ansible"
16
+ end
12
17
  end
13
18
 
14
19
  end
@@ -1,3 +1,4 @@
1
+ require_relative "../pip/pip"
1
2
 
2
3
  module VagrantPlugins
3
4
  module Ansible
@@ -6,8 +7,23 @@ module VagrantPlugins
6
7
  module Debian
7
8
  module AnsibleInstall
8
9
 
9
- def self.ansible_install(machine)
10
10
 
11
+ def self.ansible_install(machine, install_mode, ansible_version)
12
+ if (install_mode == :pip)
13
+ ansible_pip_install machine, ansible_version
14
+ else
15
+ ansible_apt_install machine
16
+ end
17
+ end
18
+
19
+ def self.ansible_pip_install(machine, ansible_version)
20
+ pip_setup machine
21
+ Pip::pip_install machine, "ansible", ansible_version
22
+ end
23
+
24
+ private
25
+
26
+ def self.ansible_apt_install(machine)
11
27
  install_backports_if_wheezy_release = <<INLINE_CRIPT
12
28
  CODENAME=`lsb_release -cs`
13
29
  if [ x$CODENAME == 'xwheezy' ]; then
@@ -15,9 +31,15 @@ if [ x$CODENAME == 'xwheezy' ]; then
15
31
  fi
16
32
  INLINE_CRIPT
17
33
 
18
- machine.communicate.sudo(install_backports_if_wheezy_release)
19
- machine.communicate.sudo("apt-get update -y -qq")
20
- machine.communicate.sudo("apt-get install -y -qq ansible")
34
+ machine.communicate.sudo install_backports_if_wheezy_release
35
+ machine.communicate.sudo "apt-get update -y -qq"
36
+ machine.communicate.sudo "apt-get install -y -qq ansible"
37
+ end
38
+
39
+ def self.pip_setup(machine)
40
+ machine.communicate.sudo "apt-get update -y -qq"
41
+ machine.communicate.sudo "apt-get install -y -qq build-essential curl git libssl-dev libffi-dev python-dev"
42
+ Pip::get_pip machine
21
43
  end
22
44
 
23
45
  end
@@ -0,0 +1,24 @@
1
+
2
+ module VagrantPlugins
3
+ module Ansible
4
+ module Cap
5
+ module Guest
6
+ module Facts
7
+
8
+ def self.dnf?(machine)
9
+ machine.communicate.test "/usr/bin/which -s dnf"
10
+ end
11
+
12
+ def self.yum?(machine)
13
+ machine.communicate.test "/usr/bin/which -s yum"
14
+ end
15
+
16
+ def self.rpm_package_manager(machine)
17
+ dnf?(machine) ? "dnf" : "yum"
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,5 @@
1
+ require_relative "../facts"
2
+ require_relative "../pip/pip"
1
3
 
2
4
  module VagrantPlugins
3
5
  module Ansible
@@ -6,16 +8,24 @@ module VagrantPlugins
6
8
  module Fedora
7
9
  module AnsibleInstall
8
10
 
9
- def self.ansible_install(machine)
10
- if dnf?(machine)
11
- machine.communicate.sudo("dnf -y install ansible")
11
+ def self.ansible_install(machine, install_mode, ansible_version)
12
+ rpm_package_manager = Facts::rpm_package_manager(machine)
13
+
14
+ if install_mode == :pip
15
+ pip_setup machine
16
+ Pip::pip_install machine, "ansible", ansible_version
12
17
  else
13
- machine.communicate.sudo("yum -y install ansible")
18
+ machine.communicate.sudo "#{rpm_package_manager} -y install ansible"
14
19
  end
15
20
  end
16
21
 
17
- def self.dnf?(machine)
18
- machine.communicate.test("/usr/bin/which -s dnf")
22
+ private
23
+
24
+ def self.pip_setup(machine)
25
+ rpm_package_manager = Facts::rpm_package_manager(machine)
26
+
27
+ machine.communicate.sudo "#{rpm_package_manager} install -y curl gcc gmp-devel libffi-devel openssl-devel python-crypto python-devel python-dnf python-setuptools redhat-rpm-config"
28
+ Pip::get_pip machine
19
29
  end
20
30
 
21
31
  end
@@ -1,3 +1,4 @@
1
+ require_relative "../../../errors"
1
2
 
2
3
  module VagrantPlugins
3
4
  module Ansible
@@ -6,8 +7,12 @@ module VagrantPlugins
6
7
  module FreeBSD
7
8
  module AnsibleInstall
8
9
 
9
- def self.ansible_install(machine)
10
- machine.communicate.sudo("yes | pkg install ansible")
10
+ def self.ansible_install(machine, install_mode, ansible_version)
11
+ if install_mode == :pip
12
+ raise Ansible::Errors::AnsiblePipInstallIsNotSupported
13
+ else
14
+ machine.communicate.sudo "yes | pkg install ansible"
15
+ end
11
16
  end
12
17
 
13
18
  end
@@ -0,0 +1,28 @@
1
+
2
+ module VagrantPlugins
3
+ module Ansible
4
+ module Cap
5
+ module Guest
6
+ module Pip
7
+
8
+ def self.pip_install(machine, package, version = "", upgrade = true)
9
+ upgrade_arg = "--upgrade " if upgrade
10
+ version_arg = ""
11
+
12
+ if !version.to_s.empty? && version.to_s.to_sym != :latest
13
+ version_arg = "==#{version}"
14
+ end
15
+
16
+ machine.communicate.sudo "pip install #{upgrade_arg}#{package}#{version_arg}"
17
+ end
18
+
19
+ def self.get_pip(machine)
20
+ machine.ui.detail I18n.t("vagrant.provisioners.ansible.installing_pip")
21
+ machine.communicate.execute "curl https://bootstrap.pypa.io/get-pip.py | sudo python"
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -14,7 +14,7 @@ module VagrantPlugins
14
14
  command << "&& ansible --version | grep 'ansible #{version}'"
15
15
  end
16
16
 
17
- machine.communicate.test(command, sudo: false)
17
+ machine.communicate.test command, sudo: false
18
18
  end
19
19
 
20
20
  end
@@ -1,3 +1,5 @@
1
+ require_relative "../facts"
2
+ require_relative "../pip/pip"
1
3
 
2
4
  module VagrantPlugins
3
5
  module Ansible
@@ -6,17 +8,32 @@ module VagrantPlugins
6
8
  module RedHat
7
9
  module AnsibleInstall
8
10
 
9
- def self.ansible_install(machine)
10
- epel = machine.communicate.execute("#{yum_dnf(machine)} repolist epel | grep -q epel", :error_check => false)
11
- if epel != 0
12
- machine.communicate.sudo('sudo rpm -i https://dl.fedoraproject.org/pub/epel/epel-release-latest-`rpm -E %dist | sed -n \'s/.*el\([0-9]\).*/\1/p\'`.noarch.rpm')
11
+ def self.ansible_install(machine, install_mode, ansible_version)
12
+ if install_mode == :pip
13
+ pip_setup machine
14
+ Pip::pip_install machine, "ansible", ansible_version
15
+ else
16
+ ansible_rpm_install machine
13
17
  end
18
+ end
19
+
20
+ private
21
+
22
+ def self.ansible_rpm_install(machine)
23
+ rpm_package_manager = Facts::rpm_package_manager(machine)
14
24
 
15
- machine.communicate.sudo("#{yum_dnf(machine)} -y --enablerepo=epel install ansible")
25
+ epel = machine.communicate.execute "#{rpm_package_manager} repolist epel | grep -q epel", error_check: false
26
+ if epel != 0
27
+ machine.communicate.sudo 'sudo rpm -i https://dl.fedoraproject.org/pub/epel/epel-release-latest-`rpm -E %dist | sed -n \'s/.*el\([0-9]\).*/\1/p\'`.noarch.rpm'
28
+ end
29
+ machine.communicate.sudo "#{rpm_package_manager} -y --enablerepo=epel install ansible"
16
30
  end
17
31
 
18
- def self.yum_dnf(machine)
19
- machine.communicate.test("/usr/bin/which -s dnf") ? "dnf" : "yum"
32
+ def self.pip_setup(machine)
33
+ rpm_package_manager = Facts::rpm_package_manager(machine)
34
+
35
+ machine.communicate.sudo("#{rpm_package_manager} -y install curl gcc libffi-devel openssl-devel python-crypto python-devel python-setuptools")
36
+ Pip::get_pip machine
20
37
  end
21
38
 
22
39
  end
@@ -6,8 +6,12 @@ module VagrantPlugins
6
6
  module SUSE
7
7
  module AnsibleInstall
8
8
 
9
- def self.ansible_install(machine)
10
- machine.communicate.sudo("zypper --non-interactive --quiet install ansible")
9
+ def self.ansible_install(machine, install_mode, ansible_version)
10
+ if install_mode == :pip
11
+ raise Ansible::Errors::AnsiblePipInstallIsNotSupported
12
+ else
13
+ machine.communicate.sudo("zypper --non-interactive --quiet install ansible")
14
+ end
11
15
  end
12
16
 
13
17
  end
@@ -1,3 +1,4 @@
1
+ require_relative "../debian/ansible_install"
1
2
 
2
3
  module VagrantPlugins
3
4
  module Ansible
@@ -6,12 +7,22 @@ module VagrantPlugins
6
7
  module Ubuntu
7
8
  module AnsibleInstall
8
9
 
9
- def self.ansible_install(machine)
10
- machine.communicate.sudo("apt-get update -y -qq")
11
- machine.communicate.sudo("apt-get install -y -qq software-properties-common python-software-properties")
12
- machine.communicate.sudo("add-apt-repository ppa:ansible/ansible -y")
13
- machine.communicate.sudo("apt-get update -y -qq")
14
- machine.communicate.sudo("apt-get install -y -qq ansible")
10
+ def self.ansible_install(machine, install_mode, ansible_version)
11
+ if install_mode == :pip
12
+ Debian::AnsibleInstall::ansible_pip_install machine, ansible_version
13
+ else
14
+ ansible_apt_install machine
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def self.ansible_apt_install(machine)
21
+ machine.communicate.sudo "apt-get update -y -qq"
22
+ machine.communicate.sudo "apt-get install -y -qq software-properties-common python-software-properties"
23
+ machine.communicate.sudo "add-apt-repository ppa:ansible/ansible -y"
24
+ machine.communicate.sudo "apt-get update -y -qq"
25
+ machine.communicate.sudo "apt-get install -y -qq ansible"
15
26
  end
16
27
 
17
28
  end
@@ -74,34 +74,15 @@ module VagrantPlugins
74
74
  @errors << I18n.t("vagrant.provisioners.ansible.errors.no_playbook")
75
75
  end
76
76
 
77
- if playbook
78
- check_path_is_a_file(machine, playbook, "vagrant.provisioners.ansible.errors.playbook_path_invalid")
79
- end
80
-
81
- if inventory_path
82
- check_path_exists(machine, inventory_path, "vagrant.provisioners.ansible.errors.inventory_path_invalid")
83
- end
84
-
85
- if galaxy_role_file
86
- check_path_is_a_file(machine, galaxy_role_file, "vagrant.provisioners.ansible.errors.galaxy_role_file_invalid")
87
- end
88
-
89
- if vault_password_file
90
- check_path_is_a_file(machine, vault_password_file, "vagrant.provisioners.ansible.errors.vault_password_file_invalid")
91
- end
92
-
93
- # Validate that extra_vars is either a hash, or a path to an existing file
77
+ # Validate that extra_vars is either a Hash or a String (for a file path)
94
78
  if extra_vars
95
79
  extra_vars_is_valid = extra_vars.kind_of?(Hash) || extra_vars.kind_of?(String)
96
80
  if extra_vars.kind_of?(String)
97
- # Accept the usage of '@' prefix in Vagrantfile (e.g. '@vars.yml'
98
- # and 'vars.yml' are both supported)
81
+ # Accept the usage of '@' prefix in Vagrantfile
82
+ # (e.g. '@vars.yml' and 'vars.yml' are both supported)
99
83
  match_data = /^@?(.+)$/.match(extra_vars)
100
84
  extra_vars_path = match_data[1].to_s
101
- extra_vars_is_valid = check_path_is_a_file(machine, extra_vars_path)
102
- if extra_vars_is_valid
103
- @extra_vars = '@' + extra_vars_path
104
- end
85
+ @extra_vars = '@' + extra_vars_path
105
86
  end
106
87
 
107
88
  if !extra_vars_is_valid
@@ -112,6 +93,17 @@ module VagrantPlugins
112
93
  end
113
94
  end
114
95
 
96
+ if raw_arguments
97
+ if raw_arguments.kind_of?(String)
98
+ @raw_arguments = [raw_arguments]
99
+ elsif !raw_arguments.kind_of?(Array)
100
+ @errors << I18n.t(
101
+ "vagrant.provisioners.ansible.errors.raw_arguments_invalid",
102
+ type: raw_arguments.class.to_s,
103
+ value: raw_arguments.to_s)
104
+ end
105
+ end
106
+
115
107
  end
116
108
  end
117
109
  end
@@ -1,4 +1,5 @@
1
1
  require_relative "base"
2
+ require_relative "../helpers"
2
3
 
3
4
  module VagrantPlugins
4
5
  module Ansible
@@ -8,12 +9,14 @@ module VagrantPlugins
8
9
  attr_accessor :provisioning_path
9
10
  attr_accessor :tmp_path
10
11
  attr_accessor :install
12
+ attr_accessor :install_mode
11
13
  attr_accessor :version
12
14
 
13
15
  def initialize
14
16
  super
15
17
 
16
18
  @install = UNSET_VALUE
19
+ @install_mode = UNSET_VALUE
17
20
  @provisioning_path = UNSET_VALUE
18
21
  @tmp_path = UNSET_VALUE
19
22
  @version = UNSET_VALUE
@@ -23,6 +26,7 @@ module VagrantPlugins
23
26
  super
24
27
 
25
28
  @install = true if @install == UNSET_VALUE
29
+ @install_mode = :default if @install_mode == UNSET_VALUE
26
30
  @provisioning_path = "/vagrant" if provisioning_path == UNSET_VALUE
27
31
  @tmp_path = "/tmp/vagrant-ansible" if tmp_path == UNSET_VALUE
28
32
  @version = "" if @version == UNSET_VALUE
@@ -31,30 +35,13 @@ module VagrantPlugins
31
35
  def validate(machine)
32
36
  super
33
37
 
34
- { "ansible local provisioner" => @errors }
35
- end
36
-
37
- protected
38
-
39
- def check_path(machine, path, test_args, error_message_key = nil)
40
- remote_path = Pathname.new(path).expand_path(@provisioning_path)
41
- if machine.communicate.ready? && !machine.communicate.test("test #{test_args} #{remote_path}")
42
- if error_message_key
43
- @errors << I18n.t(error_message_key, path: remote_path, system: "guest")
44
- end
45
- return false
38
+ if @install_mode.to_s.to_sym == :pip
39
+ @install_mode = :pip
40
+ else
41
+ @install_mode = :default
46
42
  end
47
- # when the machine is not ready for SSH communication,
48
- # the check is "optimistically" by passed.
49
- true
50
- end
51
-
52
- def check_path_is_a_file(machine, path, error_message_key = nil)
53
- check_path(machine, path, "-f", error_message_key)
54
- end
55
43
 
56
- def check_path_exists(machine, path, error_message_key = nil)
57
- check_path(machine, path, "-e", error_message_key)
44
+ { "ansible local provisioner" => @errors }
58
45
  end
59
46
 
60
47
  end