diff --git a/CHANGELOG.md b/CHANGELOG.md index d30daa497..31d50efa2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -407,6 +407,8 @@ - **Dependencies:** Bump STACKIT SDK core module to `v0.26.0` - [v1.5.3](services/serviceenablement/CHANGELOG.md#v153) - `v2api`: Removal of duplicated return statements in `DefaultAPIService` implementations + - [v1.6.0](services/serviceenablement/CHANGELOG.md#v160) + - **Improvement:** Use new WaiterHelper for serviceenablement waiters - `sfs`: - [v0.6.3](services/sfs/CHANGELOG.md#v063) - **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1` diff --git a/services/serviceenablement/CHANGELOG.md b/services/serviceenablement/CHANGELOG.md index ef7e0abd0..a505b3036 100644 --- a/services/serviceenablement/CHANGELOG.md +++ b/services/serviceenablement/CHANGELOG.md @@ -1,3 +1,6 @@ +## v1.6.0 +- **Improvement:** Use new WaiterHelper for serviceenablement waiters + ## v1.5.3 - `v2api`: Removal of duplicated return statements in `DefaultAPIService` implementations diff --git a/services/serviceenablement/VERSION b/services/serviceenablement/VERSION index f1a2e631d..b7c0a9b1d 100644 --- a/services/serviceenablement/VERSION +++ b/services/serviceenablement/VERSION @@ -1 +1 @@ -v1.5.3 +v1.6.0 diff --git a/services/serviceenablement/v2api/wait/wait.go b/services/serviceenablement/v2api/wait/wait.go index 419ca12fd..5e49829ec 100644 --- a/services/serviceenablement/v2api/wait/wait.go +++ b/services/serviceenablement/v2api/wait/wait.go @@ -2,7 +2,7 @@ package wait import ( "context" - "fmt" + "errors" "time" "github.com/stackitcloud/stackit-sdk-go/core/wait" @@ -16,55 +16,46 @@ const ( SERVICESTATUSSTATE_DISABLING = "DISABLING" ) +// EnableServiceWaitHandler will wait for service enablement func EnableServiceWaitHandler(ctx context.Context, a serviceenablement.DefaultAPI, region, projectId, serviceId string) *wait.AsyncActionHandler[serviceenablement.ServiceStatus] { - handler := wait.New(func() (waitFinished bool, response *serviceenablement.ServiceStatus, err error) { - s, err := a.GetServiceStatusRegional(ctx, region, projectId, serviceId).Execute() - if err != nil { - return false, nil, err - } - if s == nil || s.State == nil { - return false, nil, nil - } - switch *s.State { - default: - return true, s, fmt.Errorf("service with id %s has unexpected state %s", serviceId, *s.State) - case SERVICESTATUSSTATE_ENABLED: - return true, s, nil - case SERVICESTATUSSTATE_ENABLING: - return false, nil, nil - case SERVICESTATUSSTATE_DISABLED: - return true, s, fmt.Errorf("enabling failed for service with id %s", serviceId) - case SERVICESTATUSSTATE_DISABLING: - return true, s, fmt.Errorf("service with id %s is in state %s", serviceId, *s.State) - } - }) + waitConfig := wait.WaiterHelper[serviceenablement.ServiceStatus, string]{ + FetchInstance: a.GetServiceStatusRegional(ctx, region, projectId, serviceId).Execute, + GetState: func(s *serviceenablement.ServiceStatus) (string, error) { + if s == nil { + return "", errors.New("empty response") + } + if s.State == nil { + return "", errors.New("state is missing") + } + return *s.State, nil + }, + ActiveState: []string{SERVICESTATUSSTATE_ENABLED}, + ErrorState: []string{SERVICESTATUSSTATE_DISABLED, SERVICESTATUSSTATE_DISABLING}, + } + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(45 * time.Minute).SetSleepBeforeWait(15 * time.Second) return handler } +// DisableServiceWaitHandler will wait for service disablement func DisableServiceWaitHandler(ctx context.Context, a serviceenablement.DefaultAPI, region, projectId, serviceId string) *wait.AsyncActionHandler[serviceenablement.ServiceStatus] { - handler := wait.New(func() (waitFinished bool, response *serviceenablement.ServiceStatus, err error) { - s, err := a.GetServiceStatusRegional(ctx, region, projectId, serviceId).Execute() - if err != nil { - return false, nil, err - } - if s == nil || s.State == nil { - return false, nil, nil - } - switch *s.State { - default: - return true, s, fmt.Errorf("service with id %s has unexpected state %s", serviceId, *s.State) - case SERVICESTATUSSTATE_DISABLED: - return true, s, nil - case SERVICESTATUSSTATE_DISABLING: - return false, nil, nil - case SERVICESTATUSSTATE_ENABLED: - return true, s, fmt.Errorf("disabling failed for service with id %s", serviceId) - case SERVICESTATUSSTATE_ENABLING: - return true, s, fmt.Errorf("service with id %s is in state %s", serviceId, *s.State) - } - }) + waitConfig := wait.WaiterHelper[serviceenablement.ServiceStatus, string]{ + FetchInstance: a.GetServiceStatusRegional(ctx, region, projectId, serviceId).Execute, + GetState: func(s *serviceenablement.ServiceStatus) (string, error) { + if s == nil { + return "", errors.New("empty response") + } + if s.State == nil { + return "", errors.New("status is missing") + } + return *s.State, nil + }, + ActiveState: []string{SERVICESTATUSSTATE_DISABLED}, + ErrorState: []string{SERVICESTATUSSTATE_ENABLED, SERVICESTATUSSTATE_ENABLING}, + } + + handler := wait.New(waitConfig.Wait()) handler.SetTimeout(45 * time.Minute).SetSleepBeforeWait(15 * time.Second) return handler }