vagrant-unbundled 2.2.6.2 → 2.2.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (287) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +14 -0
  3. data/CHANGELOG.md +213 -2
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +23 -0
  8. data/contrib/README.md +1 -0
  9. data/contrib/bash/completion.sh +13 -1
  10. data/contrib/sudoers/linux-suse +2 -2
  11. data/contrib/zsh/_vagrant +738 -0
  12. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  13. data/lib/vagrant.rb +25 -4
  14. data/lib/vagrant/action.rb +8 -0
  15. data/lib/vagrant/action/builder.rb +184 -38
  16. data/lib/vagrant/action/builtin/box_add.rb +20 -8
  17. data/lib/vagrant/action/builtin/box_check_outdated.rb +12 -15
  18. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  19. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  20. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  21. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  22. data/lib/vagrant/action/builtin/disk.rb +52 -0
  23. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  24. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  25. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  26. data/lib/vagrant/action/builtin/mixin_provisioners.rb +20 -1
  27. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  28. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  29. data/lib/vagrant/action/builtin/ssh_run.rb +21 -3
  30. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  31. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  32. data/lib/vagrant/action/hook.rb +76 -23
  33. data/lib/vagrant/action/runner.rb +12 -27
  34. data/lib/vagrant/action/warden.rb +28 -22
  35. data/lib/vagrant/box.rb +11 -4
  36. data/lib/vagrant/box_collection.rb +1 -1
  37. data/lib/vagrant/box_metadata.rb +17 -3
  38. data/lib/vagrant/bundler.rb +298 -59
  39. data/lib/vagrant/cli.rb +4 -2
  40. data/lib/vagrant/errors.rb +61 -1
  41. data/lib/vagrant/machine.rb +64 -11
  42. data/lib/vagrant/machine_index.rb +28 -1
  43. data/lib/vagrant/plugin/manager.rb +25 -14
  44. data/lib/vagrant/plugin/v2/command.rb +7 -2
  45. data/lib/vagrant/plugin/v2/components.rb +6 -0
  46. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  47. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  48. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  49. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  50. data/lib/vagrant/shared_helpers.rb +36 -0
  51. data/lib/vagrant/ui.rb +51 -5
  52. data/lib/vagrant/util.rb +1 -0
  53. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  54. data/lib/vagrant/util/caps.rb +48 -0
  55. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  56. data/lib/vagrant/util/curl_helper.rb +8 -5
  57. data/lib/vagrant/util/directory.rb +19 -0
  58. data/lib/vagrant/util/downloader.rb +10 -5
  59. data/lib/vagrant/util/file_checksum.rb +6 -2
  60. data/lib/vagrant/util/guest_hosts.rb +68 -0
  61. data/lib/vagrant/util/guest_inspection.rb +9 -1
  62. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  63. data/lib/vagrant/util/io.rb +7 -27
  64. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  65. data/lib/vagrant/util/is_port_open.rb +8 -20
  66. data/lib/vagrant/util/map_command_options.rb +33 -0
  67. data/lib/vagrant/util/mime.rb +92 -0
  68. data/lib/vagrant/util/network_ip.rb +11 -1
  69. data/lib/vagrant/util/numeric.rb +69 -0
  70. data/lib/vagrant/util/platform.rb +10 -2
  71. data/lib/vagrant/util/powershell.rb +1 -1
  72. data/lib/vagrant/util/subprocess.rb +9 -1
  73. data/lib/vagrant/util/template_renderer.rb +2 -2
  74. data/lib/vagrant/util/uploader.rb +7 -4
  75. data/lib/vagrant/vagrantfile.rb +1 -1
  76. data/plugins/commands/autocomplete/command/install.rb +49 -0
  77. data/plugins/commands/autocomplete/command/root.rb +64 -0
  78. data/plugins/commands/autocomplete/plugin.rb +18 -0
  79. data/plugins/commands/box/command/outdated.rb +14 -2
  80. data/plugins/commands/cap/command.rb +5 -1
  81. data/plugins/commands/cloud/auth/login.rb +20 -23
  82. data/plugins/commands/cloud/auth/logout.rb +2 -10
  83. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +57 -0
  84. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  85. data/plugins/commands/cloud/box/create.rb +33 -29
  86. data/plugins/commands/cloud/box/delete.rb +30 -24
  87. data/plugins/commands/cloud/box/show.rb +41 -31
  88. data/plugins/commands/cloud/box/update.rb +34 -26
  89. data/plugins/commands/cloud/client/client.rb +50 -81
  90. data/plugins/commands/cloud/list.rb +3 -4
  91. data/plugins/commands/cloud/locales/en.yml +10 -10
  92. data/plugins/commands/cloud/plugin.rb +10 -0
  93. data/plugins/commands/cloud/provider/create.rb +38 -28
  94. data/plugins/commands/cloud/provider/delete.rb +39 -29
  95. data/plugins/commands/cloud/provider/update.rb +37 -28
  96. data/plugins/commands/cloud/provider/upload.rb +44 -34
  97. data/plugins/commands/cloud/publish.rb +185 -108
  98. data/plugins/commands/cloud/search.rb +34 -21
  99. data/plugins/commands/cloud/util.rb +266 -162
  100. data/plugins/commands/cloud/version/create.rb +33 -28
  101. data/plugins/commands/cloud/version/delete.rb +35 -28
  102. data/plugins/commands/cloud/version/release.rb +35 -29
  103. data/plugins/commands/cloud/version/revoke.rb +36 -29
  104. data/plugins/commands/cloud/version/update.rb +29 -25
  105. data/plugins/commands/destroy/command.rb +6 -2
  106. data/plugins/commands/login/plugin.rb +0 -13
  107. data/plugins/commands/snapshot/command/save.rb +13 -8
  108. data/plugins/commands/ssh_config/command.rb +1 -1
  109. data/plugins/communicators/ssh/communicator.rb +25 -24
  110. data/plugins/communicators/winrm/config.rb +1 -1
  111. data/plugins/communicators/winrm/helper.rb +1 -1
  112. data/plugins/communicators/winrm/shell.rb +1 -1
  113. data/plugins/communicators/winssh/communicator.rb +126 -38
  114. data/plugins/communicators/winssh/config.rb +3 -7
  115. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  116. data/plugins/guests/alpine/cap/rsync.rb +1 -1
  117. data/plugins/guests/alpine/plugin.rb +16 -0
  118. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  119. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  120. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  121. data/plugins/guests/arch/cap/smb.rb +1 -1
  122. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  123. data/plugins/guests/centos/cap/flavor.rb +24 -0
  124. data/plugins/guests/centos/guest.rb +9 -0
  125. data/plugins/guests/centos/plugin.rb +20 -0
  126. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  127. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  128. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  129. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +109 -13
  130. data/plugins/guests/darwin/plugin.rb +15 -0
  131. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  132. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  133. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  134. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  135. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  136. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  137. data/plugins/guests/haiku/plugin.rb +15 -0
  138. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  139. data/plugins/guests/linux/cap/halt.rb +9 -1
  140. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  141. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  142. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +75 -0
  143. data/plugins/guests/linux/cap/reboot.rb +53 -0
  144. data/plugins/guests/linux/plugin.rb +20 -0
  145. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  146. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  147. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  148. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  149. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  150. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  151. data/plugins/guests/redhat/cap/nfs_client.rb +2 -2
  152. data/plugins/guests/redhat/cap/smb.rb +20 -0
  153. data/plugins/guests/redhat/plugin.rb +5 -0
  154. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  155. data/plugins/guests/solaris11/plugin.rb +5 -0
  156. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  157. data/plugins/guests/windows/cap/public_key.rb +3 -3
  158. data/plugins/guests/windows/cap/reboot.rb +10 -5
  159. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  160. data/plugins/hosts/darwin/cap/nfs.rb +11 -0
  161. data/plugins/hosts/darwin/plugin.rb +15 -0
  162. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/linux/cap/nfs.rb +21 -2
  164. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  165. data/plugins/hosts/linux/plugin.rb +10 -0
  166. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  167. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  168. data/plugins/hosts/windows/plugin.rb +15 -0
  169. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  170. data/plugins/kernel_v2/config/disk.rb +221 -0
  171. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  172. data/plugins/kernel_v2/config/vm.rb +230 -15
  173. data/plugins/kernel_v2/config/vm_provisioner.rb +17 -3
  174. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  175. data/plugins/providers/docker/action.rb +8 -17
  176. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  177. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  178. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  179. data/plugins/providers/docker/communicator.rb +1 -1
  180. data/plugins/providers/docker/driver.rb +73 -10
  181. data/plugins/providers/docker/errors.rb +4 -0
  182. data/plugins/providers/docker/executor/local.rb +7 -1
  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 +14 -1
  205. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +10 -1
  206. data/plugins/providers/virtualbox/action/export.rb +4 -2
  207. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  208. data/plugins/providers/virtualbox/action/import.rb +8 -4
  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 +35 -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 +17 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +39 -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 +38 -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/arch/ansible_install.rb +20 -3
  227. data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +4 -5
  228. data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +2 -2
  229. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +2 -2
  230. data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +8 -4
  231. data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +2 -2
  232. data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +2 -1
  233. data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +3 -3
  234. data/plugins/provisioners/ansible/plugin.rb +5 -0
  235. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  236. data/plugins/provisioners/container/client.rb +203 -0
  237. data/plugins/provisioners/container/config.rb +83 -0
  238. data/plugins/provisioners/container/installer.rb +13 -0
  239. data/plugins/provisioners/container/plugin.rb +23 -0
  240. data/plugins/provisioners/container/provisioner.rb +28 -0
  241. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  242. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  243. data/plugins/provisioners/docker/client.rb +4 -175
  244. data/plugins/provisioners/docker/config.rb +2 -72
  245. data/plugins/provisioners/docker/installer.rb +3 -5
  246. data/plugins/provisioners/docker/plugin.rb +6 -6
  247. data/plugins/provisioners/docker/provisioner.rb +4 -10
  248. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  249. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  250. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  251. data/plugins/provisioners/podman/client.rb +12 -0
  252. data/plugins/provisioners/podman/config.rb +28 -0
  253. data/plugins/provisioners/podman/installer.rb +33 -0
  254. data/plugins/provisioners/podman/plugin.rb +38 -0
  255. data/plugins/provisioners/podman/provisioner.rb +52 -0
  256. data/plugins/provisioners/salt/provisioner.rb +4 -0
  257. data/plugins/provisioners/shell/config.rb +1 -6
  258. data/plugins/provisioners/shell/provisioner.rb +61 -26
  259. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  260. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  261. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  262. data/plugins/synced_folders/smb/plugin.rb +20 -0
  263. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  264. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  265. data/scripts/website_push_www.sh +1 -1
  266. data/templates/commands/init/Vagrantfile.erb +1 -1
  267. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  268. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  269. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  270. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  271. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  272. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  273. data/templates/guests/linux/etc_fstab.erb +6 -0
  274. data/templates/locales/en.yml +235 -6
  275. data/templates/locales/providers_docker.yml +6 -0
  276. data/templates/nfs/exports_darwin.erb +7 -0
  277. data/vagrant.gemspec +14 -15
  278. data/version.txt +1 -1
  279. metadata +3577 -3855
  280. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  281. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  282. data/plugins/commands/login/client.rb +0 -253
  283. data/plugins/commands/login/command.rb +0 -137
  284. data/plugins/commands/login/errors.rb +0 -24
  285. data/plugins/commands/login/locales/en.yml +0 -49
  286. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  287. data/scripts/website_push_docs.sh +0 -40
