Merge pull request #5539 from vvchik/vlanid
HyperV provider: VlanID configuration possibility
This commit is contained in:
commit
388c2f2383
|
@ -116,6 +116,7 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
|
|
||||||
b2.use Provision
|
b2.use Provision
|
||||||
|
b2.use NetSetVLan
|
||||||
b2.use StartInstance
|
b2.use StartInstance
|
||||||
b2.use WaitForIPAddress
|
b2.use WaitForIPAddress
|
||||||
b2.use WaitForCommunicator, [:running]
|
b2.use WaitForCommunicator, [:running]
|
||||||
|
@ -216,6 +217,7 @@ module VagrantPlugins
|
||||||
autoload :StopInstance, action_root.join('stop_instance')
|
autoload :StopInstance, action_root.join('stop_instance')
|
||||||
autoload :SuspendVM, action_root.join("suspend_vm")
|
autoload :SuspendVM, action_root.join("suspend_vm")
|
||||||
autoload :WaitForIPAddress, action_root.join("wait_for_ip_address")
|
autoload :WaitForIPAddress, action_root.join("wait_for_ip_address")
|
||||||
|
autoload :NetSetVLan, action_root.join("net_set_vlan")
|
||||||
autoload :MessageWillNotDestroy, action_root.join("message_will_not_destroy")
|
autoload :MessageWillNotDestroy, action_root.join("message_will_not_destroy")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
module VagrantPlugins
|
||||||
|
module HyperV
|
||||||
|
module Action
|
||||||
|
class NetSetVLan
|
||||||
|
def initialize(app, env)
|
||||||
|
@app = app
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(env)
|
||||||
|
vlan_id = env[:machine].provider_config.vlan_id
|
||||||
|
if vlan_id
|
||||||
|
env[:ui].info("[Settings] [Network Adapter] Setting Vlan ID to: #{vlan_id}")
|
||||||
|
env[:machine].provider.driver.net_set_vlan(vlan_id)
|
||||||
|
end
|
||||||
|
@app.call(env)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -3,15 +3,13 @@ require "vagrant"
|
||||||
module VagrantPlugins
|
module VagrantPlugins
|
||||||
module HyperV
|
module HyperV
|
||||||
class Config < Vagrant.plugin("2", :config)
|
class Config < Vagrant.plugin("2", :config)
|
||||||
# The timeout to wait for an IP address when booting the machine,
|
|
||||||
# in seconds.
|
attr_accessor :ip_address_timeout # Time to wait for an IP address when booting, in seconds @return [Integer]
|
||||||
#
|
attr_accessor :memory # Memory size in mb @return [Integer]
|
||||||
# @return [Integer]
|
attr_accessor :maxmemory # Maximal memory size in mb enables dynamical memory allocation @return [Integer]
|
||||||
attr_accessor :ip_address_timeout
|
attr_accessor :cpus # Number of cpu's @return [Integer]
|
||||||
attr_accessor :memory
|
attr_accessor :vmname # Name that will be shoen in Hyperv Manager @return [String]
|
||||||
attr_accessor :maxmemory
|
attr_accessor :vlan_id # VLAN ID for network interface for the virtual machine. @return [Integer]
|
||||||
attr_accessor :cpus
|
|
||||||
attr_accessor :vmname
|
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@ip_address_timeout = UNSET_VALUE
|
@ip_address_timeout = UNSET_VALUE
|
||||||
|
@ -19,6 +17,7 @@ module VagrantPlugins
|
||||||
@maxmemory = UNSET_VALUE
|
@maxmemory = UNSET_VALUE
|
||||||
@cpus = UNSET_VALUE
|
@cpus = UNSET_VALUE
|
||||||
@vmname = UNSET_VALUE
|
@vmname = UNSET_VALUE
|
||||||
|
@vlan_id = UNSET_VALUE
|
||||||
end
|
end
|
||||||
|
|
||||||
def finalize!
|
def finalize!
|
||||||
|
@ -29,6 +28,7 @@ module VagrantPlugins
|
||||||
@maxmemory = nil if @maxmemory == UNSET_VALUE
|
@maxmemory = nil if @maxmemory == UNSET_VALUE
|
||||||
@cpus = nil if @cpus == UNSET_VALUE
|
@cpus = nil if @cpus == UNSET_VALUE
|
||||||
@vmname = nil if @vmname == UNSET_VALUE
|
@vmname = nil if @vmname == UNSET_VALUE
|
||||||
|
@vlan_id = nil if @vlan_id == UNSET_VALUE
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate(machine)
|
def validate(machine)
|
||||||
|
|
|
@ -77,6 +77,10 @@ module VagrantPlugins
|
||||||
execute('import_vm.ps1', options)
|
execute('import_vm.ps1', options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def net_set_vlan(vlan_id)
|
||||||
|
execute("set_network_vlan.ps1", { VmId: vm_id, VlanId: vlan_id })
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def execute_powershell(path, options, &block)
|
def execute_powershell(path, options, &block)
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
param (
|
||||||
|
[string]$VmId = $(throw "-VmId is required."),
|
||||||
|
[int]$VlanId = $(throw "-VlanId ")
|
||||||
|
)
|
||||||
|
|
||||||
|
# Include the following modules
|
||||||
|
$presentDir = Split-Path -parent $PSCommandPath
|
||||||
|
$modules = @()
|
||||||
|
$modules += $presentDir + "\utils\write_messages.ps1"
|
||||||
|
forEach ($module in $modules) { . $module }
|
||||||
|
|
||||||
|
try {
|
||||||
|
$vm = Get-VM -Id $VmId -ErrorAction "stop"
|
||||||
|
Set-VMNetworkAdapterVlan $vm -Access -Vlanid $VlanId
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error-Message "Failed to set VM's Vlan ID $_"
|
||||||
|
}
|
|
@ -14,6 +14,13 @@ describe VagrantPlugins::HyperV::Config do
|
||||||
expect(subject.ip_address_timeout).to eq(120)
|
expect(subject.ip_address_timeout).to eq(120)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
describe "#vlan_id" do
|
||||||
|
it "can be set" do
|
||||||
|
subject.vlan_id = 100
|
||||||
|
subject.finalize!
|
||||||
|
expect(subject.vlan_id).to eq(100)
|
||||||
|
end
|
||||||
|
end
|
||||||
describe "#vmname" do
|
describe "#vmname" do
|
||||||
it "can be set" do
|
it "can be set" do
|
||||||
subject.vmname = "test"
|
subject.vmname = "test"
|
||||||
|
|
|
@ -17,6 +17,8 @@ you may set. A complete reference is shown below:
|
||||||
* `maxmemory` (integer) - Number of MegaBytes maximal allowed to allocate for VM
|
* `maxmemory` (integer) - Number of MegaBytes maximal allowed to allocate for VM
|
||||||
This parameter is switch on Dynamic Allocation of memory.
|
This parameter is switch on Dynamic Allocation of memory.
|
||||||
Defaults is taken from box image XML.
|
Defaults is taken from box image XML.
|
||||||
|
* `vlan_id` (integer) - Number of Vlan ID for your guest network interface
|
||||||
|
Defaults is not defined, vlan configuration will be untouched if not set.
|
||||||
* `ip_address_timeout` (integer) - The time in seconds to wait for the
|
* `ip_address_timeout` (integer) - The time in seconds to wait for the
|
||||||
virtual machine to report an IP address. This defaults to 120 seconds.
|
virtual machine to report an IP address. This defaults to 120 seconds.
|
||||||
This may have to be increased if your VM takes longer to boot.
|
This may have to be increased if your VM takes longer to boot.
|
||||||
|
|
Loading…
Reference in New Issue