vagrant-unbundled 2.2.7.0 → 2.2.16.0

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 (282) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +2 -0
  3. data/CHANGELOG.md +228 -0
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +50 -1
  8. data/contrib/README.md +1 -0
  9. data/contrib/sudoers/linux-suse +2 -2
  10. data/contrib/zsh/_vagrant +738 -0
  11. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  12. data/lib/vagrant.rb +28 -5
  13. data/lib/vagrant/action.rb +7 -0
  14. data/lib/vagrant/action/builder.rb +184 -38
  15. data/lib/vagrant/action/builtin/box_add.rb +24 -8
  16. data/lib/vagrant/action/builtin/box_check_outdated.rb +2 -1
  17. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  18. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  19. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  20. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  21. data/lib/vagrant/action/builtin/disk.rb +14 -1
  22. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  23. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  24. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  25. data/lib/vagrant/action/builtin/mixin_provisioners.rb +1 -0
  26. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  27. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  28. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  29. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  30. data/lib/vagrant/action/hook.rb +76 -23
  31. data/lib/vagrant/action/runner.rb +12 -27
  32. data/lib/vagrant/action/warden.rb +28 -31
  33. data/lib/vagrant/box.rb +11 -4
  34. data/lib/vagrant/box_collection.rb +1 -1
  35. data/lib/vagrant/bundler.rb +310 -61
  36. data/lib/vagrant/cli.rb +4 -2
  37. data/lib/vagrant/environment.rb +1 -0
  38. data/lib/vagrant/errors.rb +69 -1
  39. data/lib/vagrant/machine.rb +64 -11
  40. data/lib/vagrant/machine_index.rb +28 -1
  41. data/lib/vagrant/patches/net-ssh.rb +186 -0
  42. data/lib/vagrant/plugin/manager.rb +45 -16
  43. data/lib/vagrant/plugin/v2/command.rb +7 -2
  44. data/lib/vagrant/plugin/v2/components.rb +6 -0
  45. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  46. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  47. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  48. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  49. data/lib/vagrant/shared_helpers.rb +36 -0
  50. data/lib/vagrant/ui.rb +43 -2
  51. data/lib/vagrant/util.rb +2 -0
  52. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  53. data/lib/vagrant/util/caps.rb +48 -0
  54. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  55. data/lib/vagrant/util/curl_helper.rb +12 -8
  56. data/lib/vagrant/util/directory.rb +19 -0
  57. data/lib/vagrant/util/downloader.rb +10 -5
  58. data/lib/vagrant/util/guest_hosts.rb +68 -0
  59. data/lib/vagrant/util/guest_inspection.rb +9 -1
  60. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  61. data/lib/vagrant/util/io.rb +7 -27
  62. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  63. data/lib/vagrant/util/is_port_open.rb +8 -19
  64. data/lib/vagrant/util/map_command_options.rb +33 -0
  65. data/lib/vagrant/util/mime.rb +92 -0
  66. data/lib/vagrant/util/network_ip.rb +11 -1
  67. data/lib/vagrant/util/numeric.rb +28 -0
  68. data/lib/vagrant/util/platform.rb +10 -2
  69. data/lib/vagrant/util/powershell.rb +31 -15
  70. data/lib/vagrant/util/subprocess.rb +9 -1
  71. data/lib/vagrant/util/template_renderer.rb +2 -2
  72. data/lib/vagrant/util/uploader.rb +7 -4
  73. data/lib/vagrant/vagrantfile.rb +2 -2
  74. data/plugins/commands/autocomplete/command/install.rb +49 -0
  75. data/plugins/commands/autocomplete/command/root.rb +64 -0
  76. data/plugins/commands/autocomplete/plugin.rb +18 -0
  77. data/plugins/commands/cap/command.rb +5 -1
  78. data/plugins/commands/cloud/auth/login.rb +20 -23
  79. data/plugins/commands/cloud/auth/logout.rb +2 -10
  80. data/plugins/commands/cloud/auth/middleware/add_authentication.rb +60 -31
  81. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +64 -0
  82. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  83. data/plugins/commands/cloud/box/create.rb +33 -29
  84. data/plugins/commands/cloud/box/delete.rb +30 -24
  85. data/plugins/commands/cloud/box/show.rb +41 -31
  86. data/plugins/commands/cloud/box/update.rb +34 -26
  87. data/plugins/commands/cloud/client/client.rb +55 -79
  88. data/plugins/commands/cloud/list.rb +3 -4
  89. data/plugins/commands/cloud/locales/en.yml +15 -11
  90. data/plugins/commands/cloud/plugin.rb +10 -0
  91. data/plugins/commands/cloud/provider/create.rb +38 -28
  92. data/plugins/commands/cloud/provider/delete.rb +39 -29
  93. data/plugins/commands/cloud/provider/update.rb +37 -28
  94. data/plugins/commands/cloud/provider/upload.rb +53 -33
  95. data/plugins/commands/cloud/publish.rb +193 -106
  96. data/plugins/commands/cloud/search.rb +34 -21
  97. data/plugins/commands/cloud/util.rb +273 -161
  98. data/plugins/commands/cloud/version/create.rb +33 -28
  99. data/plugins/commands/cloud/version/delete.rb +35 -28
  100. data/plugins/commands/cloud/version/release.rb +35 -29
  101. data/plugins/commands/cloud/version/revoke.rb +36 -29
  102. data/plugins/commands/cloud/version/update.rb +29 -25
  103. data/plugins/commands/destroy/command.rb +7 -7
  104. data/plugins/commands/login/plugin.rb +0 -13
  105. data/plugins/commands/ssh_config/command.rb +1 -1
  106. data/plugins/communicators/ssh/communicator.rb +25 -24
  107. data/plugins/communicators/winrm/config.rb +1 -1
  108. data/plugins/communicators/winrm/helper.rb +1 -1
  109. data/plugins/communicators/winrm/shell.rb +1 -1
  110. data/plugins/communicators/winssh/communicator.rb +126 -38
  111. data/plugins/communicators/winssh/config.rb +3 -7
  112. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  113. data/plugins/guests/alpine/cap/configure_networks.rb +1 -1
  114. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  115. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  116. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  117. data/plugins/guests/arch/cap/smb.rb +1 -1
  118. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  119. data/plugins/guests/centos/cap/flavor.rb +24 -0
  120. data/plugins/guests/centos/guest.rb +9 -0
  121. data/plugins/guests/centos/plugin.rb +20 -0
  122. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  123. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  124. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  125. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +33 -10
  126. data/plugins/guests/darwin/plugin.rb +15 -0
  127. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  128. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  129. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  130. data/plugins/guests/fedora/guest.rb +4 -4
  131. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  132. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  133. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  134. data/plugins/guests/haiku/plugin.rb +15 -0
  135. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  136. data/plugins/guests/linux/cap/halt.rb +9 -1
  137. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  138. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  139. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +74 -0
  140. data/plugins/guests/linux/cap/reboot.rb +36 -7
  141. data/plugins/guests/linux/plugin.rb +10 -0
  142. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  143. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  144. data/plugins/guests/openwrt/cap/change_host_name.rb +19 -0
  145. data/plugins/guests/openwrt/cap/halt.rb +16 -0
  146. data/plugins/guests/openwrt/cap/insert_public_key.rb +20 -0
  147. data/plugins/guests/openwrt/cap/remove_public_key.rb +22 -0
  148. data/plugins/guests/openwrt/cap/rsync.rb +35 -0
  149. data/plugins/guests/openwrt/guest.rb +23 -0
  150. data/plugins/guests/openwrt/plugin.rb +61 -0
  151. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  152. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  153. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  154. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  155. data/plugins/guests/redhat/cap/smb.rb +20 -0
  156. data/plugins/guests/redhat/plugin.rb +5 -0
  157. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  158. data/plugins/guests/solaris11/plugin.rb +5 -0
  159. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  160. data/plugins/guests/windows/cap/public_key.rb +3 -3
  161. data/plugins/guests/windows/cap/reboot.rb +10 -5
  162. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/darwin/plugin.rb +10 -0
  164. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  165. data/plugins/hosts/linux/cap/nfs.rb +1 -0
  166. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  167. data/plugins/hosts/linux/plugin.rb +10 -0
  168. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  169. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  170. data/plugins/hosts/windows/plugin.rb +15 -0
  171. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  172. data/plugins/kernel_v2/config/disk.rb +67 -14
  173. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  174. data/plugins/kernel_v2/config/vm.rb +155 -21
  175. data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
  176. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  177. data/plugins/providers/docker/action.rb +8 -17
  178. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  179. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  180. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  181. data/plugins/providers/docker/communicator.rb +1 -1
  182. data/plugins/providers/docker/driver.rb +58 -7
  183. data/plugins/providers/docker/plugin.rb +5 -0
  184. data/plugins/providers/hyperv/action.rb +3 -1
  185. data/plugins/providers/hyperv/action/configure.rb +8 -0
  186. data/plugins/providers/hyperv/action/export.rb +4 -2
  187. data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
  188. data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
  189. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
  190. data/plugins/providers/hyperv/config.rb +5 -0
  191. data/plugins/providers/hyperv/driver.rb +90 -9
  192. data/plugins/providers/hyperv/plugin.rb +25 -0
  193. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
  194. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
  195. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
  196. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
  197. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
  198. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
  199. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
  200. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
  201. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
  202. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
  203. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
  204. data/plugins/providers/virtualbox/action.rb +13 -1
  205. data/plugins/providers/virtualbox/action/export.rb +4 -2
  206. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  207. data/plugins/providers/virtualbox/action/import.rb +8 -4
  208. data/plugins/providers/virtualbox/action/network.rb +12 -5
  209. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
  210. data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
  211. data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
  212. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
  213. data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
  214. data/plugins/providers/virtualbox/cap/mount_options.rb +40 -0
  215. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
  216. data/plugins/providers/virtualbox/driver/base.rb +15 -0
  217. data/plugins/providers/virtualbox/driver/meta.rb +16 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +23 -0
  220. data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
  221. data/plugins/providers/virtualbox/model/storage_controller_array.rb +98 -0
  222. data/plugins/providers/virtualbox/plugin.rb +42 -0
  223. data/plugins/providers/virtualbox/provider.rb +2 -1
  224. data/plugins/providers/virtualbox/synced_folder.rb +1 -0
  225. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
  226. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +1 -1
  227. data/plugins/provisioners/ansible/plugin.rb +5 -0
  228. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  229. data/plugins/provisioners/container/client.rb +203 -0
  230. data/plugins/provisioners/container/config.rb +83 -0
  231. data/plugins/provisioners/container/installer.rb +13 -0
  232. data/plugins/provisioners/container/plugin.rb +23 -0
  233. data/plugins/provisioners/container/provisioner.rb +28 -0
  234. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  235. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  236. data/plugins/provisioners/docker/client.rb +4 -175
  237. data/plugins/provisioners/docker/config.rb +2 -72
  238. data/plugins/provisioners/docker/installer.rb +3 -5
  239. data/plugins/provisioners/docker/plugin.rb +6 -6
  240. data/plugins/provisioners/docker/provisioner.rb +4 -10
  241. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  242. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  243. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  244. data/plugins/provisioners/podman/client.rb +12 -0
  245. data/plugins/provisioners/podman/config.rb +28 -0
  246. data/plugins/provisioners/podman/installer.rb +33 -0
  247. data/plugins/provisioners/podman/plugin.rb +38 -0
  248. data/plugins/provisioners/podman/provisioner.rb +52 -0
  249. data/plugins/provisioners/salt/bootstrap-salt.sh +7 -4
  250. data/plugins/provisioners/salt/provisioner.rb +4 -0
  251. data/plugins/provisioners/shell/config.rb +1 -6
  252. data/plugins/provisioners/shell/provisioner.rb +61 -26
  253. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  254. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  255. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  256. data/plugins/synced_folders/smb/plugin.rb +20 -0
  257. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  258. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  259. data/scripts/website_push_www.sh +1 -1
  260. data/templates/commands/init/Vagrantfile.min.erb +3 -0
  261. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  262. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  263. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  264. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  265. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  266. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  267. data/templates/guests/linux/etc_fstab.erb +6 -0
  268. data/templates/guests/nixos/network.erb +5 -6
  269. data/templates/locales/en.yml +221 -5
  270. data/templates/locales/providers_docker.yml +4 -0
  271. data/templates/nfs/exports_darwin.erb +1 -1
  272. data/vagrant.gemspec +14 -20
  273. data/version.txt +1 -1
  274. metadata +5092 -8978
  275. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  276. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  277. data/plugins/commands/login/client.rb +0 -253
  278. data/plugins/commands/login/command.rb +0 -137
  279. data/plugins/commands/login/errors.rb +0 -24
  280. data/plugins/commands/login/locales/en.yml +0 -49
  281. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  282. data/scripts/website_push_docs.sh +0 -40