@@ -0,0 +1,13 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$DiskFilePath
6
+ )
7
+
8
+ try {
9
+ Hyper-V\Dismount-VHD -path $DiskFilePath
10
+ } catch {
11
+ Write-ErrorMessage "Failed to dismount disk info from disk file path ${DiskFilePath}: ${PSItem}"
12
+ exit 1
13
+ }
@@ -0,0 +1,16 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$DiskFilePath
6
+ )
7
+
8
+ try {
9
+ $Disk = Hyper-V\Get-VHD -path $DiskFilePath
10
+ } catch {
11
+ Write-ErrorMessage "Failed to retrieve disk info from disk file path ${DiskFilePath}: ${PSItem}"
12
+ exit 1
13
+ }
14
+
15
+ $result = ConvertTo-json $Disk
16
+ Write-OutputMessage $result
@@ -14,7 +14,7 @@ try
14
14
  # type was loaded in Microsoft.HyperV.PowerShell
15
15
  [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.HyperV.PowerShell.Objects, Culture=neutral, PublicKeyToken=31bf3856ad364e35')
16
16
  } catch {
17
- # Empty catch ok, since if we didn't load the types, we will fail in the next block
17
+ # Empty catch ok, since if we didn't load the types, we will fail in the next block
18
18
  }
19
19
 
