Skip to content

Commit dae21f6

Browse files
authored
Merge branch 'main' into oas-bot-26637292884/certificates
2 parents 4965d8b + 4073b53 commit dae21f6

8 files changed

Lines changed: 176 additions & 221 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,8 @@
295295
- **Dependencies:** Bump STACKIT SDK core module from `v0.25.0` to `v0.26.0`
296296
- [v1.9.0](services/mongodbflex/CHANGELOG.md#v190)
297297
- **Feature:** Introduce enums for various attributes
298+
- [v1.10.0](services/mongodbflex/CHANGELOG.md#v183)
299+
- **Improvement:** Use new WaiterHelper for mongodbflex
298300
- `objectstorage`:
299301
- [v1.7.2](services/objectstorage/CHANGELOG.md#v172)
300302
- **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1`
@@ -495,6 +497,8 @@
495497
- **Breaking change:** Change type from `*string` to `NullableString` of field `SnapshotPolicyId` in model `UpdateResourcePoolPayload`
496498
- [v0.10.1](services/sfs/CHANGELOG.md#v0101)
497499
- **Docs:** Extend docs of `SnaplockRetentionHours`, `Count`, `RetentionCount`
500+
- [v0.11.0](services/sfs/CHANGELOG.md#v0100)
501+
- **Improvement:** Use new WaiterHelper for SFS waiters
498502
- `ske`:
499503
- [v1.11.2](services/ske/CHANGELOG.md#v1112)
500504
- **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1`

services/mongodbflex/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## v1.10.0
2+
- **Improvement:** Use new WaiterHelper for mongodbflex
3+
14
## v1.9.0
25
- **Feature:** Introduce enums for various attributes
36

services/mongodbflex/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.9.0
1+
v1.10.0

services/mongodbflex/v2api/wait/wait.go

Lines changed: 80 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ package wait
22

33
import (
44
"context"
5-
"fmt"
6-
"net/http"
5+
"errors"
76
"sort"
87
"time"
98

10-
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
119
"github.com/stackitcloud/stackit-sdk-go/core/wait"
1210
mongodbflex "github.com/stackitcloud/stackit-sdk-go/services/mongodbflex/v2api"
1311
)
@@ -37,29 +35,15 @@ const (
3735

3836
// CreateInstanceWaitHandler will wait for instance creation
3937
func CreateInstanceWaitHandler(ctx context.Context, a mongodbflex.DefaultAPI, projectId, instanceId, region string) *wait.AsyncActionHandler[mongodbflex.InstanceResponse] {
40-
handler := wait.New(func() (waitFinished bool, response *mongodbflex.InstanceResponse, err error) {
41-
s, err := a.GetInstance(ctx, projectId, instanceId, region).Execute()
42-
if err != nil {
43-
return false, nil, err
44-
}
45-
if s == nil || s.Item == nil || s.Item.Id == nil || *s.Item.Id != instanceId || s.Item.Status == nil {
46-
return false, nil, nil
47-
}
48-
switch *s.Item.Status {
49-
default:
50-
return true, s, fmt.Errorf("instance with id %s has unexpected status %s", instanceId, *s.Item.Status)
51-
case "":
52-
return false, nil, nil
53-
case mongodbflex.INSTANCESTATUS_PROCESSING:
54-
return false, nil, nil
55-
case mongodbflex.INSTANCESTATUS_UNKNOWN:
56-
return false, nil, nil
57-
case mongodbflex.INSTANCESTATUS_READY:
58-
return true, s, nil
59-
case mongodbflex.INSTANCESTATUS_FAILED:
60-
return true, s, fmt.Errorf("create failed for instance with id %s", instanceId)
61-
}
62-
})
38+
waitConfig := wait.WaiterHelper[mongodbflex.InstanceResponse, mongodbflex.InstanceStatus]{
39+
FetchInstance: a.GetInstance(ctx, projectId, instanceId, region).Execute,
40+
GetState: getStateInstance,
41+
ActiveState: []mongodbflex.InstanceStatus{mongodbflex.INSTANCESTATUS_READY},
42+
ErrorState: []mongodbflex.InstanceStatus{mongodbflex.INSTANCESTATUS_FAILED},
43+
}
44+
45+
handler := wait.New(waitConfig.Wait())
46+
6347
handler.SetTimeout(45 * time.Minute)
6448
handler.SetSleepBeforeWait(5 * time.Second)
6549
return handler
@@ -71,74 +55,53 @@ func CloneInstanceWaitHandler(ctx context.Context, a mongodbflex.DefaultAPI, pro
7155
}
7256

7357
func RestoreInstanceWaitHandler(ctx context.Context, a mongodbflex.DefaultAPI, projectId, instanceId, backupId, region string) *wait.AsyncActionHandler[mongodbflex.ListRestoreJobsResponse] {
74-
handler := wait.New(func() (waitFinished bool, response *mongodbflex.ListRestoreJobsResponse, err error) {
75-
s, err := a.ListRestoreJobs(ctx, projectId, instanceId, region).Execute()
76-
if err != nil {
77-
return false, nil, err
78-
}
79-
if s == nil || s.Items == nil {
80-
return false, nil, nil
81-
}
82-
83-
restoreJobsSlice := s.Items
84-
85-
// sort array by descending date
86-
sort.Slice(restoreJobsSlice, func(i, j int) bool {
87-
// swap elements to sort by descending order
88-
return *restoreJobsSlice[i].Date > *restoreJobsSlice[j].Date
89-
})
90-
91-
var status string
92-
for _, restoreJob := range restoreJobsSlice {
93-
if *restoreJob.BackupID == backupId {
94-
status = *restoreJob.Status
95-
break
58+
waitConfig := wait.WaiterHelper[mongodbflex.ListRestoreJobsResponse, string]{
59+
FetchInstance: a.ListRestoreJobs(ctx, projectId, instanceId, region).Execute,
60+
GetState: func(response *mongodbflex.ListRestoreJobsResponse) (string, error) {
61+
if response == nil {
62+
return "", errors.New("response is nil")
9663
}
97-
}
98-
99-
switch status {
100-
default:
101-
return true, s, fmt.Errorf("restore job for backup with id %s has unexpected status %s", backupId, status)
102-
case RestoreJobProcessing:
103-
return false, nil, nil
104-
case RestoreJobFinished:
105-
return true, s, nil
106-
case RestoreJobBroken:
107-
return true, s, fmt.Errorf("restore job for backup with id %s is broken", backupId)
108-
case RestoreJobKilled:
109-
return true, s, fmt.Errorf("restore job for backup with id %s was killed", backupId)
110-
}
111-
})
64+
if len(response.Items) == 0 {
65+
return "", errors.New("response items is empty")
66+
}
67+
restoreJobsSlice := response.Items
68+
// sort array by descending date
69+
sort.Slice(restoreJobsSlice, func(i, j int) bool {
70+
// swap elements to sort by descending order
71+
return *restoreJobsSlice[i].Date > *restoreJobsSlice[j].Date
72+
})
73+
74+
var status string
75+
for _, restoreJob := range restoreJobsSlice {
76+
if *restoreJob.BackupID == backupId {
77+
status = *restoreJob.Status
78+
break
79+
}
80+
}
81+
return status, nil
82+
},
83+
ActiveState: []string{RestoreJobFinished},
84+
ErrorState: []string{RestoreJobKilled, RestoreJobBroken},
85+
}
86+
87+
handler := wait.New(waitConfig.Wait())
88+
11289
handler.SetTimeout(45 * time.Minute)
11390
handler.SetSleepBeforeWait(5 * time.Second)
11491
return handler
11592
}
11693

11794
// UpdateInstanceWaitHandler will wait for instance update
11895
func UpdateInstanceWaitHandler(ctx context.Context, a mongodbflex.DefaultAPI, projectId, instanceId, region string) *wait.AsyncActionHandler[mongodbflex.InstanceResponse] {
119-
handler := wait.New(func() (waitFinished bool, response *mongodbflex.InstanceResponse, err error) {
120-
s, err := a.GetInstance(ctx, projectId, instanceId, region).Execute()
121-
if err != nil {
122-
return false, nil, err
123-
}
124-
if s == nil || s.Item == nil || s.Item.Id == nil || *s.Item.Id != instanceId || s.Item.Status == nil {
125-
return false, nil, nil
126-
}
127-
switch *s.Item.Status {
128-
default:
129-
return true, s, fmt.Errorf("instance with id %s has unexpected status %s", instanceId, *s.Item.Status)
130-
case "":
131-
return false, nil, nil
132-
case mongodbflex.INSTANCESTATUS_PROCESSING:
133-
return false, nil, nil
134-
case mongodbflex.INSTANCESTATUS_UNKNOWN:
135-
return false, nil, nil
136-
case mongodbflex.INSTANCESTATUS_READY:
137-
return true, s, nil
138-
case mongodbflex.INSTANCESTATUS_FAILED:
139-
return true, s, fmt.Errorf("update failed for instance with id %s", instanceId)
140-
}
141-
})
96+
waitConfig := wait.WaiterHelper[mongodbflex.InstanceResponse, mongodbflex.InstanceStatus]{
97+
FetchInstance: a.GetInstance(ctx, projectId, instanceId, region).Execute,
98+
GetState: getStateInstance,
99+
ActiveState: []mongodbflex.InstanceStatus{mongodbflex.INSTANCESTATUS_READY},
100+
ErrorState: []mongodbflex.InstanceStatus{mongodbflex.INSTANCESTATUS_FAILED},
101+
}
102+
103+
handler := wait.New(waitConfig.Wait())
104+
142105
handler.SetTimeout(45 * time.Minute)
143106
return handler
144107
}
@@ -150,20 +113,37 @@ func PartialUpdateInstanceWaitHandler(ctx context.Context, a mongodbflex.Default
150113

151114
// DeleteInstanceWaitHandler will wait for instance deletion
152115
func DeleteInstanceWaitHandler(ctx context.Context, a mongodbflex.DefaultAPI, projectId, instanceId, region string) *wait.AsyncActionHandler[struct{}] {
153-
handler := wait.New(func() (waitFinished bool, response *struct{}, err error) {
154-
_, err = a.GetInstance(ctx, projectId, instanceId, region).Execute()
155-
if err == nil {
156-
return false, nil, nil
157-
}
158-
oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped
159-
if !ok {
160-
return false, nil, fmt.Errorf("could not convert error to oapierror.GenericOpenAPIError")
161-
}
162-
if oapiErr.StatusCode != http.StatusNotFound {
163-
return false, nil, err
164-
}
165-
return true, nil, nil
166-
})
116+
w := wait.WaiterHelper[mongodbflex.InstanceResponse, mongodbflex.InstanceStatus]{
117+
FetchInstance: a.GetInstance(ctx, projectId, instanceId, region).Execute,
118+
GetState: getStateInstance,
119+
ActiveState: []mongodbflex.InstanceStatus{},
120+
ErrorState: []mongodbflex.InstanceStatus{mongodbflex.INSTANCESTATUS_FAILED},
121+
}
122+
123+
// adapter for adhering to the wait helper type schema
124+
genericCheck := w.Wait()
125+
adaptedCheck := func() (waitFinished bool, response *struct{}, err error) {
126+
finished, _, err := genericCheck()
127+
return finished, nil, err
128+
}
129+
130+
handler := wait.New(adaptedCheck)
167131
handler.SetTimeout(15 * time.Minute)
168132
return handler
169133
}
134+
135+
func getStateInstance(response *mongodbflex.InstanceResponse) (mongodbflex.InstanceStatus, error) {
136+
if response == nil {
137+
return "", errors.New("empty response")
138+
}
139+
if response.Item == nil {
140+
return "", errors.New("empty items")
141+
}
142+
if response.Item.Id == nil {
143+
return "", errors.New("empty item id")
144+
}
145+
if response.Item.Status == nil {
146+
return "", errors.New("empty item status")
147+
}
148+
return *response.Item.Status, nil
149+
}

services/sfs/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## v0.11.0
2+
- **Improvement:** Use new WaiterHelper for SFS waiters
3+
14
## v0.10.1
25
- **Docs:** Extend docs of `SnaplockRetentionHours`, `Count`, `RetentionCount`
36

services/sfs/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v0.10.1
1+
v0.11.0

0 commit comments

Comments
 (0)