@@ -67,6 +67,7 @@ module VagrantPlugins
67
67
 
68
68
  nfs_opts_setup(folders)
69
69
  folders = folder_dupe_check(folders)
70
+ ips = ips.uniq
70
71
  output = Vagrant::Util::TemplateRenderer.render('nfs/exports_linux',
71
72
  uuid: id,
72
73
  ips: ips,
@@ -48,7 +48,7 @@ module VagrantPlugins
48
48
  end
49
49
 
50
50
  # Finally, run the client.
51
- Vagrant::Util::Subprocess.execute(rdp_client, *args)
51
+ Vagrant::Util::Subprocess.execute(rdp_client, *args, {:detach => true})
52
52
  end
53
53
  end
54
54
  end
@@ -11,6 +11,16 @@ module VagrantPlugins
11
11
  Host
12
12
  end
13
13
 
14
+ host_capability("linux", "isofs_available") do
15
+ require_relative "cap/fs_iso"
16
+ Cap::FsISO
17
+ end
18
+
19
+ host_capability("linux", "create_iso") do
20
+ require_relative "cap/fs_iso"
21
+ Cap::FsISO
22
+ end
23
+
14
24
  host_capability("linux", "nfs_export") do
15
25
  require_relative "cap/nfs"
16
26
  Cap::NFS
@@ -0,0 +1,48 @@
1
+ require "pathname"
2
+ require "vagrant/util/caps"
3
+
4
+ module VagrantPlugins
5
+ module HostWindows
6
+ module Cap
7
+ class FsISO
8
+ extend Vagrant::Util::Caps::BuildISO
9
+
10
+ @@logger = Log4r::Logger.new("vagrant::host::windows::fs_iso")
11
+
12
+ BUILD_ISO_CMD = "oscdimg".freeze
13
+
14
+ # Check that the host has the ability to generate ISOs
15
+ #
16
+ # @param [Vagrant::Environment] env
17
+ # @return [Boolean]
18
+ def self.isofs_available(env)
19
+ !!Vagrant::Util::Which.which(BUILD_ISO_CMD)
20
+ end
21
+
22
+ # Generate an ISO file of the given source directory
23
+ #
24
+ # @param [Vagrant::Environment] env
25
+ # @param [String] source_directory Contents of ISO
26
+ # @param [Map] extra arguments to pass to the iso building command
27
+ # :file_destination (string) location to store ISO
28
+ # :volume_id (String) to set the volume name
29
+ # @return [Pathname] ISO location
30
+ # @note If file_destination exists, source_directory will be checked
31
+ # for recent modifications and a new ISO will be generated if requried.
32
+ def self.create_iso(env, source_directory, extra_opts={})
33
+ source_directory = Pathname.new(source_directory)
34
+ file_destination = self.ensure_output_iso(extra_opts[:file_destination])
35
+
36
+ iso_command = [BUILD_ISO_CMD, "-j1", "-o", "-m"]
37
+ iso_command << "-l#{extra_opts[:volume_id]}" if extra_opts[:volume_id]
38
+ iso_command << source_directory.to_s
39
+ iso_command << file_destination.to_s
40
+ self.build_iso(iso_command, source_directory, file_destination)
41
+
42
+ @@logger.info("ISO available at #{file_destination}")
43
+ file_destination
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -22,7 +22,7 @@ module VagrantPlugins
22
22
  args = rdp_info[:extra_args] + args
23
23
  end
24
24
  # Launch it
25
- Vagrant::Util::Subprocess.execute("mstsc", *args)
25
+ Vagrant::Util::Subprocess.execute("mstsc", *args, {:detach => true})
26
26
  end
27
27
  end
28
28
  end
@@ -11,6 +11,16 @@ module VagrantPlugins
11
11
  Host
12
12
  end
13
13
 
14
+ host_capability("windows", "isofs_available") do
15
+ require_relative "cap/fs_iso"
16
+ Cap::FsISO
17
+ end
18
+
19
+ host_capability("windows", "create_iso") do
20
+ require_relative "cap/fs_iso"
21
+ Cap::FsISO
22
+ end
23
+
14
24
  host_capability("windows", "provider_install_virtualbox") do
15
25
  require_relative "cap/provider_install_virtualbox"
16
26
  Cap::ProviderInstallVirtualBox
@@ -60,6 +70,11 @@ module VagrantPlugins
60
70
  require_relative "cap/ssh"
61
71
  Cap::SSH
62
72
  end
73
+
74
+ host_capability("windows", "smb_validate_password") do
75
+ require_relative "cap/smb"
76
+ Cap::SMB
77
+ end
63
78
  end
64
79
  end
65
80
  end
@@ -0,0 +1,133 @@
1
+ require "log4r"
2
+ require "securerandom"
3
+
4
+ module VagrantPlugins
5
+ module Kernel_V2
6
+ class VagrantConfigCloudInit < Vagrant.plugin("2", :config)
7
+ #-------------------------------------------------------------------
8
+ # Config class for cloud-init
9
+ #-------------------------------------------------------------------
10
+
11
+ DEFAULT_CONTENT_TYPES = ["text/cloud-boothook", "text/cloud-config",
12
+ "text/cloud-config-archive", "text/jinja2",
13
+ "text/part-handler", "text/upstart-job",
14
+ "text/x-include-once-url", "text/x-include-url",
15
+ "text/x-shellscript"].map(&:freeze).freeze
16
+
17
+ DEFAULT_CONFIG_TYPE = :user_data
18
+
19
+ # @note This value is for internal use only
20
+ #
21
+ # @return [String]
22
+ attr_reader :id
23
+
24
+ # The 'type' of data being stored. If not defined,
25
+ # will default to :user_data
26
+ #
27
+ # @return [Symbol]
28
+ attr_accessor :type
29
+
30
+ # @return [String]
31
+ attr_accessor :content_type
32
+
33
+ # The optional mime-part content-disposition filename.
34
+ #
35
+ # @return [String]
36
+ attr_accessor :content_disposition_filename
37
+
38
+ # @return [String]
39
+ attr_accessor :path
40
+
41
+ # @return [String]
42
+ attr_accessor :inline
43
+
44
+ def initialize(type=nil)
45
+ @logger = Log4r::Logger.new("vagrant::config::vm::cloud_init")
46
+
47
+ @type = type if type
48
+
49
+ @content_type = UNSET_VALUE
50
+ @content_disposition_filename = UNSET_VALUE
51
+ @path = UNSET_VALUE
52
+ @inline = UNSET_VALUE
53
+
54
+ # Internal options
55
+ @id = SecureRandom.uuid
56
+ end
57
+
58
+ def finalize!
59
+ if !@type
60
+ @type = DEFAULT_CONFIG_TYPE
61
+ else
62
+ @type = @type.to_sym
63
+ end
64
+
65
+ @content_type = nil if @content_type == UNSET_VALUE
66
+ @content_disposition_filename = nil if @content_disposition_filename == UNSET_VALUE
67
+ @path = nil if @path == UNSET_VALUE
68
+ @inline = nil if @inline == UNSET_VALUE
69
+ end
70
+
71
+ # @return [Array] array of strings of error messages from config option validation
72
+ def validate(machine)
73
+ errors = _detected_errors
74
+
75
+ if @type && @type != DEFAULT_CONFIG_TYPE
76
+ errors << I18n.t("vagrant.cloud_init.incorrect_type_set",
77
+ type: @type,
78
+ machine: machine.name,
79
+ default_type: DEFAULT_CONFIG_TYPE)
80
+ end
81
+
82
+ if !@content_type
83
+ errors << I18n.t("vagrant.cloud_init.content_type_not_set",
84
+ machine: machine.name,
85
+ accepted_types: DEFAULT_CONTENT_TYPES.join(', '))
86
+ elsif !DEFAULT_CONTENT_TYPES.include?(@content_type)
87
+ errors << I18n.t("vagrant.cloud_init.incorrect_content_type",
88
+ machine: machine.name,
89
+ content_type: @content_type,
90
+ accepted_types: DEFAULT_CONTENT_TYPES.join(', '))
91
+ end
92
+
93
+ if @path && @inline
94
+ errors << I18n.t("vagrant.cloud_init.path_and_inline_set",
95
+ machine: machine.name)
96
+ end
97
+
98
+ if @path
99
+ if !@path.is_a?(String)
100
+ errors << I18n.t("vagrant.cloud_init.incorrect_path_type",
101
+ machine: machine.name,
102
+ path: @path,
103
+ type: @path.class.name)
104
+ else
105
+ expanded_path = Pathname.new(@path).expand_path(machine.env.root_path)
106
+ if !expanded_path.file?
107
+ errors << I18n.t("vagrant.cloud_init.path_invalid",
108
+ path: expanded_path,
109
+ machine: machine.name)
110
+ end
111
+ end
112
+ end
113
+
114
+ if @inline
115
+ if !@inline.is_a?(String)
116
+ errors << I18n.t("vagrant.cloud_init.incorrect_inline_type",
117
+ machine: machine.name,
118
+ type: @inline.class.name)
119
+ end
120
+ end
121
+
122
+ errors
123
+ end
124
+
125
+ # The String representation of this config.
126
+ #
127
+ # @return [String]
128
+ def to_s
129
+ "cloud_init config"
130
+ end
131
+ end
132
+ end
133
+ end
@@ -12,6 +12,8 @@ module VagrantPlugins
12
12
 
13
13
  DEFAULT_DISK_TYPES = [:disk, :dvd, :floppy].freeze
14
14
 
15
+ FILE_CHAR_REGEX = /[^-a-z0-9_]/i.freeze
16
+
15
17
  # Note: This value is for internal use only
16
18
  #
17
19
  # @return [String]
@@ -29,12 +31,18 @@ module VagrantPlugins
29
31
  # @return [Symbol]
30
32
  attr_accessor :type
31
33
 
34
+ # Type of disk extension to create. Defaults to `vdi`
35
+ #
36
+ # @return [String]
37
+ attr_accessor :disk_ext
38
+
32
39
  # Size of disk to create
33
40
  #
34
41
  # @return [Integer,String]
35
42
  attr_accessor :size
36
43
 
37
- # Path to the location of the disk file (Optional)
44
+ # Path to the location of the disk file (Optional for `:disk` type,
45
+ # required for `:dvd` type.)
38
46
  #
39
47
  # @return [String]
40
48
  attr_accessor :file
@@ -61,6 +69,7 @@ module VagrantPlugins
61
69
  @size = UNSET_VALUE
62
70
  @primary = UNSET_VALUE
63
71
  @file = UNSET_VALUE
72
+ @disk_ext = UNSET_VALUE
64
73
 
65
74
  # Internal options
66
75
  @id = SecureRandom.uuid
@@ -91,7 +100,11 @@ module VagrantPlugins
91
100
  end
92
101
 
93
102
  current = @provider_config.merge(current) if !@provider_config.empty?
94
- @provider_config = current
103
+ if current
104
+ @provider_config = current
105
+ else
106
+ @provider_config = {}
107
+ end
95
108
  end
96
109
 
97
110
  def finalize!
@@ -105,21 +118,21 @@ module VagrantPlugins
105
118
  @primary = false
106
119
  end
107
120
 
108
- if @name == UNSET_VALUE
121
+ if @name.is_a?(String) && @name.match(FILE_CHAR_REGEX)
122
+ @logger.warn("Vagrant will remove detected invalid characters in '#{@name}' and convert the disk name into something usable for a file")
123
+ @name.gsub!(FILE_CHAR_REGEX, "_")
124
+ elsif @name == UNSET_VALUE
109
125
  if @primary
110
126
  @name = "vagrant_primary"
111
127
  else
112
- @name = "name_#{@type.to_s}_#{@id.split("-").last}"
128
+ @name = nil
113
129
  end
114
130
  end
115
-
116
- @provider_config = nil if @provider_config == {}
117
131
  end
118
132
 
119
133
  # @return [Array] array of strings of error messages from config option validation
120
134
  def validate(machine)
121
135
  errors = _detected_errors
122
-
123
136
  # validate type with list of known disk types
124
137
 
125
138
  if !DEFAULT_DISK_TYPES.include?(@type)
@@ -127,14 +140,48 @@ module VagrantPlugins
127
140
  types: DEFAULT_DISK_TYPES.join(', '))
