vagrant-unbundled 2.2.9.0 → 2.2.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -0
  3. data/README.md +5 -5
  4. data/contrib/README.md +1 -0
  5. data/contrib/sudoers/linux-suse +2 -2
  6. data/contrib/zsh/_vagrant +736 -0
  7. data/contrib/zsh/generate_zsh_completion.rb +166 -0
  8. data/lib/vagrant/action.rb +3 -0
  9. data/lib/vagrant/action/builder.rb +52 -18
  10. data/lib/vagrant/action/builtin/box_add.rb +6 -5
  11. data/lib/vagrant/action/builtin/cloud_init_setup.rb +127 -0
  12. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  13. data/lib/vagrant/action/builtin/handle_box.rb +1 -1
  14. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +13 -13
  15. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  16. data/lib/vagrant/action/builtin/mixin_provisioners.rb +1 -0
  17. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  18. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  19. data/lib/vagrant/action/builtin/synced_folders.rb +10 -0
  20. data/lib/vagrant/action/builtin/trigger.rb +3 -2
  21. data/lib/vagrant/action/hook.rb +59 -24
  22. data/lib/vagrant/action/warden.rb +25 -5
  23. data/lib/vagrant/box.rb +5 -4
  24. data/lib/vagrant/bundler.rb +6 -1
  25. data/lib/vagrant/errors.rb +37 -1
  26. data/lib/vagrant/machine.rb +47 -0
  27. data/lib/vagrant/machine_index.rb +27 -1
  28. data/lib/vagrant/plugin/v2/command.rb +5 -1
  29. data/lib/vagrant/plugin/v2/components.rb +6 -0
  30. data/lib/vagrant/plugin/v2/manager.rb +14 -0
  31. data/lib/vagrant/plugin/v2/plugin.rb +12 -0
  32. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  33. data/lib/vagrant/plugin/v2/trigger.rb +6 -5
  34. data/lib/vagrant/ui.rb +1 -1
  35. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  36. data/lib/vagrant/util/caps.rb +48 -0
  37. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  38. data/lib/vagrant/util/directory.rb +19 -0
  39. data/lib/vagrant/util/downloader.rb +3 -3
  40. data/lib/vagrant/util/guest_hosts.rb +68 -0
  41. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  42. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  43. data/lib/vagrant/util/is_port_open.rb +8 -19
  44. data/lib/vagrant/util/network_ip.rb +11 -1
  45. data/lib/vagrant/util/powershell.rb +1 -1
  46. data/lib/vagrant/util/subprocess.rb +9 -1
  47. data/lib/vagrant/vagrantfile.rb +1 -1
  48. data/plugins/commands/autocomplete/command/install.rb +49 -0
  49. data/plugins/commands/autocomplete/command/root.rb +64 -0
  50. data/plugins/commands/autocomplete/plugin.rb +18 -0
  51. data/plugins/commands/destroy/command.rb +6 -2
  52. data/plugins/communicators/ssh/communicator.rb +7 -1
  53. data/plugins/communicators/winrm/helper.rb +1 -1
  54. data/plugins/communicators/winssh/communicator.rb +1 -1
  55. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  56. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  57. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  58. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  59. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  60. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  61. data/plugins/guests/debian/cap/change_host_name.rb +11 -11
  62. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  63. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  64. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  65. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  66. data/plugins/guests/haiku/plugin.rb +15 -0
  67. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  68. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +4 -11
  69. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +62 -0
  70. data/plugins/guests/linux/plugin.rb +10 -0
  71. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  72. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  73. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  74. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  75. data/plugins/guests/redhat/cap/change_host_name.rb +10 -5
  76. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  77. data/plugins/guests/solaris11/plugin.rb +5 -0
  78. data/plugins/guests/suse/cap/change_host_name.rb +12 -11
  79. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  80. data/plugins/hosts/darwin/plugin.rb +10 -0
  81. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  82. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  83. data/plugins/hosts/linux/plugin.rb +10 -0
  84. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  85. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  86. data/plugins/hosts/windows/plugin.rb +15 -0
  87. data/plugins/kernel_v2/config/cloud_init.rb +126 -0
  88. data/plugins/kernel_v2/config/disk.rb +40 -18
  89. data/plugins/kernel_v2/config/vm.rb +122 -13
  90. data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
  91. data/plugins/kernel_v2/config/vm_trigger.rb +5 -1
  92. data/plugins/providers/docker/action.rb +8 -17
  93. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  94. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  95. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  96. data/plugins/providers/docker/communicator.rb +1 -1
  97. data/plugins/providers/docker/driver.rb +35 -0
  98. data/plugins/providers/docker/plugin.rb +5 -0
  99. data/plugins/providers/hyperv/action.rb +2 -0
  100. data/plugins/providers/hyperv/action/configure.rb +8 -0
  101. data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
  102. data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
  103. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
  104. data/plugins/providers/hyperv/config.rb +5 -0
  105. data/plugins/providers/hyperv/driver.rb +80 -0
  106. data/plugins/providers/hyperv/plugin.rb +25 -0
  107. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
  108. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
  109. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
  110. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
  111. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
  112. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
  113. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
  114. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
  115. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
  116. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +8 -0
  117. data/plugins/providers/virtualbox/action.rb +12 -1
  118. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  119. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +40 -9
  120. data/plugins/providers/virtualbox/cap/configure_disks.rb +230 -77
  121. data/plugins/providers/virtualbox/cap/mount_options.rb +35 -0
  122. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +10 -3
  123. data/plugins/providers/virtualbox/driver/meta.rb +3 -0
  124. data/plugins/providers/virtualbox/driver/version_5_0.rb +96 -21
  125. data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
  126. data/plugins/providers/virtualbox/model/storage_controller_array.rb +100 -0
  127. data/plugins/providers/virtualbox/plugin.rb +18 -1
  128. data/plugins/providers/virtualbox/synced_folder.rb +1 -0
  129. data/plugins/provisioners/container/client.rb +1 -1
  130. data/plugins/provisioners/shell/provisioner.rb +15 -9
  131. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  132. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  133. data/plugins/synced_folders/smb/cap/mount_options.rb +36 -0
  134. data/plugins/synced_folders/smb/plugin.rb +10 -0
  135. data/plugins/synced_folders/smb/synced_folder.rb +1 -1
  136. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  137. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  138. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  139. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  140. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  141. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  142. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  143. data/templates/guests/linux/etc_fstab.erb +6 -0
  144. data/templates/locales/en.yml +121 -11
  145. data/templates/locales/providers_docker.yml +4 -0
  146. data/vagrant.gemspec +8 -7
  147. data/version.txt +1 -1
  148. metadata +1492 -1309