20
20
  $VmmsPath = if ([environment]::Is64BitProcess) { "$($env:SystemRoot)\System32\vmms.exe" } else { "$($env:SystemRoot)\Sysnative\vmms.exe" }
@@ -0,0 +1,17 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId
6
+ )
7
+
8
+ try {
9
+ $VM = Hyper-V\Get-VM -Id $VmId
10
+ $Disks = @(Hyper-V\Get-VMHardDiskDrive -VMName $VM.Name)
11
+ } catch {
12
+ Write-ErrorMessage "Failed to retrieve all disk info from ${VM}: ${PSItem}"
13
+ exit 1
14
+ }
15
+
16
+ $result = ConvertTo-json $Disks
17
+ Write-OutputMessage $result
@@ -0,0 +1,31 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$Path,
6
+ [Parameter(Mandatory=$true)]
7
+ [UInt64]$SizeBytes,
8
+ [switch]$Fixed,
9
+ [switch]$Differencing,
10
+ [string]$ParentPath,
11
+ [Uint32]$BlockSizeBytes,
12
+ [UInt32]$LogicalSectorSizeBytes,
13
+ [UInt32]$PhysicalSectorSizeBytes,
14
+ [UInt32]$SourceDisk
15
+ )
16
+
17
+ $Params = @{}
18
+
19
+ foreach ($key in $MyInvocation.BoundParameters.keys) {
20
+ $value = (Get-Variable -Exclude "ErrorAction" $key).Value
21
+ if ($key -ne "ErrorAction") {
22
+ $Params.Add($key, $value)
23
+ }
24
+ }
25
+
26
+ try {
27
+ Hyper-V\New-VHD @Params
28
+ } catch {
29
+ Write-ErrorMessage "Failed to create disk ${DiskFilePath}: ${PSItem}"
30
+ exit 1
31
+ }
@@ -0,0 +1,25 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId,
6
+ [Parameter(Mandatory=$true)]
7
+ [string]$ControllerType,
8
+ [Parameter(Mandatory=$true)]
9
+ [string]$ControllerNumber,
10
+ [Parameter(Mandatory=$true)]
11
+ [string]$ControllerLocation,
12
+ [Parameter(Mandatory=$true)]
13
+ [string]$DiskFilePath
14
+ )
15
+
16
+ try {
17
+ $VM = Hyper-V\Get-VM -Id $VmId
18
+
19
+ Hyper-v\Remove-VMHardDiskDrive -VMName $VM.Name -ControllerType $ControllerType -ControllerNumber $ControllerNumber -ControllerLocation $ControllerLocation
20
+
21
+ Remove-Item -Path $DiskFilePath
22
+ } catch {
23
+ Write-ErrorMessage "Failed to remove disk ${DiskFilePath} to VM ${VM}: ${PSItem}"
24
+ exit 1
25
+ }
@@ -0,0 +1,18 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId,
6
+ [Parameter(Mandatory=$true)]
7
+ [string]$DiskFilePath,
8
+ [Parameter(Mandatory=$true)]
9
+ [UInt64]$DiskSize
10
+ )
11
+
12
+ try {
13
+ $VM = Hyper-V\Get-VM -Id $VmId
14
+ Hyper-V\Resize-VHD -Path $DiskFilePath -SizeBytes $DiskSize
15
+ } catch {
16
+ Write-ErrorMessage "Failed to resize disk ${DiskFilePath} for VM ${VM}: ${PSItem}"
17
+ exit 1
18
+ }
@@ -0,0 +1,24 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param (
4
+ [parameter (Mandatory=$true)]
5
+ [Guid] $VMID,
6
+ [parameter (Mandatory=$true)]
7
+ [string] $Type
8
+ )
9
+
10
+ $ErrorActionPreference = "Stop"
11
+
12
+ try {
13
+ $VM = Hyper-V\Get-VM -Id $VMID
14
+ } catch {
15
+ Write-ErrorMessage "Failed to locate VM: ${PSItem}"
16
+ exit 1
17
+ }
18
+
19
+ try {
20
+ Hyper-V\Set-VM -VM $VM -EnhancedSessionTransportType $Type
21
+ } catch {
22
+ Write-ErrorMessage "Failed to assign EnhancedSessionTransportType to ${Type}: ${PSItem}"
23
+ exit 1
24
+ }
@@ -4,7 +4,7 @@ param (
4
4
  [parameter (Mandatory=$true)]
5
5
  [string] $VMID,
6
6
  [parameter (Mandatory=$true)]
7
- [string] $Name,
7
+ [string] $Id,
8
8
  [parameter (Mandatory=$false)]
9
9
  [switch] $Enable
10
10
  )
