From ab47e92cbf261f4cff901e7e37bc99c22280a927 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 2 Nov 2020 01:34:10 +0100 Subject: [PATCH] HETZNER: fix retry of POST/PUT requests -- rebuild request body (#926) Previously for any retry the request body was already consumed and the server received an empty body. Signed-off-by: Jakob Ackermann Co-authored-by: Tom Limoncelli --- providers/hetzner/api.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/providers/hetzner/api.go b/providers/hetzner/api.go index 0ac41a247..968606148 100644 --- a/providers/hetzner/api.go +++ b/providers/hetzner/api.go @@ -157,21 +157,21 @@ func (api *hetznerProvider) getZone(name string) (*zone, error) { } func (api *hetznerProvider) request(endpoint string, method string, request interface{}, target interface{}) error { - var requestBody io.Reader - if request != nil { - requestBodySerialised, err := json.Marshal(request) + for { + var requestBody io.Reader + if request != nil { + requestBodySerialised, err := json.Marshal(request) + if err != nil { + return err + } + requestBody = bytes.NewBuffer(requestBodySerialised) + } + req, err := http.NewRequest(method, baseURL+endpoint, requestBody) if err != nil { return err } - requestBody = bytes.NewBuffer(requestBodySerialised) - } - req, err := http.NewRequest(method, baseURL+endpoint, requestBody) - if err != nil { - return err - } - req.Header.Add("Auth-API-Token", api.apiKey) + req.Header.Add("Auth-API-Token", api.apiKey) - for { api.requestRateLimiter.beforeRequest() resp, err := http.DefaultClient.Do(req) api.requestRateLimiter.afterRequest()