Merge pull request #5931 from arizvisa/GH-5916
Fixes the assumption that all the VMware builder's drivers will implement a network mapper for mapping a network name to it's corresponding device.
This commit is contained in:
commit
3ea7fc9876
|
@ -147,6 +147,29 @@ func (d *ESX5Driver) ToolsInstall() error {
|
|||
}
|
||||
|
||||
func (d *ESX5Driver) Verify() error {
|
||||
// Ensure that NetworkMapper is nil, since the mapping of device<->network
|
||||
// is handled by ESX and thus can't be performed by packer unless we
|
||||
// query things.
|
||||
|
||||
// FIXME: If we want to expose the network devices to the user, then we can
|
||||
// probably use esxcli to enumerate the portgroup and switchId
|
||||
d.base.NetworkMapper = nil
|
||||
|
||||
// Be safe/friendly and overwrite the rest of the utility functions with
|
||||
// log functions despite the fact that these shouldn't be called anyways.
|
||||
d.base.DhcpLeasesPath = func(device string) string {
|
||||
log.Printf("Unexpected error, ESX5 driver attempted to call DhcpLeasesPath(%#v)\n", device)
|
||||
return ""
|
||||
}
|
||||
d.base.DhcpConfPath = func(device string) string {
|
||||
log.Printf("Unexpected error, ESX5 driver attempted to call DhcpConfPath(%#v)\n", device)
|
||||
return ""
|
||||
}
|
||||
d.base.VmnetnatConfPath = func(device string) string {
|
||||
log.Printf("Unexpected error, ESX5 driver attempted to call VmnetnatConfPath(%#v)\n", device)
|
||||
return ""
|
||||
}
|
||||
|
||||
checks := []func() error{
|
||||
d.connect,
|
||||
d.checkSystemVersion,
|
||||
|
|
|
@ -462,7 +462,11 @@ func (s *stepCreateVMX) Run(_ context.Context, state multistep.StateBag) multist
|
|||
network := config.Network
|
||||
driver := state.Get("driver").(vmwcommon.Driver).GetVmwareDriver()
|
||||
|
||||
// read netmap config
|
||||
// check to see if the driver implements a network mapper for mapping
|
||||
// the network-type to its device-name.
|
||||
if driver.NetworkMapper != nil {
|
||||
|
||||
// read network map configuration into a NetworkNameMapper.
|
||||
netmap, err := driver.NetworkMapper()
|
||||
if err != nil {
|
||||
state.Put("error", err)
|
||||
|
@ -470,18 +474,29 @@ func (s *stepCreateVMX) Run(_ context.Context, state multistep.StateBag) multist
|
|||
return multistep.ActionHalt
|
||||
}
|
||||
|
||||
// try and convert the specified network to a device
|
||||
// try and convert the specified network to a device.
|
||||
device, err := netmap.NameIntoDevice(network)
|
||||
|
||||
// success. so we know that it's an actual network type inside netmap.conf
|
||||
if err == nil {
|
||||
templateData.Network_Type = network
|
||||
templateData.Network_Device = device
|
||||
// we were unable to find the type, so assume it's a custom network device.
|
||||
|
||||
// otherwise, we were unable to find the type, so assume its a custom device.
|
||||
} else {
|
||||
templateData.Network_Type = "custom"
|
||||
templateData.Network_Device = network
|
||||
}
|
||||
|
||||
// if NetworkMapper is nil, then we're using something like ESX, so fall
|
||||
// back to the previous logic of using "nat" despite it not mattering to ESX.
|
||||
} else {
|
||||
templateData.Network_Type = "nat"
|
||||
templateData.Network_Device = network
|
||||
|
||||
network = "nat"
|
||||
}
|
||||
|
||||
// store the network so that we can later figure out what ip address to bind to
|
||||
state.Put("vmnetwork", network)
|
||||
|
||||
|
|
Loading…
Reference in New Issue