Merge pull request #5539 from vvchik/vlanid

HyperV provider: VlanID configuration possibility
This commit is contained in:
Seth Vargo 2015-05-30 11:46:43 -07:00
commit 388c2f2383
7 changed files with 62 additions and 9 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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 $_"
}

View File

@ -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"

View File

@ -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.