Reference Hyper-V switch by ID instead of name

Keep track of selected Hyper-V switch using the ID instead of name
to prevent any encoding issues that may occur switching between
PowerShell and Ruby. With the IDs staying consistent, the switch
name can be fetched from the provided ID.

Fixes #9679 #8794 #9451
This commit is contained in:
Chris Roberts 2018-04-27 16:52:16 -07:00
parent b75732416c
commit e47e1df228
3 changed files with 10 additions and 8 deletions

View File

@ -88,9 +88,9 @@ module VagrantPlugins
switchToFind = opts[:bridge] switchToFind = opts[:bridge]
if switchToFind if switchToFind
puts "Looking for switch with name: #{switchToFind}" @logger.debug("Looking for switch with name: #{switchToFind}")
switch = switches.find { |s| s["Name"].downcase == switchToFind.downcase }["Name"] switch = switches.find { |s| s["Name"].downcase == switchToFind.downcase }["Id"]
puts "Found switch: #{switch}" @logger.debug("Found switch: #{switch}")
end end
end end
@ -110,9 +110,9 @@ module VagrantPlugins
switch = switch.to_i - 1 switch = switch.to_i - 1
switch = nil if switch < 0 || switch >= switches.length switch = nil if switch < 0 || switch >= switches.length
end end
switch = switches[switch]["Name"] switch = switches[switch]["Id"]
else else
switch = switches[0]["Name"] switch = switches[0]["Id"]
end end
end end

View File

@ -8,5 +8,5 @@ $Dir = Split-Path $script:MyInvocation.MyCommand.Path
. ([System.IO.Path]::Combine($Dir, "utils\write_messages.ps1")) . ([System.IO.Path]::Combine($Dir, "utils\write_messages.ps1"))
$Switches = @(Hyper-V\Get-VMSwitch ` $Switches = @(Hyper-V\Get-VMSwitch `
| Select-Object Name,SwitchType,NetAdapterInterfaceDescription) | Select-Object Name,SwitchType,NetAdapterInterfaceDescription,Id)
Write-Output-Message $(ConvertTo-JSON $Switches) Write-Output-Message $(ConvertTo-JSON $Switches)

View File

@ -8,7 +8,7 @@
[Parameter(Mandatory=$true)] [Parameter(Mandatory=$true)]
[string]$data_path, [string]$data_path,
[string]$switchname=$null, [string]$switchid=$null,
[string]$memory=$null, [string]$memory=$null,
[string]$maxmemory=$null, [string]$maxmemory=$null,
[string]$cpus=$null, [string]$cpus=$null,
@ -83,8 +83,10 @@ if (!$memory) {
} }
} }
if (!$switchname) { if (!$switchid) {
$switchname = (Hyper-V\Get-VMNetworkAdapter -VM $vmConfig.VM).SwitchName $switchname = (Hyper-V\Get-VMNetworkAdapter -VM $vmConfig.VM).SwitchName
} else {
$switchname = $(Hyper-V\Get-VMSwitch -Id $switchid).Name
} }
# Enable nested virtualization if configured # Enable nested virtualization if configured