@@ -3,11 +3,9 @@ package wait
33import (
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
4139func 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
6355func 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 , KEYSTATE_NO_VERSION , KEYSTATE_ERRORS_EXIST , KEYSTATE_NOT_AVAILABLE },
65+ }
66+ handler := wait .New (waitConfig .Wait ())
8167 handler .SetTimeout (10 * time .Minute )
8268 return handler
8369}
8470
8571func 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 (_ * 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
10384func 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
135101func 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
167118func 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}
0 commit comments