@@ -0,0 +1,34 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module HyperV
5
+ module Cap
6
+ module ValidateDiskExt
7
+ LOGGER = Log4r::Logger.new("vagrant::plugins::hyperv::validate_disk_ext")
8
+
9
+ # The default set of disk formats that Hyper-V supports
10
+ DEFAULT_DISK_EXT_LIST = ["vhd", "vhdx"].map(&:freeze).freeze
11
+ DEFAULT_DISK_EXT = "vhdx".freeze
12
+
13
+ # @param [Vagrant::Machine] machine
14
+ # @param [String] disk_ext
15
+ # @return [Bool]
16
+ def self.validate_disk_ext(machine, disk_ext)
17
+ DEFAULT_DISK_EXT_LIST.include?(disk_ext)
18
+ end
19
+
20
+ # @param [Vagrant::Machine] machine
21
+ # @return [Array]
22
+ def self.default_disk_exts(machine)
23
+ DEFAULT_DISK_EXT_LIST
24
+ end
25
+
26
+ # @param [Vagrant::Machine] machine
27
+ # @return [String]
28
+ def self.set_default_disk_ext(machine)
29
+ DEFAULT_DISK_EXT
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -48,6 +48,8 @@ module VagrantPlugins
48
48
  attr_accessor :enable_virtualization_extensions
49
49
  # @return [Hash] Options for VMServiceIntegration
50
50
  attr_accessor :vm_integration_services
51
+ # @return [Boolean] Enable Enhanced session mode
52
+ attr_accessor :enable_enhanced_session_mode
51
53
 
52
54
  def initialize
53
55
  @ip_address_timeout = UNSET_VALUE
