From 165ec012de2be0b51a7f08a43cb8c54ede8b4f6d Mon Sep 17 00:00:00 2001 From: Niclas Schad Date: Fri, 17 Jul 2026 09:38:45 +0200 Subject: [PATCH 1/2] wrap isolatednetwok call with responseID callback Signed-off-by: Niclas Schad --- pkg/stackit/client/utils.go | 34 +++++++++++++++++++ .../stackit/infrastructure_test.go | 8 +++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/pkg/stackit/client/utils.go b/pkg/stackit/client/utils.go index ad101b50..62025906 100644 --- a/pkg/stackit/client/utils.go +++ b/pkg/stackit/client/utils.go @@ -1,9 +1,14 @@ package client import ( + "context" + "fmt" + "net/http" "strings" gardenerutils "github.com/gardener/gardener/pkg/utils" + "github.com/stackitcloud/stackit-sdk-go/core/runtime" + sdkWait "github.com/stackitcloud/stackit-sdk-go/services/iaas/v2api/wait" utilvalidation "k8s.io/apimachinery/pkg/util/validation" ) @@ -29,3 +34,32 @@ func BuildResourceName(technicalID, resourceNameInfix, resourceName string) stri truncated := strings.TrimRight(resourceName[:budget], "-") return technicalID + resourceNameInfix + truncated + "-" + hash } + +// wrapErrorWithResponseID wraps the error with the X-Request-Id but only if the error is not nil +func wrapErrorWithResponseID(err error, reqID string) error { + if err == nil { + return nil + } + // if the request id is empty we don't wrap the error + if reqID == "" { + return err + } + return fmt.Errorf("[%s:%s]: %w", sdkWait.XRequestIDHeader, reqID, err) +} + +func WithResponseID[T any](ctx context.Context, call func(context.Context) (T, error)) (T, error) { + var httpResp *http.Response + ctx = runtime.WithCaptureHTTPResponse(ctx, &httpResp) + + resp, err := call(ctx) + if err != nil { + var zero T + if httpResp != nil { + reqID := httpResp.Header.Get(sdkWait.XRequestIDHeader) + return zero, wrapErrorWithResponseID(err, reqID) + } + return zero, err + } + + return resp, nil +} diff --git a/test/integration/infrastructure/stackit/infrastructure_test.go b/test/integration/infrastructure/stackit/infrastructure_test.go index 569db7db..abcbd2f4 100644 --- a/test/integration/infrastructure/stackit/infrastructure_test.go +++ b/test/integration/infrastructure/stackit/infrastructure_test.go @@ -262,7 +262,9 @@ func testInfrastructure(reconciler *string) { networkName := namespace + "-network" - networkID, err := prepareIsolatedNetwork(log, networkName) + networkID, err := stackitclient.WithResponseID(ctx, func(ctx context.Context) (*string, error) { + return prepareIsolatedNetwork(log, networkName) + }) Expect(err).NotTo(HaveOccurred()) var cleanupHandle framework.CleanupActionHandle @@ -287,7 +289,9 @@ func testInfrastructure(reconciler *string) { networkName := namespace + "-network" - networkID, err := prepareIsolatedNetwork(log, networkName) + networkID, err := stackitclient.WithResponseID(ctx, func(ctx context.Context) (*string, error) { + return prepareIsolatedNetwork(log, networkName) + }) Expect(err).NotTo(HaveOccurred()) var cleanupHandle framework.CleanupActionHandle From f08bc27b40e39fe6d5bca5d7b8f99e09910308c0 Mon Sep 17 00:00:00 2001 From: Niclas Schad Date: Fri, 17 Jul 2026 09:48:58 +0200 Subject: [PATCH 2/2] blub Signed-off-by: Niclas Schad --- pkg/stackit/client/iaas.go | 4 +++- .../infrastructure/stackit/infrastructure_test.go | 8 ++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/pkg/stackit/client/iaas.go b/pkg/stackit/client/iaas.go index 628f1a96..aa12b98b 100644 --- a/pkg/stackit/client/iaas.go +++ b/pkg/stackit/client/iaas.go @@ -152,7 +152,9 @@ func NewIaaSClient(region string, endpoints stackitv1alpha1.APIEndpoints, creden } func (c iaasClient) CreateIsolatedNetwork(ctx context.Context, payload iaas.CreateIsolatedNetworkPayload) (*iaas.Network, error) { - return c.Client.CreateIsolatedNetwork(ctx, c.projectID, c.region).CreateIsolatedNetworkPayload(payload).Execute() + return WithResponseID(ctx, func(ctx context.Context) (*iaas.Network, error) { + return c.Client.CreateIsolatedNetwork(ctx, c.projectID, c.region).CreateIsolatedNetworkPayload(payload).Execute() + }) } func (c iaasClient) DeleteNetwork(ctx context.Context, networkID string) error { diff --git a/test/integration/infrastructure/stackit/infrastructure_test.go b/test/integration/infrastructure/stackit/infrastructure_test.go index abcbd2f4..569db7db 100644 --- a/test/integration/infrastructure/stackit/infrastructure_test.go +++ b/test/integration/infrastructure/stackit/infrastructure_test.go @@ -262,9 +262,7 @@ func testInfrastructure(reconciler *string) { networkName := namespace + "-network" - networkID, err := stackitclient.WithResponseID(ctx, func(ctx context.Context) (*string, error) { - return prepareIsolatedNetwork(log, networkName) - }) + networkID, err := prepareIsolatedNetwork(log, networkName) Expect(err).NotTo(HaveOccurred()) var cleanupHandle framework.CleanupActionHandle @@ -289,9 +287,7 @@ func testInfrastructure(reconciler *string) { networkName := namespace + "-network" - networkID, err := stackitclient.WithResponseID(ctx, func(ctx context.Context) (*string, error) { - return prepareIsolatedNetwork(log, networkName) - }) + networkID, err := prepareIsolatedNetwork(log, networkName) Expect(err).NotTo(HaveOccurred()) var cleanupHandle framework.CleanupActionHandle