@@ -19,9 +19,9 @@ try {
19
19
  }
20
20
 
21
21
  try {
22
- Set-VagrantVMService -VM $VM -Name $Name -Enable $Enable
22
+ Set-VagrantVMService -VM $VM -Id $Id -Enable $Enable
23
23
  } catch {
24
24
  if($Enable){ $action = "enable" } else { $action = "disable" }
25
- Write-ErrorMessage "Failed to ${action} VM integration service ${Name}: ${PSItem}"
25
+ Write-ErrorMessage "Failed to ${action} VM integration service id ${Id}: ${PSItem}"
26
26
  exit 1
27
27
  }
@@ -223,6 +223,7 @@ function New-VagrantVMXML {
223
223
 
224
224
  # Determine if secure boot is enabled
225
225
  $SecureBoot = (Select-Xml -XML $VMConfig -XPath "//secure_boot_enabled").Node."#text"
226
+ $SecureBootTemplate = (Select-Xml -XML $VMConfig -XPath "//secure_boot_template").Node."#text"
226
227
 
227
228
  $NewVMConfig = @{
228
229
  Name = $VMName;
@@ -242,6 +243,13 @@ function New-VagrantVMXML {
242
243
  if($Gen -gt 1) {
243
244
  if($SecureBoot -eq "True") {
244
245
  Hyper-V\Set-VMFirmware -VM $VM -EnableSecureBoot On
246
+ if (
247
+ ( ![System.String]::IsNullOrEmpty($SecureBootTemplate) )`
248
+ -and`
249
+ ( (Get-Command Hyper-V\Set-VMFirmware).Parameters.Keys.Contains("secureboottemplate") )
250
+ ) {
251
+ Hyper-V\Set-VMFirmware -VM $VM -SecureBootTemplate $SecureBootTemplate
252
+ }
245
253
  } else {
246
254
  Hyper-V\Set-VMFirmware -VM $VM -EnableSecureBoot Off
247
255
  }
@@ -614,15 +622,15 @@ function Set-VagrantVMService {
614
622
  [parameter (Mandatory=$true)]
615
623
  [Microsoft.HyperV.PowerShell.VirtualMachine] $VM,
616
624
  [parameter (Mandatory=$true)]
617
- [string] $Name,
625
+ [string] $Id,
618
626
  [parameter (Mandatory=$true)]
619
627
  [bool] $Enable
620
628
  )
621
629
 
622
630
  if($Enable) {
623
- Hyper-V\Enable-VMIntegrationService -VM $VM -Name $Name
631
+ Hyper-V\Get-VMIntegrationService -VM $VM | ?{$_.Id -match $Id} | Hyper-V\Enable-VMIntegrationService
624
632
  } else {
625
- Hyper-V\Disable-VMIntegrationService -VM $VM -Name $Name
633
+ Hyper-V\Get-VMIntegrationService -VM $VM | ?{$_.Id -match $Id} | Hyper-V\Disable-VMIntegrationService
626
634
  }
627
635
  return $VM
628
636
  <#
@@ -634,9 +642,9 @@ Enable or disable Hyper-V VM integration services.
634
642
 
635
643
  Hyper-V VM for modification.
636
644
 
637
- .PARAMETER Name
645
+ .PARAMETER Id
638
646
 
639
- Name of the integration service.
647
+ Id of the integration service.
640
648
 
641
649
  .PARAMETER Enable
642
650
 
@@ -722,7 +730,7 @@ function Check-VagrantHyperVAccess {
722
730
  )
723
731
  $acl = Get-ACL -Path $Path
724
732
  $systemACL = $acl.Access | where {
725
- $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -eq "S-1-5-18" -and
733
+ try { return $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -eq "S-1-5-18" } catch { return $false } -and
726
734
  $_.FileSystemRights -eq "FullControl" -and
727
735
  $_.AccessControlType -eq "Allow" -and
728
736
  $_.IsInherited -eq $true}
@@ -79,10 +79,22 @@ module VagrantPlugins
79
79
  b.use ForwardPorts
80
80
  b.use SetHostname
81
81
  b.use SaneDefaults
82
+ b.use Call, IsEnvSet, :cloud_init do |env, b2|
83
+ if env[:result]
84
+ b2.use CloudInitSetup
85
+ end
86
+ end
87
+ b.use CleanupDisks
88
+ b.use Disk
82
89
  b.use Customize, "pre-boot"
83
90
  b.use Boot
84
91
  b.use Customize, "post-boot"
85
92
  b.use WaitForCommunicator, [:starting, :running]
93
+ b.use Call, IsEnvSet, :cloud_init do |env, b2|
94
+ if env[:result]
95
+ b2.use CloudInitWait
96
+ end
97
+ end
86
98
  b.use Customize, "post-comm"
87
99
  b.use CheckGuestAdditions
88
100
  end
@@ -104,7 +116,7 @@ module VagrantPlugins
104
116
  b3.use ConfigValidate
105
117
  b3.use ProvisionerCleanup, :before
106
118
  b3.use CheckAccessible
107
- b3.use EnvSet, force_halt: true
119
+ b3.use EnvSet, force_halt: env2[:force_halt]
108
120
  b3.use action_halt
109
121
  b3.use Destroy
110
122
  b3.use CleanMachineFolder
@@ -409,6 +421,7 @@ module VagrantPlugins
409
421
  end
410
422
  end
411
423
 
424
+ b.use EnvSet, cloud_init: true
412
425
  b.use action_start
413
426
  end
414
427
  end
@@ -13,7 +13,16 @@ module VagrantPlugins
13
13
  end
14
14
 
15
15
  def call(env)
16
- clean_machine_folder(env[:machine].provider.driver.read_machine_folder)
16
+ machine_folder = env[:machine].provider.driver.read_machine_folder
17
+
18
+ begin
19
+ clean_machine_folder(machine_folder)
20
+ rescue Errno::EPERM
21
+ raise Vagrant::Errors::MachineFolderNotAccessible,
22
+ name: env[:machine].name,
23
+ path: machine_folder
24
+ end
25
+
17
26
  @app.call(env)
18
27
  end
19
28
 
@@ -23,8 +23,10 @@ module VagrantPlugins
23
23
  def export
24
24
  @env[:ui].info I18n.t("vagrant.actions.vm.export.exporting")
25
25
  @env[:machine].provider.driver.export(ovf_path) do |progress|
26
- @env[:ui].clear_line
27
- @env[:ui].report_progress(progress.percent, 100, false)
26
+ @env[:ui].rewriting do |ui|
27
+ ui.clear_line
28
+ ui.report_progress(progress.percent, 100, false)
29
+ end
28
30
  end
29
31
 
30
32
  # Clear the line a final time so the next data can appear
@@ -48,7 +48,7 @@ module VagrantPlugins
48
48
  # bridged networking don't require port-forwarding and establishing
49
49
  # forwarded ports on these attachment types has uncertain behaviour.
50
50
  @env[:ui].detail(I18n.t("vagrant.actions.vm.forward_ports.forwarding_entry",
51
- message_attributes))
51
+ **message_attributes))
52
52
 
53
53
  # Verify we have the network interface to attach to
54
54
  if !interfaces[fp.adapter]
@@ -62,7 +62,7 @@ module VagrantPlugins
62
62
  # so verify that that is the case.
63
63
  if interfaces[fp.adapter][:type] != :nat
64
64
  @env[:ui].detail(I18n.t("vagrant.actions.vm.forward_ports.non_nat",
65
- message_attributes))
65
+ **message_attributes))
66
66
  next
