From 775f0d0d69e17e8433e71cf1ac4a70d2269109ea Mon Sep 17 00:00:00 2001 From: sinbai Date: Tue, 18 Mar 2025 15:29:09 +0800 Subject: [PATCH 1/2] fix #1175 --- sdk/client/client.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sdk/client/client.go b/sdk/client/client.go index a52e5dad66..c845360806 100644 --- a/sdk/client/client.go +++ b/sdk/client/client.go @@ -11,6 +11,7 @@ import ( "encoding/xml" "errors" "fmt" + "github.com/hashicorp/go-retryablehttp" "io" "log" "math" @@ -26,7 +27,6 @@ import ( "github.com/hashicorp/go-azure-sdk/sdk/auth" "github.com/hashicorp/go-azure-sdk/sdk/internal/accept" "github.com/hashicorp/go-azure-sdk/sdk/odata" - "github.com/hashicorp/go-retryablehttp" ) // RetryOn404ConsistencyFailureFunc can be used to retry a request when a 404 response is received @@ -320,6 +320,10 @@ type Client struct { ResponseMiddlewares *[]ResponseMiddleware } +type rawDetailsError struct { + Message string `json:"message"` +} + // NewClient returns a new Client configured with sensible defaults func NewClient(baseUri string, serviceName, apiVersion string) *Client { segments := []string{ @@ -558,6 +562,18 @@ func (c *Client) Execute(ctx context.Context, req *Request) (*Response, error) { switch { case resp.OData != nil && resp.OData.Error != nil && resp.OData.Error.String() != "": errText = fmt.Sprintf("error: %s", resp.OData.Error) + if rawDetails := resp.OData.Error.RawDetails; rawDetails != nil { + var rawDetailsErr []rawDetailsError + if err = json.Unmarshal(*rawDetails, &rawDetailsErr); err == nil { + messages := []string{} + for _, v := range rawDetailsErr { + if v.Message != "" { + messages = append(messages, v.Message) + } + } + errText += strings.Join(messages, "\n") + } + } default: defer resp.Body.Close() From 250f32ae1505d6e97087130d1f50fed4e89da046 Mon Sep 17 00:00:00 2001 From: sinbai Date: Tue, 18 Mar 2025 15:32:53 +0800 Subject: [PATCH 2/2] update code --- sdk/client/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/client/client.go b/sdk/client/client.go index c845360806..812a6380d7 100644 --- a/sdk/client/client.go +++ b/sdk/client/client.go @@ -11,7 +11,6 @@ import ( "encoding/xml" "errors" "fmt" - "github.com/hashicorp/go-retryablehttp" "io" "log" "math" @@ -27,6 +26,7 @@ import ( "github.com/hashicorp/go-azure-sdk/sdk/auth" "github.com/hashicorp/go-azure-sdk/sdk/internal/accept" "github.com/hashicorp/go-azure-sdk/sdk/odata" + "github.com/hashicorp/go-retryablehttp" ) // RetryOn404ConsistencyFailureFunc can be used to retry a request when a 404 response is received