@@ -65,6 +67,7 @@ module VagrantPlugins
65
67
  @enable_automatic_checkpoints = UNSET_VALUE
66
68
  @enable_checkpoints = UNSET_VALUE
67
69
  @vm_integration_services = {}
70
+ @enable_enhanced_session_mode = UNSET_VALUE
68
71
  end
69
72
 
70
73
  def finalize!
@@ -102,6 +105,8 @@ module VagrantPlugins
102
105
 
103
106
  # If automatic checkpoints are enabled, checkpoints will automatically be enabled
104
107
  @enable_checkpoints ||= @enable_automatic_checkpoints
108
+
109
+ @enable_enhanced_session_mode = false if @enable_enhanced_session_mode == UNSET_VALUE
105
110
  end
106
111
 
107
112
  def validate(machine)
@@ -218,6 +218,85 @@ module VagrantPlugins
218
218
  execute(:set_name, VMID: vm_id, VMName: vmname)
219
219
  end
220
220
 
221
+ #
222
+ # Disk Driver methods
223
+ #
224
+
225
+ # @param [String] controller_type
226
+ # @param [String] controller_number
227
+ # @param [String] controller_location
228
+ # @param [Hash] opts
229
+ # @option opts [String] :ControllerType
230
+ # @option opts [String] :ControllerNumber
231
+ # @option opts [String] :ControllerLocation
232
+ def attach_disk(disk_file_path, **opts)
233
+ execute(:attach_disk_drive, VmId: @vm_id, Path: disk_file_path, ControllerType: opts[:ControllerType],
234
+ ControllerNumber: opts[:ControllerNumber], ControllerLocation: opts[:ControllerLocation])
235
+ end
236
+
237
+ # @param [String] path
238
+ # @param [Int] size_bytes
239
+ # @param [Hash] opts
240
+ # @option opts [Bool] :Fixed
241
+ # @option opts [String] :BlockSizeBytes
242
+ # @option opts [String] :LogicalSectorSizeBytes
243
+ # @option opts [String] :PhysicalSectorSizeBytes
244
+ # @option opts [String] :SourceDisk
245
+ # @option opts [Bool] :Differencing
246
+ # @option opts [String] :ParentPath
247
+ def create_disk(path, size_bytes, **opts)
248
+ execute(:new_vhd, Path: path, SizeBytes: size_bytes, Fixed: opts[:Fixed],
249
+ BlockSizeBytes: opts[:BlockSizeBytes], LogicalSectorSizeBytes: opts[:LogicalSectorSizeBytes],
250
+ PhysicalSectorSizeBytes: opts[:PhysicalSectorSizeBytes],
251
+ SourceDisk: opts[:SourceDisk], Differencing: opts[:Differencing],
252
+ ParentPath: opts[:ParentPath])
253
+ end
254
+
255
+ # @param [String] disk_file_path
256
+ def dismount_disk(disk_file_path)
257
+ execute(:dismount_vhd, DiskFilePath: disk_file_path)
258
+ end
259
+
260
+ # @param [String] disk_file_path
261
+ def get_disk(disk_file_path)
262
+ execute(:get_vhd, DiskFilePath: disk_file_path)
263
+ end
264
+
265
+ # @return [Array[Hash]]
266
+ def list_hdds
267
+ execute(:list_hdds, VmId: @vm_id)
268
+ end
269
+
270
+ # @param [String] controller_type
271
+ # @param [String] controller_number
272
+ # @param [String] controller_location
273
+ # @param [String] disk_file_path
274
+ # @param [Hash] opts
275
+ # @option opts [String] :ControllerType
276
+ # @option opts [String] :ControllerNumber
277
+ # @option opts [String] :ControllerLocation
278
+ def remove_disk(controller_type, controller_number, controller_location, disk_file_path, **opts)
279
+ execute(:remove_disk_drive, VmId: @vm_id, ControllerType: controller_type,
280
+ ControllerNumber: controller_number, ControllerLocation: controller_location,
281
+ DiskFilePath: disk_file_path)
282
+ end
283
+
284
+ # @param [String] path
285
+ # @param [Int] size_bytes
286
+ # @param [Hash] opts
287
+ def resize_disk(disk_file_path, size_bytes, **opts)
288
+ execute(:resize_disk_drive, VmId: @vm_id, DiskFilePath: disk_file_path,
289
+ DiskSize: size_bytes)
290
+ end
291
+
292
+ # Set enhanced session transport type of the VM
293
+ #
294
+ # @param [String] enhanced session transport type of the VM
295
+ # @return [nil]
296
+ def set_enhanced_session_transport_type(transport_type)
297
+ execute(:set_enhanced_session_transport_type, VmID: vm_id, type: transport_type)
298
+ end
299
+
221
300
  protected
