From 50b6c86b1c25b0fcd876a3746a4e491bd3279f86 Mon Sep 17 00:00:00 2001 From: Joshua Foster Date: Wed, 17 Jun 2020 17:40:21 -0400 Subject: [PATCH] look at all the IPs of the VM when waiting for an IP --- builder/vsphere/driver/vm.go | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/builder/vsphere/driver/vm.go b/builder/vsphere/driver/vm.go index dc23f9e94..b62ca984c 100644 --- a/builder/vsphere/driver/vm.go +++ b/builder/vsphere/driver/vm.go @@ -493,37 +493,27 @@ func (vm *VirtualMachine) PowerOn() error { } func (vm *VirtualMachine) WaitForIP(ctx context.Context, ipNet *net.IPNet) (string, error) { - var ip string + netIP, err := vm.vm.WaitForNetIP(ctx, false) + if err != nil { + return "", err + } - p := property.DefaultCollector(vm.vm.Client()) - err := property.Wait(ctx, p, vm.vm.Reference(), []string{"guest.ipAddress"}, func(pc []types.PropertyChange) bool { - for _, c := range pc { - if c.Name != "guest.ipAddress" { - continue - } - if c.Op != types.PropertyChangeOpAssign { + for _, ips := range netIP { + for _, ip := range ips { + parseIP := net.ParseIP(ip) + if ipNet != nil && !ipNet.Contains(parseIP) { + // ip address is not in range continue } - if c.Val == nil { + // default to an ipv4 addresses if no ipNet is defined + if ipNet == nil && parseIP.To4() == nil { continue } - - ip = c.Val.(string) - if ipNet != nil && !ipNet.Contains(net.ParseIP(ip)) { - // ip address is not in range - return false - } - return true + return ip, nil } - - return false - }) - - if err != nil { - return "", err } - return ip, nil + return "", fmt.Errorf("unable to find an IP") } func (vm *VirtualMachine) PowerOff() error {