From 36e8b31081fa5dd065f19bd1f56c7d3e42dd914e Mon Sep 17 00:00:00 2001 From: Alexander Dahmen Date: Fri, 22 May 2026 09:20:53 +0200 Subject: [PATCH] refac(observability): Use new WaitHelper for waiters STACKITSDK-384 Signed-off-by: Alexander Dahmen --- CHANGELOG.md | 2 + services/observability/CHANGELOG.md | 3 ++ services/observability/VERSION | 2 +- services/observability/v1api/wait/wait.go | 65 ++++++++++++----------- 4 files changed, 39 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d30daa497..d436e49a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -274,6 +274,8 @@ - **Dependencies:** Bump STACKIT SDK core module from `v0.25.0` to `v0.26.0` - [v0.22.0](services/observability/CHANGELOG.md#v0220) - **Breaking change:** Updated `InstanceSensitiveData` model because of misbehaving API + - [v0.23.0](services/observability/CHANGELOG.md#v0230) + - **Improvement:** Use new WaiterHelper for observability waiters - `opensearch`: - [v0.26.3](services/opensearch/CHANGELOG.md#v0263) - **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1` diff --git a/services/observability/CHANGELOG.md b/services/observability/CHANGELOG.md index b0b9bd1e6..48347bd79 100644 --- a/services/observability/CHANGELOG.md +++ b/services/observability/CHANGELOG.md @@ -1,3 +1,6 @@ +## v0.23.0 +- **Improvement:** Use new WaiterHelper for observability waiters + ## v0.22.0 - **Breaking change:** Updated `InstanceSensitiveData` model because of misbehaving API diff --git a/services/observability/VERSION b/services/observability/VERSION index 0babdaf0f..964a04d92 100644 --- a/services/observability/VERSION +++ b/services/observability/VERSION @@ -1 +1 @@ -v0.22.0 \ No newline at end of file +v0.23.0 \ No newline at end of file diff --git a/services/observability/v1api/wait/wait.go b/services/observability/v1api/wait/wait.go index 707beb566..636caf989 100644 --- a/services/observability/v1api/wait/wait.go +++ b/services/observability/v1api/wait/wait.go @@ -2,6 +2,7 @@ package wait import ( "context" + "errors" "fmt" "time" @@ -23,22 +24,22 @@ const ( // CreateInstanceWaitHandler will wait for instance creation func CreateInstanceWaitHandler(ctx context.Context, a observability.DefaultAPI, instanceId, projectId string) *wait.AsyncActionHandler[observability.GetInstanceResponse] { - handler := wait.New(func() (waitFinished bool, response *observability.GetInstanceResponse, err error) { - s, err := a.GetInstance(ctx, instanceId, projectId).Execute() - if err != nil { - return false, nil, err - } - if s == nil { - return false, nil, nil - } - if s.Id == instanceId && s.Status == GETINSTANCERESPONSESTATUS_CREATE_SUCCEEDED { - return true, s, nil - } - if s.Id == instanceId && s.Status == GETINSTANCERESPONSESTATUS_CREATE_FAILED { - return true, s, fmt.Errorf("create failed for instance with id %s", instanceId) - } - return false, nil, nil - }) + waitConfig := wait.WaiterHelper[observability.GetInstanceResponse, string]{ + FetchInstance: a.GetInstance(ctx, instanceId, projectId).Execute, + GetState: func(s *observability.GetInstanceResponse) (string, error) { + if s == nil { + return "", errors.New("empty response") + } + if s.Id != instanceId { + return "", fmt.Errorf("instance id mismatch: expected %s, got %s", instanceId, s.Id) + } + return s.Status, nil + }, + ActiveState: []string{GETINSTANCERESPONSESTATUS_CREATE_SUCCEEDED}, + ErrorState: []string{GETINSTANCERESPONSESTATUS_CREATE_FAILED}, + } + + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(45 * time.Minute) return handler } @@ -68,22 +69,22 @@ func UpdateInstanceWaitHandler(ctx context.Context, a observability.DefaultAPI, // DeleteInstanceWaitHandler will wait for instance deletion func DeleteInstanceWaitHandler(ctx context.Context, a observability.DefaultAPI, instanceId, projectId string) *wait.AsyncActionHandler[observability.GetInstanceResponse] { - handler := wait.New(func() (waitFinished bool, response *observability.GetInstanceResponse, err error) { - s, err := a.GetInstance(ctx, instanceId, projectId).Execute() - if err != nil { - return false, nil, err - } - if s == nil { - return false, nil, nil - } - if s.Id == instanceId && s.Status == GETINSTANCERESPONSESTATUS_DELETE_SUCCEEDED { - return true, s, nil - } - if s.Id == instanceId && s.Status == GETINSTANCERESPONSESTATUS_DELETE_FAILED { - return true, s, fmt.Errorf("delete failed for instance with id %s", instanceId) - } - return false, nil, nil - }) + waitConfig := wait.WaiterHelper[observability.GetInstanceResponse, string]{ + FetchInstance: a.GetInstance(ctx, instanceId, projectId).Execute, + GetState: func(s *observability.GetInstanceResponse) (string, error) { + if s == nil { + return "", errors.New("empty response") + } + if s.Id != instanceId { + return "", fmt.Errorf("instance id mismatch: expected %s, got %s", instanceId, s.Id) + } + return s.Status, nil + }, + ActiveState: []string{GETINSTANCERESPONSESTATUS_DELETE_SUCCEEDED}, + ErrorState: []string{GETINSTANCERESPONSESTATUS_DELETE_FAILED}, + } + + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(20 * time.Minute) return handler }