From 7c95cfcab795d224afd080c36be84999050ac841 Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 30 Apr 2026 11:59:10 +0200 Subject: [PATCH 1/6] refac(edge) use WaiterHelper for waiters --- services/edge/v1beta1api/wait/wait.go | 133 +++++++++++---------- services/edge/v1beta1api/wait/wait_test.go | 2 +- services/edge/wait/wait.go | 133 +++++++++++---------- services/edge/wait/wait_test.go | 2 +- 4 files changed, 139 insertions(+), 131 deletions(-) diff --git a/services/edge/v1beta1api/wait/wait.go b/services/edge/v1beta1api/wait/wait.go index 3b9abae07..526896c4e 100644 --- a/services/edge/v1beta1api/wait/wait.go +++ b/services/edge/v1beta1api/wait/wait.go @@ -30,30 +30,20 @@ var ( // createOrUpdateInstanceWaitHandler contains the shared logic for waiting on instance creation or updates. func createOrUpdateInstanceWaitHandler(ctx context.Context, getInstance func(ctx context.Context) (*edge.Instance, error)) *wait.AsyncActionHandler[edge.Instance] { - handler := wait.New(func() (waitFinished bool, response *edge.Instance, err error) { - instance, err := getInstance(ctx) - if err != nil { - return false, nil, err - } - - if instance == nil { - return false, nil, ErrInstanceNotFound - } - - status := instance.Status - switch status { - case INSTANCESTATUS_ACTIVE: - return true, instance, nil - case INSTANCESTATUS_ERROR: - return true, instance, ErrInstanceCreationFailed - case INSTANCESTATUS_RECONCILING: - return false, nil, nil - case INSTANCESTATUS_DELETING: - return true, instance, ErrInstanceIsBeingDeleted - default: - return false, nil, nil - } - }) + waitConfig := wait.WaiterHelper[edge.Instance, string]{ + FetchInstance: func() (*edge.Instance, error) { + return getInstance(ctx) + }, + GetState: func(e *edge.Instance) (string, error) { + if e == nil { + return "", ErrInstanceNotFound + } + return e.Status, nil + }, + ActiveState: []string{INSTANCESTATUS_ACTIVE}, + ErrorState: []string{INSTANCESTATUS_ERROR, INSTANCESTATUS_DELETING}, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } @@ -74,17 +64,18 @@ func CreateOrUpdateInstanceByNameWaitHandler(ctx context.Context, a edge.Default // deleteInstanceWaitHandler contains the shared logic for waiting on instance deletion. func deleteInstanceWaitHandler(ctx context.Context, getInstance func(ctx context.Context) (*edge.Instance, error)) *wait.AsyncActionHandler[edge.Instance] { - handler := wait.New(func() (waitFinished bool, response *edge.Instance, err error) { - _, err = getInstance(ctx) - if err == nil { - return false, nil, nil - } - var oapiErr *oapierror.GenericOpenAPIError - if errors.As(err, &oapiErr) && oapiErr.StatusCode == http.StatusNotFound { - return true, nil, nil - } - return false, nil, err - }) + waitConfig := wait.WaiterHelper[edge.Instance, string]{ + FetchInstance: func() (*edge.Instance, error) { + return getInstance(ctx) + }, + GetState: func(e *edge.Instance) (string, error) { + if e == nil { + return "", ErrInstanceNotFound + } + return e.Status, nil + }, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } @@ -105,21 +96,29 @@ func DeleteInstanceByNameWaitHandler(ctx context.Context, a edge.DefaultAPI, pro // kubeconfigWaitHandlerHelper contains the shared logic for waiting for the instance to become ready before retrieving the kubeconfig. func kubeconfigWaitHandlerHelper(ctx context.Context, checkInstance func(ctx context.Context) error, getKubeconfig func(ctx context.Context) (*edge.Kubeconfig, error)) *wait.AsyncActionHandler[edge.Kubeconfig] { - handler := wait.New(func() (waitFinished bool, response *edge.Kubeconfig, err error) { - err = checkInstance(ctx) - if err != nil { - return false, nil, err - } - kubeconfig, err := getKubeconfig(ctx) - var oapiErr *oapierror.GenericOpenAPIError - if err != nil { - if errors.As(err, &oapiErr) && oapiErr.StatusCode == http.StatusNotFound { - return false, nil, nil + waitConfig := wait.WaiterHelper[edge.Kubeconfig, string]{ + FetchInstance: func() (*edge.Kubeconfig, error) { + err := checkInstance(ctx) + if err != nil { + return nil, err } - return false, nil, err - } - return true, kubeconfig, nil - }) + config, err := getKubeconfig(ctx) + if err != nil { + if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + return nil, nil + } + } + return config, err + }, + GetState: func(e *edge.Kubeconfig) (string, error) { + if e == nil { + return "NOT_READY", nil + } + return "READY", nil + }, + ActiveState: []string{"READY"}, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } @@ -158,21 +157,29 @@ func KubeconfigByInstanceNameWaitHandler(ctx context.Context, a edge.DefaultAPI, // tokenWaitHandlerHelper contains the shared logic for waiting for the instance to become ready before retrieving the service token. func tokenWaitHandlerHelper(ctx context.Context, checkInstance func(ctx context.Context) error, getToken func(ctx context.Context) (*edge.Token, error)) *wait.AsyncActionHandler[edge.Token] { - handler := wait.New(func() (waitFinished bool, response *edge.Token, err error) { - err = checkInstance(ctx) - if err != nil { - return false, nil, err - } - token, err := getToken(ctx) - var oapiErr *oapierror.GenericOpenAPIError - if err != nil { - if errors.As(err, &oapiErr) && oapiErr.StatusCode == http.StatusNotFound { - return false, nil, nil + waitConfig := wait.WaiterHelper[edge.Token, string]{ + FetchInstance: func() (*edge.Token, error) { + err := checkInstance(ctx) + if err != nil { + return nil, err } - return false, nil, err - } - return true, token, nil - }) + token, err := getToken(ctx) + if err != nil { + if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + return nil, nil + } + } + return token, err + }, + GetState: func(e *edge.Token) (string, error) { + if e == nil { + return "NOT_READY", nil + } + return "READY", nil + }, + ActiveState: []string{"READY"}, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } diff --git a/services/edge/v1beta1api/wait/wait_test.go b/services/edge/v1beta1api/wait/wait_test.go index a69f5d9c1..18c2efb8d 100644 --- a/services/edge/v1beta1api/wait/wait_test.go +++ b/services/edge/v1beta1api/wait/wait_test.go @@ -129,7 +129,7 @@ var createOrUpdateInstanceTests = []struct { desc: "failed creation", shouldFail: false, instanceStatus: INSTANCESTATUS_ERROR, - wantErr: errors.New("instance creation failed"), + wantErr: errors.New("state is error"), }, { desc: "API fails", diff --git a/services/edge/wait/wait.go b/services/edge/wait/wait.go index a16a3cd9d..8ef104409 100644 --- a/services/edge/wait/wait.go +++ b/services/edge/wait/wait.go @@ -33,33 +33,20 @@ type EdgeCloudApiClient interface { // createOrUpdateInstanceWaitHandler contains the shared logic for waiting on instance creation or updates. func createOrUpdateInstanceWaitHandler(ctx context.Context, getInstance func(ctx context.Context) (*edge.Instance, error)) *wait.AsyncActionHandler[edge.Instance] { - handler := wait.New(func() (waitFinished bool, response *edge.Instance, err error) { - instance, err := getInstance(ctx) - if err != nil { - return false, nil, err - } - - if instance == nil || instance.Status == nil { - return false, nil, ErrInstanceNotFound - } - if instance == nil || instance.Status == nil { - return false, nil, ErrInstanceStatusUndefined - } - - status := *instance.Status - switch status { - case edge.INSTANCESTATUS_ACTIVE: - return true, instance, nil - case edge.INSTANCESTATUS_ERROR: - return true, instance, ErrInstanceCreationFailed - case edge.INSTANCESTATUS_RECONCILING: - return false, nil, nil - case edge.INSTANCESTATUS_DELETING: - return true, instance, ErrInstanceIsBeingDeleted - default: - return false, nil, nil - } - }) + waitConfig := wait.WaiterHelper[edge.Instance, edge.InstanceStatus]{ + FetchInstance: func() (*edge.Instance, error) { + return getInstance(ctx) + }, + GetState: func(instance *edge.Instance) (edge.InstanceStatus, error) { + if instance == nil || instance.Status == nil { + return "", ErrInstanceNotFound + } + return *instance.Status, nil + }, + ActiveState: []edge.InstanceStatus{edge.INSTANCESTATUS_ACTIVE}, + ErrorState: []edge.InstanceStatus{edge.INSTANCESTATUS_ERROR, edge.INSTANCESTATUS_DELETING}, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } @@ -80,17 +67,15 @@ func CreateOrUpdateInstanceByNameWaitHandler(ctx context.Context, a EdgeCloudApi // deleteInstanceWaitHandler contains the shared logic for waiting on instance deletion. func deleteInstanceWaitHandler(ctx context.Context, getInstance func(ctx context.Context) (*edge.Instance, error)) *wait.AsyncActionHandler[edge.Instance] { - handler := wait.New(func() (waitFinished bool, response *edge.Instance, err error) { - _, err = getInstance(ctx) - if err == nil { - return false, nil, nil - } - var oapiErr *oapierror.GenericOpenAPIError - if errors.As(err, &oapiErr) && oapiErr.StatusCode == http.StatusNotFound { - return true, nil, nil - } - return false, nil, err - }) + waitConfig := wait.WaiterHelper[edge.Instance, edge.InstanceStatus]{ + FetchInstance: func() (*edge.Instance, error) { + return getInstance(ctx) + }, + GetState: func(i *edge.Instance) (edge.InstanceStatus, error) { + return "", nil + }, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } @@ -111,21 +96,29 @@ func DeleteInstanceByNameWaitHandler(ctx context.Context, a EdgeCloudApiClient, // kubeconfigWaitHandlerHelper contains the shared logic for waiting for the instance to become ready before retrieving the kubeconfig. func kubeconfigWaitHandlerHelper(ctx context.Context, checkInstance func(ctx context.Context) error, getKubeconfig func(ctx context.Context) (*edge.Kubeconfig, error)) *wait.AsyncActionHandler[edge.Kubeconfig] { - handler := wait.New(func() (waitFinished bool, response *edge.Kubeconfig, err error) { - err = checkInstance(ctx) - if err != nil { - return false, nil, err - } - kubeconfig, err := getKubeconfig(ctx) - var oapiErr *oapierror.GenericOpenAPIError - if err != nil { - if errors.As(err, &oapiErr) && oapiErr.StatusCode == http.StatusNotFound { - return false, nil, nil + waitConfig := wait.WaiterHelper[edge.Kubeconfig, string]{ + FetchInstance: func() (*edge.Kubeconfig, error) { + err := checkInstance(ctx) + if err != nil { + return nil, err } - return false, nil, err - } - return true, kubeconfig, nil - }) + config, err := getKubeconfig(ctx) + if err != nil { + if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + return nil, nil + } + } + return config, err + }, + GetState: func(k *edge.Kubeconfig) (string, error) { + if k == nil { + return "NOT_READY", nil + } + return "READY", nil + }, + ActiveState: []string{"READY"}, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } @@ -164,21 +157,29 @@ func KubeconfigByInstanceNameWaitHandler(ctx context.Context, a EdgeCloudApiClie // tokenWaitHandlerHelper contains the shared logic for waiting for the instance to become ready before retrieving the service token. func tokenWaitHandlerHelper(ctx context.Context, checkInstance func(ctx context.Context) error, getToken func(ctx context.Context) (*edge.Token, error)) *wait.AsyncActionHandler[edge.Token] { - handler := wait.New(func() (waitFinished bool, response *edge.Token, err error) { - err = checkInstance(ctx) - if err != nil { - return false, nil, err - } - token, err := getToken(ctx) - var oapiErr *oapierror.GenericOpenAPIError - if err != nil { - if errors.As(err, &oapiErr) && oapiErr.StatusCode == http.StatusNotFound { - return false, nil, nil + waitConfig := wait.WaiterHelper[edge.Token, string]{ + FetchInstance: func() (*edge.Token, error) { + err := checkInstance(ctx) + if err != nil { + return nil, err } - return false, nil, err - } - return true, token, nil - }) + token, err := getToken(ctx) + if err != nil { + if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + return nil, nil + } + } + return token, err + }, + GetState: func(t *edge.Token) (string, error) { + if t == nil { + return "NOT_READY", nil + } + return "READY", nil + }, + ActiveState: []string{"READY"}, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(timeoutMinutes * time.Minute) return handler } diff --git a/services/edge/wait/wait_test.go b/services/edge/wait/wait_test.go index 23f7a9989..a79b971dc 100644 --- a/services/edge/wait/wait_test.go +++ b/services/edge/wait/wait_test.go @@ -173,7 +173,7 @@ var createOrUpdateInstanceTests = []struct { desc: "failed creation", shouldFail: false, instanceStatus: edge.INSTANCESTATUS_ERROR, - wantErr: errors.New("instance creation failed"), + wantErr: errors.New("state is error"), }, { desc: "API fails", From 74f538244e42a8f51e058b6f23d9bc9d10578ddc Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 30 Apr 2026 12:06:23 +0200 Subject: [PATCH 2/6] fix(edge) use go 1.25 compatible error conversion --- services/edge/v1beta1api/wait/wait.go | 6 ++++-- services/edge/wait/wait.go | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/services/edge/v1beta1api/wait/wait.go b/services/edge/v1beta1api/wait/wait.go index 526896c4e..87de18361 100644 --- a/services/edge/v1beta1api/wait/wait.go +++ b/services/edge/v1beta1api/wait/wait.go @@ -104,7 +104,8 @@ func kubeconfigWaitHandlerHelper(ctx context.Context, checkInstance func(ctx con } config, err := getKubeconfig(ctx) if err != nil { - if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + var apiErr *oapierror.GenericOpenAPIError + if ok := errors.As(err, &apiErr); ok && apiErr.StatusCode == http.StatusNotFound { return nil, nil } } @@ -165,7 +166,8 @@ func tokenWaitHandlerHelper(ctx context.Context, checkInstance func(ctx context. } token, err := getToken(ctx) if err != nil { - if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + var apiErr *oapierror.GenericOpenAPIError + if ok := errors.As(err, &apiErr); ok && apiErr.StatusCode == http.StatusNotFound { return nil, nil } } diff --git a/services/edge/wait/wait.go b/services/edge/wait/wait.go index 8ef104409..1200fd70c 100644 --- a/services/edge/wait/wait.go +++ b/services/edge/wait/wait.go @@ -104,7 +104,8 @@ func kubeconfigWaitHandlerHelper(ctx context.Context, checkInstance func(ctx con } config, err := getKubeconfig(ctx) if err != nil { - if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + var apiErr *oapierror.GenericOpenAPIError + if ok := errors.As(err, &apiErr); ok && apiErr.StatusCode == http.StatusNotFound { return nil, nil } } @@ -165,7 +166,8 @@ func tokenWaitHandlerHelper(ctx context.Context, checkInstance func(ctx context. } token, err := getToken(ctx) if err != nil { - if apiErr, ok := errors.AsType[*oapierror.GenericOpenAPIError](err); ok && apiErr.StatusCode == http.StatusNotFound { + var apiErr *oapierror.GenericOpenAPIError + if ok := errors.As(err, &apiErr); ok && apiErr.StatusCode == http.StatusNotFound { return nil, nil } } From e245a40152bee68ea9e4d8859645f7eb41a6f33e Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 30 Apr 2026 12:12:27 +0200 Subject: [PATCH 3/6] fix(edge) rename unused param to `_` --- services/edge/wait/wait.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/edge/wait/wait.go b/services/edge/wait/wait.go index 1200fd70c..685456ea5 100644 --- a/services/edge/wait/wait.go +++ b/services/edge/wait/wait.go @@ -71,7 +71,7 @@ func deleteInstanceWaitHandler(ctx context.Context, getInstance func(ctx context FetchInstance: func() (*edge.Instance, error) { return getInstance(ctx) }, - GetState: func(i *edge.Instance) (edge.InstanceStatus, error) { + GetState: func(_ *edge.Instance) (edge.InstanceStatus, error) { return "", nil }, } From 5efffc0c8e7c98577d9d647df0917fc95518e50a Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 7 May 2026 09:58:37 +0200 Subject: [PATCH 4/6] fix(edge) deprecate unused errors --- services/edge/v1beta1api/wait/wait.go | 9 ++++++--- services/edge/wait/wait.go | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/services/edge/v1beta1api/wait/wait.go b/services/edge/v1beta1api/wait/wait.go index 87de18361..b8b7686b1 100644 --- a/services/edge/v1beta1api/wait/wait.go +++ b/services/edge/v1beta1api/wait/wait.go @@ -22,10 +22,13 @@ const ( ) var ( - ErrInstanceNotFound = errors.New("instance not found") + ErrInstanceNotFound = errors.New("instance not found") + // Deprecated: ErrInstanceStatusUndefined is no longer used and will be removed after 2026-11-07 ErrInstanceStatusUndefined = errors.New("instance status undefined") - ErrInstanceCreationFailed = errors.New("instance creation failed") - ErrInstanceIsBeingDeleted = errors.New("instance is being deleted") + // Deprecated: ErrInstanceCreationFailed is no longer used and will be removed after 2026-11-07 + ErrInstanceCreationFailed = errors.New("instance creation failed") + // Deprecated: ErrInstanceIsBeingDeleted is no longer used and will be removed after 2026-11-07 + ErrInstanceIsBeingDeleted = errors.New("instance is being deleted") ) // createOrUpdateInstanceWaitHandler contains the shared logic for waiting on instance creation or updates. diff --git a/services/edge/wait/wait.go b/services/edge/wait/wait.go index 685456ea5..8a8222633 100644 --- a/services/edge/wait/wait.go +++ b/services/edge/wait/wait.go @@ -17,8 +17,10 @@ const timeoutMinutes time.Duration = 10 var ( ErrInstanceNotFound = errors.New("instance not found") ErrInstanceStatusUndefined = errors.New("instance status undefined") - ErrInstanceCreationFailed = errors.New("instance creation failed") - ErrInstanceIsBeingDeleted = errors.New("instance is being deleted") + // Deprecated: ErrInstanceCreationFailed is no longer used and will be removed after 2026-11-07 + ErrInstanceCreationFailed = errors.New("instance creation failed") + // Deprecated: ErrInstanceIsBeingDeleted is no longer used and will be removed after 2026-11-07 + ErrInstanceIsBeingDeleted = errors.New("instance is being deleted") ) // EdgeCloudApiClient is the interface for Edge Cloud API calls which require a waiter. From b2e25349074c5f2ff5bdb923a637f8e94f021b35 Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 7 May 2026 13:57:31 +0200 Subject: [PATCH 5/6] fix(edge) write changelog, bump version --- CHANGELOG.md | 3 +++ services/edge/CHANGELOG.md | 4 ++++ services/edge/VERSION | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13e639fe5..116dff909 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -100,6 +100,9 @@ - **Dependencies:** Bump STACKIT SDK core module from `v0.24.1` to `v0.25.0` - [v0.9.2](services/edge/CHANGELOG.md#v092) - **Dependencies:** Bump STACKIT SDK core module to `v0.26.0` + - [v0.10.0](services/edge/CHANGELOG.md#v0100) + - **Improvement:** Use new `WaiterHandler` struct in the Edge WaitHandler + - **Deprecation:** Deprecated `ErrInstanceCreationFailed` and `ErrInstanceIsBeingDeleted` in `wait` package - `git`: - [v0.11.2](services/git/CHANGELOG.md#v0112) - **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1` diff --git a/services/edge/CHANGELOG.md b/services/edge/CHANGELOG.md index 724a0fe87..b10c3b3eb 100644 --- a/services/edge/CHANGELOG.md +++ b/services/edge/CHANGELOG.md @@ -1,3 +1,7 @@ +## v0.10.0 +- **Improvement:** Use new `WaiterHandler` struct in the Edge WaitHandler +- **Deprecation:** Deprecated `ErrInstanceCreationFailed` and `ErrInstanceIsBeingDeleted` in `wait` package + ## v0.9.2 - **Dependencies:** Bump STACKIT SDK core module to `v0.26.0` diff --git a/services/edge/VERSION b/services/edge/VERSION index e6e6db4c4..bf057dbfd 100644 --- a/services/edge/VERSION +++ b/services/edge/VERSION @@ -1 +1 @@ -v0.9.2 +v0.10.0 From 0b62c5a467eadc0c030854aa7916f238744ea28d Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 7 May 2026 16:02:29 +0200 Subject: [PATCH 6/6] fix(edge) move changelogs to new version --- CHANGELOG.md | 6 ++---- services/edge/CHANGELOG.md | 4 +++- services/edge/VERSION | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 812202390..03377fba3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -101,12 +101,10 @@ - [v0.9.2](services/edge/CHANGELOG.md#v092) - **Dependencies:** Bump STACKIT SDK core module to `v0.26.0` - [v0.10.0](services/edge/CHANGELOG.md#v0100) -<<<<<<< feat/STACKITSDK-372_edge-wait-helper + - Align package to latest API specification + - [v0.11.0](services/edge/CHANGELOG.md#v0110) - **Improvement:** Use new `WaiterHandler` struct in the Edge WaitHandler - **Deprecation:** Deprecated `ErrInstanceCreationFailed` and `ErrInstanceIsBeingDeleted` in `wait` package -======= - - Align package to latest API specification ->>>>>>> main - `git`: - [v0.11.2](services/git/CHANGELOG.md#v0112) - **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1` diff --git a/services/edge/CHANGELOG.md b/services/edge/CHANGELOG.md index 50d79916b..801ed5f91 100644 --- a/services/edge/CHANGELOG.md +++ b/services/edge/CHANGELOG.md @@ -1,6 +1,8 @@ -## v0.10.0 +## v0.11.0 - **Improvement:** Use new `WaiterHandler` struct in the Edge WaitHandler - **Deprecation:** Deprecated `ErrInstanceCreationFailed` and `ErrInstanceIsBeingDeleted` in `wait` package + +## v0.10.0 - Align package to latest API specification ## v0.9.2 diff --git a/services/edge/VERSION b/services/edge/VERSION index bf057dbfd..fd2726c91 100644 --- a/services/edge/VERSION +++ b/services/edge/VERSION @@ -1 +1 @@ -v0.10.0 +v0.11.0