128
141
  end
129
142
 
143
+ if @disk_ext == UNSET_VALUE
144
+ if machine.provider.capability?(:set_default_disk_ext)
145
+ @disk_ext = machine.provider.capability(:set_default_disk_ext)
146
+ else
147
+ @logger.warn("No provider capability defined to set default 'disk_ext' type. Will use 'vdi' for disk extension.")
148
+ @disk_ext = "vdi"
149
+ end
150
+ elsif @disk_ext
151
+ @disk_ext = @disk_ext.downcase
152
+
153
+ if machine.provider.capability?(:validate_disk_ext)
154
+ if !machine.provider.capability(:validate_disk_ext, @disk_ext)
155
+ if machine.provider.capability?(:default_disk_exts)
156
+ disk_exts = machine.provider.capability(:default_disk_exts).join(', ')
157
+ else
158
+ disk_exts = "not found"
159
+ end
160
+ errors << I18n.t("vagrant.config.disk.invalid_ext", ext: @disk_ext,
161
+ name: @name,
162
+ exts: disk_exts)
163
+ end
164
+ else
165
+ @logger.warn("No provider capability defined to validate 'disk_ext' type")
166
+ end
167
+ end
168
+
130
169
  if @size && !@size.is_a?(Integer)
131
170
  if @size.is_a?(String)
