Merge pull request #6296 from tomfanning/master
Hyper-V set mac address
This commit is contained in:
commit
c88d52082a
|
@ -117,6 +117,7 @@ module VagrantPlugins
|
||||||
|
|
||||||
b2.use Provision
|
b2.use Provision
|
||||||
b2.use NetSetVLan
|
b2.use NetSetVLan
|
||||||
|
b2.use NetSetMac
|
||||||
b2.use StartInstance
|
b2.use StartInstance
|
||||||
b2.use WaitForIPAddress
|
b2.use WaitForIPAddress
|
||||||
b2.use WaitForCommunicator, [:running]
|
b2.use WaitForCommunicator, [:running]
|
||||||
|
@ -218,6 +219,7 @@ module VagrantPlugins
|
||||||
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 :NetSetVLan, action_root.join("net_set_vlan")
|
||||||
|
autoload :NetSetMac, action_root.join("net_set_mac")
|
||||||
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 NetSetMac
|
||||||
|
def initialize(app, env)
|
||||||
|
@app = app
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(env)
|
||||||
|
mac = env[:machine].provider_config.mac
|
||||||
|
if mac
|
||||||
|
env[:ui].info("[Settings] [Network Adapter] Setting MAC address to: #{mac}")
|
||||||
|
env[:machine].provider.driver.net_set_mac(mac)
|
||||||
|
end
|
||||||
|
@app.call(env)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,6 +10,7 @@ module VagrantPlugins
|
||||||
attr_accessor :cpus # Number of cpu's @return [Integer]
|
attr_accessor :cpus # Number of cpu's @return [Integer]
|
||||||
attr_accessor :vmname # Name that will be shoen in Hyperv Manager @return [String]
|
attr_accessor :vmname # Name that will be shoen in Hyperv Manager @return [String]
|
||||||
attr_accessor :vlan_id # VLAN ID for network interface for the virtual machine. @return [Integer]
|
attr_accessor :vlan_id # VLAN ID for network interface for the virtual machine. @return [Integer]
|
||||||
|
attr_accessor :mac # MAC address for network interface for the virtual machine. @return [String]
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@ip_address_timeout = UNSET_VALUE
|
@ip_address_timeout = UNSET_VALUE
|
||||||
|
@ -18,6 +19,7 @@ module VagrantPlugins
|
||||||
@cpus = UNSET_VALUE
|
@cpus = UNSET_VALUE
|
||||||
@vmname = UNSET_VALUE
|
@vmname = UNSET_VALUE
|
||||||
@vlan_id = UNSET_VALUE
|
@vlan_id = UNSET_VALUE
|
||||||
|
@mac = UNSET_VALUE
|
||||||
end
|
end
|
||||||
|
|
||||||
def finalize!
|
def finalize!
|
||||||
|
@ -29,6 +31,7 @@ module VagrantPlugins
|
||||||
@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
|
@vlan_id = nil if @vlan_id == UNSET_VALUE
|
||||||
|
@mac = nil if @mac == UNSET_VALUE
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate(machine)
|
def validate(machine)
|
||||||
|
|
|
@ -81,6 +81,10 @@ module VagrantPlugins
|
||||||
execute("set_network_vlan.ps1", { VmId: vm_id, VlanId: vlan_id })
|
execute("set_network_vlan.ps1", { VmId: vm_id, VlanId: vlan_id })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def net_set_mac(mac_addr)
|
||||||
|
execute("set_network_mac.ps1", { VmId: vm_id, Mac: mac_addr })
|
||||||
|
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."),
|
||||||
|
[string]$Mac = $(throw "-Mac ")
|
||||||
|
)
|
||||||
|
|
||||||
|
# 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-VMNetworkAdapter $vm -StaticMacAddress $Mac -ErrorAction "stop"
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Write-Error-Message "Failed to set VM's MAC address $_"
|
||||||
|
}
|
|
@ -23,6 +23,14 @@ describe VagrantPlugins::HyperV::Config do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#mac" do
|
||||||
|
it "can be set" do
|
||||||
|
subject.mac = "001122334455"
|
||||||
|
subject.finalize!
|
||||||
|
expect(subject.mac).to eq("001122334455")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "#vmname" do
|
describe "#vmname" do
|
||||||
it "can be set" do
|
it "can be set" do
|
||||||
subject.vmname = "test"
|
subject.vmname = "test"
|
||||||
|
|
|
@ -19,6 +19,8 @@ you may set. A complete reference is shown below:
|
||||||
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
|
* `vlan_id` (integer) - Number of Vlan ID for your guest network interface
|
||||||
Defaults is not defined, vlan configuration will be untouched if not set.
|
Defaults is not defined, vlan configuration will be untouched if not set.
|
||||||
|
* `mac` (string) - MAC address for your guest network interface
|
||||||
|
Default is not defined, MAC address will be dynamically assigned by Hyper-V 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