diff --git a/CHANGELOG.md b/CHANGELOG.md index a77389402..24b2f5255 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -312,6 +312,8 @@ - **Breaking change:** Updated `InstanceSensitiveData` model because of misbehaving API - [v0.23.0](services/observability/CHANGELOG.md#v0230) - **Feature:** Introduce enums for various attributes + - [v0.24.0](services/observability/CHANGELOG.md#v0240) + - **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 80aef797c..dda15772e 100644 --- a/services/observability/CHANGELOG.md +++ b/services/observability/CHANGELOG.md @@ -1,3 +1,6 @@ +## v0.24.0 +- **Improvement:** Use new WaiterHelper for observability waiters + ## v0.23.0 - **Feature:** Introduce enums for various attributes diff --git a/services/observability/VERSION b/services/observability/VERSION index 964a04d92..a28372544 100644 --- a/services/observability/VERSION +++ b/services/observability/VERSION @@ -1 +1 @@ -v0.23.0 \ No newline at end of file +v0.24.0 \ No newline at end of file diff --git a/services/observability/v1api/wait/wait.go b/services/observability/v1api/wait/wait.go index 75f5d795b..8ae1bceaf 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" @@ -41,22 +42,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 == observability.STATUS_CREATE_SUCCEEDED { - return true, s, nil - } - if s.Id == instanceId && s.Status == observability.STATUS_CREATE_FAILED { - return true, s, fmt.Errorf("create failed for instance with id %s", instanceId) - } - return false, nil, nil - }) + waitConfig := wait.WaiterHelper[observability.GetInstanceResponse, observability.Status]{ + FetchInstance: a.GetInstance(ctx, instanceId, projectId).Execute, + GetState: func(s *observability.GetInstanceResponse) (observability.Status, 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: []observability.Status{observability.STATUS_CREATE_SUCCEEDED}, + ErrorState: []observability.Status{observability.STATUS_CREATE_FAILED}, + } + + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(45 * time.Minute) return handler } @@ -86,22 +87,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 == observability.STATUS_DELETE_SUCCEEDED { - return true, s, nil - } - if s.Id == instanceId && s.Status == observability.STATUS_DELETE_FAILED { - return true, s, fmt.Errorf("delete failed for instance with id %s", instanceId) - } - return false, nil, nil - }) + waitConfig := wait.WaiterHelper[observability.GetInstanceResponse, observability.Status]{ + FetchInstance: a.GetInstance(ctx, instanceId, projectId).Execute, + GetState: func(s *observability.GetInstanceResponse) (observability.Status, 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: []observability.Status{observability.STATUS_DELETE_SUCCEEDED}, + ErrorState: []observability.Status{observability.STATUS_DELETE_FAILED}, + } + + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(20 * time.Minute) return handler }