132
171
  @size = Vagrant::Util::Numeric.string_to_bytes(@size)
133
172
  end
173
+ end
134
174
 
135
- if !@size
136
- errors << I18n.t("vagrant.config.disk.invalid_size", name: @name, machine: machine.name)
137
- end
175
+ if !@size && type == :disk
176
+ errors << I18n.t("vagrant.config.disk.invalid_size", name: @name, machine: machine.name)
177
+ end
178
+
179
+ if @type == :dvd && !@file
180
+ errors << I18n.t("vagrant.config.disk.dvd_type_file_required", name: @name, machine: machine.name)
181
+ end
182
+
183
+ if @type == :dvd && @primary
184
+ errors << I18n.t("vagrant.config.disk.dvd_type_primary", name: @name, machine: machine.name)
138
185
  end
139
186
 
140
187
  if @file
@@ -147,13 +194,19 @@ module VagrantPlugins
147
194
  end
148
195
 
149
196
  if @provider_config
150
- if !@provider_config.keys.include?(machine.provider_name)
151
- machine.env.ui.warn(I18n.t("vagrant.config.disk.missing_provider",
152
- machine: machine.name,
153
- provider_name: machine.provider_name))
197
+ if !@provider_config.empty?
198
+ if !@provider_config.key?(machine.provider_name)
199
+ machine.env.ui.warn(I18n.t("vagrant.config.disk.missing_provider",
200
+ machine: machine.name,
201
+ provider_name: machine.provider_name))
202
+ end
154
203
  end
