diff --git a/pkg/networks/usernet/client.go b/pkg/networks/usernet/client.go index adc035391b19..87632e6ad20a 100644 --- a/pkg/networks/usernet/client.go +++ b/pkg/networks/usernet/client.go @@ -7,6 +7,8 @@ import ( "fmt" "net" "net/http" + "os" + "strconv" "time" gvproxyclient "github.com/containers/gvisor-tap-vsock/pkg/client" @@ -74,11 +76,19 @@ func (c *Client) ResolveAndForwardSSH(ipAddr string, sshPort int) error { } func (c *Client) ResolveIPAddress(ctx context.Context, vmMacAddr string) (string, error) { - timeout := time.After(2 * time.Minute) + ResolveIPAddressTimeout := 2 * time.Minute + ResolveIPAddressTimeoutEnv := os.Getenv("RESOLVE_IP_ADDRESS_TIMEOUT") + if ResolveIPAddressTimeoutEnv != "" { + if parsedTimeout, err := strconv.Atoi(ResolveIPAddressTimeoutEnv); err == nil { + ResolveIPAddressTimeout = parsedTimeout * time.Minute + } + } + ctx, cancel := context.WithTimeout(ctx, ResolveIPAddressTimeout) + defer cancel() ticker := time.NewTicker(500 * time.Millisecond) for { select { - case <-timeout: + case <-ctx.Done(): return "", errors.New("usernet unable to resolve IP for SSH forwarding") case <-ticker.C: leases, err := c.Leases(ctx)