67
67
  end
68
68
 
@@ -19,8 +19,10 @@ module VagrantPlugins
19
19
  env[:ui].info I18n.t("vagrant.actions.vm.clone.creating")
20
20
  env[:machine].id = env[:machine].provider.driver.clonevm(
21
21
  env[:clone_id], env[:clone_snapshot]) do |progress|
22
- env[:ui].clear_line
23
- env[:ui].report_progress(progress, 100, false)
22
+ env[:ui].rewriting do |ui|
23
+ ui.clear_line
24
+ ui.report_progress(progress, 100, false)
25
+ end
24
26
  end
25
27
 
26
28
  # Clear the line one last time since the progress meter doesn't
@@ -51,8 +53,10 @@ module VagrantPlugins
51
53
  # Import the virtual machine
52
54
  ovf_file = env[:machine].box.directory.join("box.ovf").to_s
53
55
  id = env[:machine].provider.driver.import(ovf_file) do |progress|
54
- env[:ui].clear_line
55
- env[:ui].report_progress(progress, 100, false)
56
+ env[:ui].rewriting do |ui|
57
+ ui.clear_line
58
+ ui.report_progress(progress, 100, false)
59
+ end
56
60
  end
57
61
 
58
62
  # Set the machine ID
@@ -55,8 +55,10 @@ module VagrantPlugins
55
55
  @logger.info("Creating base snapshot for master VM.")
