From be945af5f35cbad87dc7c7310d3c4d6dace8ea38 Mon Sep 17 00:00:00 2001 From: GokceGK Date: Wed, 20 May 2026 15:30:33 +0200 Subject: [PATCH] feat(rabbitmq): refactor wait handler to use helper struct relates to STACKITSDK-387 --- CHANGELOG.md | 2 + services/rabbitmq/CHANGELOG.md | 3 + services/rabbitmq/VERSION | 2 +- services/rabbitmq/v1api/wait/wait.go | 69 ++++++++++++----------- services/rabbitmq/v1api/wait/wait_test.go | 14 +++++ 5 files changed, 55 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9599f8afa..8e707c183 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -294,6 +294,8 @@ - **Dependencies:** Bump STACKIT SDK core module from `v0.24.1` to `v0.25.0` - [v0.29.2](services/rabbitmq/CHANGELOG.md#v0292) - **Dependencies:** Bump STACKIT SDK core module from `v0.25.0` to `v0.26.0` + - [v0.30.0](services/rabbitmq/CHANGELOG.md#v0300) + - `v1api`: **Improvement**: Use new `WaiterHandler` struct in the RabbitMQ WaitHandler - `redis`: - [v0.27.3](services/redis/CHANGELOG.md#v0273) - **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1` diff --git a/services/rabbitmq/CHANGELOG.md b/services/rabbitmq/CHANGELOG.md index d1a15cff3..10aed9244 100644 --- a/services/rabbitmq/CHANGELOG.md +++ b/services/rabbitmq/CHANGELOG.md @@ -1,3 +1,6 @@ +## v0.30.0 +- `v1api`: **Improvement**: Use new `WaiterHandler` struct in the RabbitMQ WaitHandler + ## v0.29.2 - **Dependencies:** Bump STACKIT SDK core module from `v0.25.0` to `v0.26.0` diff --git a/services/rabbitmq/VERSION b/services/rabbitmq/VERSION index 9f27816d8..29e939cda 100644 --- a/services/rabbitmq/VERSION +++ b/services/rabbitmq/VERSION @@ -1 +1 @@ -v0.29.2 \ No newline at end of file +v0.30.0 \ No newline at end of file diff --git a/services/rabbitmq/v1api/wait/wait.go b/services/rabbitmq/v1api/wait/wait.go index f0ef6c443..1a135d0fe 100644 --- a/services/rabbitmq/v1api/wait/wait.go +++ b/services/rabbitmq/v1api/wait/wait.go @@ -2,6 +2,7 @@ package wait import ( "context" + "errors" "fmt" "net/http" "strings" @@ -26,45 +27,45 @@ const ( ) // CreateInstanceWaitHandler will wait for instance creation -func CreateInstanceWaitHandler(ctx context.Context, a rabbitmq.DefaultAPI, projectId, instanceId string) *wait.AsyncActionHandler[rabbitmq.Instance] { - handler := wait.New(func() (waitFinished bool, response *rabbitmq.Instance, err error) { - s, err := a.GetInstance(ctx, projectId, instanceId).Execute() - if err != nil { - return false, nil, err - } - if s.Status == nil { - return false, nil, fmt.Errorf("create failed for instance with id %s. The response is not valid: the status is missing", instanceId) - } - switch *s.Status { - case INSTANCESTATUS_ACTIVE: - return true, s, nil - case INSTANCESTATUS_FAILED: - return true, s, fmt.Errorf("create failed for instance with id %s: %s", instanceId, s.LastOperation.Description) - } - return false, nil, nil - }) +func CreateInstanceWaitHandler(ctx context.Context, client rabbitmq.DefaultAPI, projectId, instanceId string) *wait.AsyncActionHandler[rabbitmq.Instance] { + waitConfig := wait.WaiterHelper[rabbitmq.Instance, string]{ + FetchInstance: client.GetInstance(ctx, projectId, instanceId).Execute, + GetState: func(response *rabbitmq.Instance) (string, error) { + if response == nil { + return "", errors.New("empty response") + } + if response.Status == nil { + return "", errors.New("status is missing in response") + } + return *response.Status, nil + }, + ActiveState: []string{INSTANCESTATUS_ACTIVE}, + ErrorState: []string{INSTANCESTATUS_FAILED}, + } + + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(45 * time.Minute) return handler } // PartialUpdateInstanceWaitHandler will wait for instance update -func PartialUpdateInstanceWaitHandler(ctx context.Context, a rabbitmq.DefaultAPI, projectId, instanceId string) *wait.AsyncActionHandler[rabbitmq.Instance] { - handler := wait.New(func() (waitFinished bool, response *rabbitmq.Instance, err error) { - s, err := a.GetInstance(ctx, projectId, instanceId).Execute() - if err != nil { - return false, nil, err - } - if s.Status == nil { - return false, nil, fmt.Errorf("update failed for instance with id %s. The response is not valid: the instance id or the status are missing", instanceId) - } - switch *s.Status { - case INSTANCESTATUS_ACTIVE: - return true, s, nil - case INSTANCESTATUS_FAILED: - return true, s, fmt.Errorf("update failed for instance with id %s: %s", instanceId, s.LastOperation.Description) - } - return false, nil, nil - }) +func PartialUpdateInstanceWaitHandler(ctx context.Context, client rabbitmq.DefaultAPI, projectId, instanceId string) *wait.AsyncActionHandler[rabbitmq.Instance] { + waitConfig := wait.WaiterHelper[rabbitmq.Instance, string]{ + FetchInstance: client.GetInstance(ctx, projectId, instanceId).Execute, + GetState: func(response *rabbitmq.Instance) (string, error) { + if response == nil { + return "", errors.New("empty response") + } + if response.Status == nil { + return "", errors.New("status is missing in response") + } + return *response.Status, nil + }, + ActiveState: []string{INSTANCESTATUS_ACTIVE}, + ErrorState: []string{INSTANCESTATUS_FAILED}, + } + + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(45 * time.Minute) return handler } diff --git a/services/rabbitmq/v1api/wait/wait_test.go b/services/rabbitmq/v1api/wait/wait_test.go index 7cd9a28bd..3151a768e 100644 --- a/services/rabbitmq/v1api/wait/wait_test.go +++ b/services/rabbitmq/v1api/wait/wait_test.go @@ -98,6 +98,13 @@ func TestCreateInstanceWaitHandler(t *testing.T) { wantErr: true, wantResp: true, }, + { + desc: "wrong state in response", + getFails: false, + resourceState: utils.Ptr("wrong state"), + wantErr: true, + wantResp: false, + }, { desc: "get_fails", getFails: true, @@ -169,6 +176,13 @@ func TestUpdateInstanceWaitHandler(t *testing.T) { wantErr: true, wantResp: true, }, + { + desc: "wrong state in response", + getFails: false, + resourceState: utils.Ptr("wrong state"), + wantErr: true, + wantResp: false, + }, { desc: "get_fails", getFails: true,