155
204
  end
156
205
 
206
+ if !@name
207
+ errors << I18n.t("vagrant.config.disk.no_name_set", machine: machine.name)
208
+ end
209
+
157
210
  errors
158
211
  end
159
212
 
@@ -1,9 +1,12 @@
1
1
  module VagrantPlugins
2
2
  module Kernel_V2
3
3
  class SSHConnectConfig < Vagrant.plugin("2", :config)
4
+ DEFAULT_SSH_CONNECT_TIMEOUT = 15
5
+
4
6
  attr_accessor :host
5
7
  attr_accessor :port
6
8
  attr_accessor :config
9
+ attr_accessor :connect_timeout
7
10
  attr_accessor :private_key_path
8
11
  attr_accessor :username
9
12
  attr_accessor :password
@@ -20,6 +23,7 @@ module VagrantPlugins
20
23
  @host = UNSET_VALUE
21
24
  @port = UNSET_VALUE
22
25
  @config = UNSET_VALUE
26
+ @connect_timeout = UNSET_VALUE
23
27
  @private_key_path = UNSET_VALUE
24
28
  @username = UNSET_VALUE
25
29
  @password = UNSET_VALUE
@@ -47,6 +51,7 @@ module VagrantPlugins
47
51
  @dsa_authentication = true if @dsa_authentication == UNSET_VALUE