222
301
 
223
302
  def execute_powershell(path, options, &block)
@@ -227,6 +306,7 @@ module VagrantPlugins
227
306
  options = options || {}
228
307
  ps_options = []
229
308
  options.each do |key, value|
309
+ next if !value || value.to_s.empty?
230
310
  next if value == false
231
311
  ps_options << "-#{key}"
232
312
  # If the value is a TrueClass assume switch
@@ -32,6 +32,31 @@ module VagrantPlugins
32
32
  Cap::SnapshotList
33
33
  end
34
34
 
35
+ provider_capability(:hyperv, :configure_disks) do
36
+ require_relative "cap/configure_disks"
37
+ Cap::ConfigureDisks
38
+ end
39
+
40
+ provider_capability(:hyperv, :cleanup_disks) do
41
+ require_relative "cap/cleanup_disks"
42
+ Cap::CleanupDisks
43
+ end
44
+
45
+ provider_capability(:hyperv, :validate_disk_ext) do
46
+ require_relative "cap/validate_disk_ext"
47
+ Cap::ValidateDiskExt
48
+ end
49
+
50
+ provider_capability(:hyperv, :default_disk_exts) do
51
+ require_relative "cap/validate_disk_ext"
52
+ Cap::ValidateDiskExt
53
+ end
54
+
55
+ provider_capability(:hyperv, :set_default_disk_ext) do
56
+ require_relative "cap/validate_disk_ext"
57
+ Cap::ValidateDiskExt
58
+ end
59
+
35
60
  protected
36
61
 
37
62
  def self.init!
@@ -0,0 +1,28 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId,
6
+ [Parameter(Mandatory=$true)]
7
+ [string]$Path,
8
+ [string]$ControllerType,
9
+ [string]$ControllerNumber,
10
+ [string]$ControllerLocation
11
+ )
12
+
13
+ $Params = @{}
14
+
15
+ foreach ($key in $MyInvocation.BoundParameters.keys) {
16
+ $value = (Get-Variable -Exclude "ErrorAction" $key).Value
17
+ if (($key -ne "VmId") -and ($key -ne "ErrorAction")) {
18
+ $Params.Add($key, $value)
19
+ }
20
+ }
21
+
22
+ try {
23
+ $VM = Hyper-V\Get-VM -Id $VmId
24
+ Hyper-V\Add-VMHardDiskDrive -VMName $VM.Name @Params
25
+ } catch {
26
+ Write-ErrorMessage "Failed to attach disk ${DiskFilePath} to VM ${VM}: ${PSItem}"
27
+ exit 1
28
+ }
@@ -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
+ }
@@ -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
  }
@@ -79,12 +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
82
87
  b.use CleanupDisks
83
88
  b.use Disk
84
89
  b.use Customize, "pre-boot"
85
90
  b.use Boot
86
91
  b.use Customize, "post-boot"
87
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
88
98
  b.use Customize, "post-comm"
89
99
  b.use CheckGuestAdditions
90
100
  end
@@ -106,7 +116,7 @@ module VagrantPlugins
106
116
  b3.use ConfigValidate
107
117
  b3.use ProvisionerCleanup, :before
108
118
  b3.use CheckAccessible
109
- b3.use EnvSet, force_halt: true
119
+ b3.use EnvSet, force_halt: env2[:force_halt]
110
120
  b3.use action_halt
111
121
  b3.use Destroy
112
122
  b3.use CleanMachineFolder
@@ -411,6 +421,7 @@ module VagrantPlugins
411
421
  end
412
422
  end
413
423
 
424
+ b.use EnvSet, cloud_init: true
414
425
  b.use action_start
415
426
  end
416
427
  end
@@ -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