56
56
  env[:machine].provider.driver.create_snapshot(
57
57
  env[:clone_id], name) do |progress|
58
- env[:ui].clear_line
59
- env[:ui].report_progress(progress, 100, false)
58
+ env[:ui].rewriting do |ui|
59
+ ui.clear_line
60
+ ui.report_progress(progress, 100, false)
61
+ end
60
62
  end
61
63
  end
62
64
  end
@@ -12,8 +12,10 @@ module VagrantPlugins
12
12
  name: env[:snapshot_name]))
13
13
  env[:machine].provider.driver.delete_snapshot(
14
14
  env[:machine].id, env[:snapshot_name]) do |progress|
15
- env[:ui].clear_line
16
- env[:ui].report_progress(progress, 100, false)
15
+ env[:ui].rewriting do |ui|
16
+ ui.clear_line
17
+ ui.report_progress(progress, 100, false)
18
+ end
17
19
  end
18
20
 
19
21
  # Clear the line one last time since the progress meter doesn't disappear
@@ -12,8 +12,10 @@ module VagrantPlugins
12
12
  name: env[:snapshot_name]))
13
13
  env[:machine].provider.driver.restore_snapshot(
14
14
  env[:machine].id, env[:snapshot_name]) do |progress|
15
- env[:ui].clear_line
16
- env[:ui].report_progress(progress, 100, false)
15
+ env[:ui].rewriting do |ui|
16
+ ui.clear_line
17
+ ui.report_progress(progress, 100, false)
18
+ end
17
19
  end
