Skip to content

feat(hetzner): make Hetzner Cloud API HTTP timeout configurable - #212

Open
roshanavand wants to merge 2 commits into
hetzner:mainfrom
roshanavand:fix/configurable-http-timeout
Open

feat(hetzner): make Hetzner Cloud API HTTP timeout configurable#212
roshanavand wants to merge 2 commits into
hetzner:mainfrom
roshanavand:fix/configurable-http-timeout

Conversation

@roshanavand

Copy link
Copy Markdown

#91 set the per-request HTTP client timeout to a hardcoded 15s so that a blocked/unreachable API (#73) fails fast instead of hanging, relying on the SDK's own retry loop (5 retries, exponential backoff) to keep overall latency bounded.

That same fixed value can also be too short for a slow-but-reachable Hetzner Cloud Zones API response, causing DNS-01 record creation or cleanup to intermittently fail with the same timeout error after exhausting all retries, even though the API is healthy.

Add an optional httpTimeout field to the Issuer solver config (a Go duration string, e.g. "45s") so this can be tuned per-environment without a custom image. The 15s default is unchanged, since raising it would also raise the worst-case duration of the retry loop #91 relies on to stay under whatever imposes the outer deadline in the truly-unreachable case.

hetzner#91 set the per-request HTTP client timeout to a hardcoded 15s so that
a blocked/unreachable API (hetzner#73) fails fast instead of hanging, relying
on the SDK's own retry loop (5 retries, exponential backoff) to keep
overall latency bounded.

That same fixed value can also be too short for a slow-but-reachable
Hetzner Cloud Zones API response, causing DNS-01 record creation or
cleanup to intermittently fail with the same timeout error after
exhausting all retries, even though the API is healthy.

Add an optional httpTimeout field to the Issuer solver config (a Go
duration string, e.g. "45s") so this can be tuned per-environment
without a custom image. The 15s default is unchanged, since raising
it would also raise the worst-case duration of the retry loop hetzner#91
relies on to stay under whatever imposes the outer deadline in the
truly-unreachable case.
@roshanavand
roshanavand requested a review from a team as a code owner August 7, 2026 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant