diff --git a/builder/vsphere/common/step_wait_for_ip.go b/builder/vsphere/common/step_wait_for_ip.go index 7ade58c8f..ab23d1829 100644 --- a/builder/vsphere/common/step_wait_for_ip.go +++ b/builder/vsphere/common/step_wait_for_ip.go @@ -97,10 +97,16 @@ func (s *StepWaitForIp) Run(ctx context.Context, state multistep.StateBag) multi for { select { case <-timeout: + cancel() + <-waitDone + if ip != "" { + state.Put("ip", ip) + log.Printf("[WARN] API timeout waiting for IP but one IP was found. Using IP: %s", ip) + return multistep.ActionContinue + } err := fmt.Errorf("Timeout waiting for IP.") state.Put("error", err) ui.Error(err.Error()) - cancel() return multistep.ActionHalt case <-ctx.Done(): cancel() @@ -144,7 +150,7 @@ loop: // Check for ctx cancellation to avoid printing any IP logs at the timeout select { case <-ctx.Done(): - return "", fmt.Errorf("IP wait cancelled") + return ip, fmt.Errorf("IP wait cancelled.") default: }