18
20
 
19
21
  # Clear the line one last time since the progress meter doesn't disappear
@@ -0,0 +1,85 @@
1
+ require "log4r"
2
+ require "vagrant/util/experimental"
3
+
4
+ module VagrantPlugins
5
+ module ProviderVirtualBox
6
+ module Cap
7
+ module CleanupDisks
8
+ LOGGER = Log4r::Logger.new("vagrant::plugins::virtualbox::cleanup_disks")
9
+
10
+ # @param [Vagrant::Machine] machine
11
+ # @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_disks
12
+ # @param [Hash] disk_meta_file - A hash of all the previously defined disks from the last configure_disk action
13
+ def self.cleanup_disks(machine, defined_disks, disk_meta_file)
14
+ return if disk_meta_file.values.flatten.empty?
15
+
16
+ return if !Vagrant::Util::Experimental.feature_enabled?("disks")
17
+
18
+ handle_cleanup_disk(machine, defined_disks, disk_meta_file["disk"])
19
+ handle_cleanup_dvd(machine, defined_disks, disk_meta_file["dvd"])
20
+ # TODO: Floppy disks
21
+ end
22
+
23
+ protected
24
+
25
+ # @param [Vagrant::Machine] machine
26
+ # @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_disks
27
+ # @param [Array<Hash>] disk_meta - An array of all the previously defined disks from the last configure_disk action
28
+ def self.handle_cleanup_disk(machine, defined_disks, disk_meta)
29
+ raise TypeError, "Expected `Array` but received `#{disk_meta.class}`" if !disk_meta.is_a?(Array)
30
+ storage_controllers = machine.provider.driver.read_storage_controllers
31
+
32
+ primary = storage_controllers.get_primary_attachment
33
+ primary_uuid = primary[:uuid]
34
+
35
+ disk_meta.each do |d|
36
+ dsk = defined_disks.select { |dk| dk.name == d["name"] }
37
+ if !dsk.empty? || d["uuid"] == primary_uuid
38
+ next
39
+ else
40
+ LOGGER.warn("Found disk not in Vagrantfile config: '#{d["name"]}'. Removing disk from guest #{machine.name}")
41
+ machine.ui.warn(I18n.t("vagrant.cap.cleanup_disks.disk_cleanup", name: d["name"]), prefix: true)
42
+
43
+ controller = storage_controllers.get_controller(d["controller"])
44
+ attachment = controller.get_attachment(uuid: d["uuid"])
45
+
46
+ if !attachment
47
+ LOGGER.warn("Disk '#{d["name"]}' not attached to guest, but still exists.")
48
+ else
49
+ machine.provider.driver.remove_disk(controller.name, attachment[:port], attachment[:device])
50
+ end
51
+
52
+ machine.provider.driver.close_medium(d["uuid"])
53
+ end
54
+ end
55
+ end
56
+
57
+ # @param [Vagrant::Machine] machine
58
+ # @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_dvds
59
+ # @param [Array<Hash>] dvd_meta - An array of all the previously defined dvds from the last configure_disk action
60
+ def self.handle_cleanup_dvd(machine, defined_dvds, dvd_meta)
61
+ raise TypeError, "Expected `Array` but received `#{dvd_meta.class}`" if !dvd_meta.is_a?(Array)
62
+ dvd_meta.each do |d|
63
+ dsk = defined_dvds.select { |dk| dk.name == d["name"] }
64
+ if !dsk.empty?
65
+ next
66
+ else
67
+ LOGGER.warn("Found dvd not in Vagrantfile config: '#{d["name"]}'. Removing dvd from guest #{machine.name}")
68
+ machine.ui.warn("DVD '#{d["name"]}' no longer exists in Vagrant config. Removing medium from guest...", prefix: true)
69
+
70
+ storage_controllers = machine.provider.driver.read_storage_controllers
71
+ controller = storage_controllers.get_controller(d["controller"])
72
+ attachment = controller.get_attachment(uuid: d["uuid"])
73
+
74
+ if !attachment
75
+ LOGGER.warn("DVD '#{d["name"]}' not attached to guest, but still exists.")
76
+ else
77
+ machine.provider.driver.remove_disk(controller.name, attachment[:port], attachment[:device])
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end