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 {
|
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{
|
checks := []func() error{
|
||||||
d.connect,
|
d.connect,
|
||||||
d.checkSystemVersion,
|
d.checkSystemVersion,
|
||||||
|
|
|
@ -462,7 +462,11 @@ func (s *stepCreateVMX) Run(_ context.Context, state multistep.StateBag) multist
|
||||||
network := config.Network
|
network := config.Network
|
||||||
driver := state.Get("driver").(vmwcommon.Driver).GetVmwareDriver()
|
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()
|
netmap, err := driver.NetworkMapper()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
@ -470,18 +474,29 @@ func (s *stepCreateVMX) Run(_ context.Context, state multistep.StateBag) multist
|
||||||
return multistep.ActionHalt
|
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)
|
device, err := netmap.NameIntoDevice(network)
|
||||||
|
|
||||||
// success. so we know that it's an actual network type inside netmap.conf
|
// success. so we know that it's an actual network type inside netmap.conf
|
||||||
if err == nil {
|
if err == nil {
|
||||||
templateData.Network_Type = network
|
templateData.Network_Type = network
|
||||||
templateData.Network_Device = device
|
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 {
|
} else {
|
||||||
templateData.Network_Type = "custom"
|
templateData.Network_Type = "custom"
|
||||||
templateData.Network_Device = network
|
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
|
// store the network so that we can later figure out what ip address to bind to
|
||||||
state.Put("vmnetwork", network)
|
state.Put("vmnetwork", network)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue