Skip to content

Commit c0d131e

Browse files
committed
refac(kms) migrate to new WaiterHelper
STACKITSDK-376
1 parent 8c427a9 commit c0d131e

7 files changed

Lines changed: 154 additions & 247 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@
153153
- **Dependencies:** Bump STACKIT SDK core module from `v0.25.0` to `v0.26.0`
154154
- [v1.8.0](services/kms/CHANGELOG.md#v180)
155155
- **Feature:** Added `_UNKNOWN_DEFAULT_OPEN_API` fallback value to all enums to handle unknown API values gracefully.
156+
- [v1.9.0](services/kms/CHANGELOG.md#v190)
157+
- **Improvement:** Use new WaitHandler struct for all wait handlers
156158
- `lbapplication`:
157159
- [v0.5.7](services/lbapplication/CHANGELOG.md#v057)
158160
- **Dependencies:** Bump STACKIT SDK core module from `v0.24.0` to `v0.24.1`

services/kms/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## v1.9.0
2+
- **Improvement:** Use new WaitHandler struct for all wait handlers
3+
14
## v1.8.0
25
- **Feature:** Added `_UNKNOWN_DEFAULT_OPEN_API` fallback value to all enums to handle unknown API values gracefully.
36

services/kms/VERSION

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

services/kms/v1api/wait/wait.go

Lines changed: 60 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ package wait
33
import (
44
"context"
55
"errors"
6-
"fmt"
76
"net/http"
87
"time"
98

10-
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
119
"github.com/stackitcloud/stackit-sdk-go/core/wait"
1210
kms "github.com/stackitcloud/stackit-sdk-go/services/kms/v1api"
1311
)
@@ -39,149 +37,96 @@ const (
3937
)
4038

4139
func CreateKeyRingWaitHandler(ctx context.Context, client kms.DefaultAPI, projectId, region, keyRingId string) *wait.AsyncActionHandler[kms.KeyRing] {
42-
handler := wait.New(func() (bool, *kms.KeyRing, error) {
43-
response, err := client.GetKeyRing(ctx, projectId, region, keyRingId).Execute()
44-
if err != nil {
45-
return false, nil, err
46-
}
47-
48-
if response != nil {
49-
switch response.State {
50-
case KEYRINGSTATE_CREATING:
51-
return false, nil, nil
52-
default:
53-
return true, response, nil
40+
waitConfig := wait.WaiterHelper[kms.KeyRing, string]{
41+
FetchInstance: client.GetKeyRing(ctx, projectId, region, keyRingId).Execute,
42+
GetState: func(d *kms.KeyRing) (string, error) {
43+
if d == nil || d.State == "" {
44+
return "", errors.New("keyring or state is nil")
5445
}
55-
}
56-
57-
return false, nil, nil
58-
})
46+
return d.State, nil
47+
},
48+
ActiveState: []string{KEYRINGSTATE_ACTIVE, KEYRINGSTATE_DELETED},
49+
}
50+
handler := wait.New(waitConfig.Wait())
5951
handler.SetTimeout(10 * time.Minute)
6052
return handler
6153
}
6254

6355
func CreateOrUpdateKeyWaitHandler(ctx context.Context, client kms.DefaultAPI, projectId, region, keyRingId, keyId string) *wait.AsyncActionHandler[kms.Key] {
64-
handler := wait.New(func() (bool, *kms.Key, error) {
65-
response, err := client.GetKey(ctx, projectId, region, keyRingId, keyId).Execute()
66-
if err != nil {
67-
return false, nil, err
68-
}
69-
70-
if response != nil {
71-
switch response.State {
72-
case KEYSTATE_CREATING:
73-
return false, nil, nil
74-
default:
75-
return true, response, nil
56+
waitConfig := wait.WaiterHelper[kms.Key, string]{
57+
FetchInstance: client.GetKey(ctx, projectId, region, keyRingId, keyId).Execute,
58+
GetState: func(d *kms.Key) (string, error) {
59+
if d == nil || d.State == "" {
60+
return "", errors.New("key or state is nil")
7661
}
77-
}
78-
79-
return false, nil, nil
80-
})
62+
return d.State, nil
63+
},
64+
ActiveState: []string{KEYSTATE_ACTIVE, KEYSTATE_DELETED},
65+
}
66+
handler := wait.New(waitConfig.Wait())
8167
handler.SetTimeout(10 * time.Minute)
8268
return handler
8369
}
8470

8571
func DeleteKeyWaitHandler(ctx context.Context, client kms.DefaultAPI, projectId, region, keyRingId, keyId string) *wait.AsyncActionHandler[kms.Key] {
86-
handler := wait.New(func() (bool, *kms.Key, error) {
87-
_, err := client.GetKey(ctx, projectId, region, keyRingId, keyId).Execute()
88-
if err != nil {
89-
var apiErr *oapierror.GenericOpenAPIError
90-
if errors.As(err, &apiErr) {
91-
if statusCode := apiErr.StatusCode; statusCode == http.StatusNotFound || statusCode == http.StatusGone {
92-
return true, nil, nil
93-
}
94-
}
95-
return true, nil, err
96-
}
97-
return false, nil, nil
98-
})
72+
waitConfig := wait.WaiterHelper[kms.Key, string]{
73+
FetchInstance: client.GetKey(ctx, projectId, region, keyRingId, keyId).Execute,
74+
GetState: func(d *kms.Key) (string, error) {
75+
return "", nil
76+
},
77+
DeleteHttpErrorStatusCodes: []int{http.StatusNotFound, http.StatusGone},
78+
}
79+
handler := wait.New(waitConfig.Wait())
9980
handler.SetTimeout(10 * time.Minute)
10081
return handler
10182
}
10283

10384
func EnableKeyVersionWaitHandler(ctx context.Context, client kms.DefaultAPI, projectId, region, keyRingId, keyId string, version int64) *wait.AsyncActionHandler[kms.Version] {
104-
handler := wait.New(func() (bool, *kms.Version, error) {
105-
response, err := client.GetVersion(ctx, projectId, region, keyRingId, keyId, version).Execute()
106-
if err != nil {
107-
var apiErr *oapierror.GenericOpenAPIError
108-
if errors.As(err, &apiErr) {
109-
if statusCode := apiErr.StatusCode; statusCode == http.StatusNotFound || statusCode == http.StatusGone {
110-
return true, nil, fmt.Errorf("enabling failed for key %s version %d: version or key not found", keyId, version)
111-
}
112-
}
113-
return false, nil, err
114-
}
115-
116-
if response != nil {
117-
switch response.State {
118-
case VERSIONSTATE_ACTIVE:
119-
return true, response, nil
120-
case VERSIONSTATE_CREATING:
121-
return false, nil, nil
122-
case VERSIONSTATE_DESTROYED, VERSIONSTATE_KEY_MATERIAL_INVALID:
123-
return true, response, fmt.Errorf("enabling failed for key %s version %d: state %s", keyId, version, response.State)
124-
default:
125-
return true, response, fmt.Errorf("key version %d for key %s has unexpected state %s", version, keyId, response.State)
85+
waitConfig := wait.WaiterHelper[kms.Version, string]{
86+
FetchInstance: client.GetVersion(ctx, projectId, region, keyRingId, keyId, version).Execute,
87+
GetState: func(d *kms.Version) (string, error) {
88+
if d == nil || d.State == "" {
89+
return "", errors.New("version or state is nil")
12690
}
127-
}
128-
129-
return false, nil, nil
130-
})
91+
return d.State, nil
92+
},
93+
ActiveState: []string{VERSIONSTATE_ACTIVE},
94+
ErrorState: []string{VERSIONSTATE_DESTROYED, VERSIONSTATE_KEY_MATERIAL_INVALID, VERSIONSTATE_DISABLED, VERSIONSTATE_KEY_MATERIAL_UNAVAILABLE},
95+
}
96+
handler := wait.New(waitConfig.Wait())
13197
handler.SetTimeout(10 * time.Minute)
13298
return handler
13399
}
134100

135101
func DisableKeyVersionWaitHandler(ctx context.Context, client kms.DefaultAPI, projectId, region, keyRingId, keyId string, version int64) *wait.AsyncActionHandler[kms.Version] {
136-
handler := wait.New(func() (bool, *kms.Version, error) {
137-
response, err := client.GetVersion(ctx, projectId, region, keyRingId, keyId, version).Execute()
138-
if err != nil {
139-
var apiErr *oapierror.GenericOpenAPIError
140-
if errors.As(err, &apiErr) {
141-
if statusCode := apiErr.StatusCode; statusCode == http.StatusNotFound || statusCode == http.StatusGone {
142-
return true, nil, fmt.Errorf("disabling failed for key %s version %d: version or key not found", keyId, version)
143-
}
144-
}
145-
return false, nil, err
146-
}
147-
148-
if response != nil {
149-
switch response.State {
150-
case VERSIONSTATE_DISABLED:
151-
return true, response, nil
152-
case VERSIONSTATE_ACTIVE, VERSIONSTATE_CREATING, VERSIONSTATE_KEY_MATERIAL_UNAVAILABLE:
153-
return false, nil, nil
154-
case VERSIONSTATE_DESTROYED, VERSIONSTATE_KEY_MATERIAL_INVALID:
155-
return true, response, fmt.Errorf("disabling failed for key %s version %d: state %s", keyId, version, response.State)
156-
default:
157-
return true, response, fmt.Errorf("key version %d for key %s has unexpected state %s", version, keyId, response.State)
102+
waitConfig := wait.WaiterHelper[kms.Version, string]{
103+
FetchInstance: client.GetVersion(ctx, projectId, region, keyRingId, keyId, version).Execute,
104+
GetState: func(d *kms.Version) (string, error) {
105+
if d == nil || d.State == "" {
106+
return "", errors.New("version or state is nil")
158107
}
159-
}
160-
161-
return false, nil, nil
162-
})
108+
return d.State, nil
109+
},
110+
ActiveState: []string{VERSIONSTATE_DISABLED},
111+
ErrorState: []string{VERSIONSTATE_DESTROYED, VERSIONSTATE_KEY_MATERIAL_INVALID},
112+
}
113+
handler := wait.New(waitConfig.Wait())
163114
handler.SetTimeout(10 * time.Minute)
164115
return handler
165116
}
166117

167118
func CreateWrappingKeyWaitHandler(ctx context.Context, client kms.DefaultAPI, projectId, region, keyRingId, wrappingKeyId string) *wait.AsyncActionHandler[kms.WrappingKey] {
168-
handler := wait.New(func() (bool, *kms.WrappingKey, error) {
169-
response, err := client.GetWrappingKey(ctx, projectId, region, keyRingId, wrappingKeyId).Execute()
170-
if err != nil {
171-
return false, nil, err
172-
}
173-
174-
if response != nil {
175-
switch response.State {
176-
case WRAPPINGKEYSTATE_CREATING:
177-
return false, nil, nil
178-
default:
179-
return true, response, nil
119+
waitConfig := wait.WaiterHelper[kms.WrappingKey, string]{
120+
FetchInstance: client.GetWrappingKey(ctx, projectId, region, keyRingId, wrappingKeyId).Execute,
121+
GetState: func(d *kms.WrappingKey) (string, error) {
122+
if d == nil || d.State == "" {
123+
return "", errors.New("wrappingkey or state is nil")
180124
}
181-
}
182-
183-
return false, nil, nil
184-
})
125+
return d.State, nil
126+
},
127+
ActiveState: []string{WRAPPINGKEYSTATE_ACTIVE, WRAPPINGKEYSTATE_DELETED},
128+
}
129+
handler := wait.New(waitConfig.Wait())
185130
handler.SetTimeout(10 * time.Minute)
186131
return handler
187132
}

services/kms/v1api/wait/wait_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ func TestCreateKeyRingWaitHandler(t *testing.T) {
191191
responses: []keyRingResponse{
192192
{fixtureKeyRing("bogus"), nil},
193193
},
194-
want: fixtureKeyRing("bogus"),
195-
wantErr: false,
194+
want: nil,
195+
wantErr: true,
196196
},
197197
}
198198
for _, tt := range tests {
@@ -267,8 +267,8 @@ func TestCreateOrUpdateKeyWaitHandler(t *testing.T) {
267267
[]keyResponse{
268268
{fixtureKey("bogus"), nil},
269269
},
270-
fixtureKey("bogus"),
271-
false,
270+
nil,
271+
true,
272272
},
273273
// no special update tests needed as the states are the same
274274
}
@@ -432,7 +432,7 @@ func TestEnableKeyVersionWaitHandler(t *testing.T) {
432432
[]versionResponse{
433433
{fixtureVersion(1, false, "bogus"), nil},
434434
},
435-
fixtureVersion(1, false, "bogus"),
435+
nil,
436436
true,
437437
},
438438
{
@@ -666,8 +666,8 @@ func TestCreateWrappingWaitHandler(t *testing.T) {
666666
[]wrappingKeyResponse{
667667
{fixtureWrappingKey("bogus"), nil},
668668
},
669-
fixtureWrappingKey("bogus"),
670-
false,
669+
nil,
670+
true,
671671
},
672672
// no special update tests needed as the states are the same
673673
}

0 commit comments

Comments
 (0)