48
52
  @extra_args = nil if @extra_args == UNSET_VALUE
49
53
  @config = nil if @config == UNSET_VALUE
54
+ @connect_timeout = DEFAULT_SSH_CONNECT_TIMEOUT if @connect_timeout == UNSET_VALUE
50
55
 
51
56
  if @private_key_path && !@private_key_path.is_a?(Array)
52
57
  @private_key_path = [@private_key_path]
@@ -76,6 +81,15 @@ module VagrantPlugins
76
81
  when :secure
77
82
  @verify_host_key = :always
78
83
  end
84
+
85
+ # Attempt to convert timeout to integer value
86
+ # If we can't convert the connect timeout into an integer or
87
+ # if the value is less than 1, set it to the default value
88
+ begin
89
+ @connect_timeout = @connect_timeout.to_i
90
+ rescue
91
+ # ignore
92
+ end
79
93
  end
80
94
 
81
95
  # NOTE: This is _not_ a valid config validation method, since it
@@ -110,6 +124,16 @@ module VagrantPlugins
110
124
  machine.env.ui.warn(I18n.t("vagrant.config.ssh.paranoid_deprecated"))
111
125
  end
112
126
 
127
+ if !@connect_timeout.is_a?(Integer)
128
+ errors << I18n.t(
129
+ "vagrant.config.ssh.connect_timeout_invalid_type",
130
+ given: @connect_timeout.class.name)
131
+ elsif @connect_timeout < 1
132
+ errors << I18n.t(
133
+ "vagrant.config.ssh.connect_timeout_invalid_value",
134
+ given: @connect_timeout.to_s)
135
+ end
136
+
113
137
  errors
114
138
  end
115
139
  end