@@ -33,33 +33,20 @@ type EdgeCloudApiClient interface {
3333
3434// createOrUpdateInstanceWaitHandler contains the shared logic for waiting on instance creation or updates.
3535func createOrUpdateInstanceWaitHandler (ctx context.Context , getInstance func (ctx context.Context ) (* edge.Instance , error )) * wait.AsyncActionHandler [edge.Instance ] {
36- handler := wait .New (func () (waitFinished bool , response * edge.Instance , err error ) {
37- instance , err := getInstance (ctx )
38- if err != nil {
39- return false , nil , err
40- }
41-
42- if instance == nil || instance .Status == nil {
43- return false , nil , ErrInstanceNotFound
44- }
45- if instance == nil || instance .Status == nil {
46- return false , nil , ErrInstanceStatusUndefined
47- }
48-
49- status := * instance .Status
50- switch status {
51- case edge .INSTANCESTATUS_ACTIVE :
52- return true , instance , nil
53- case edge .INSTANCESTATUS_ERROR :
54- return true , instance , ErrInstanceCreationFailed
55- case edge .INSTANCESTATUS_RECONCILING :
56- return false , nil , nil
57- case edge .INSTANCESTATUS_DELETING :
58- return true , instance , ErrInstanceIsBeingDeleted
59- default :
60- return false , nil , nil
61- }
62- })
36+ waitConfig := wait.WaiterHelper [edge.Instance , edge.InstanceStatus ]{
37+ FetchInstance : func () (* edge.Instance , error ) {
38+ return getInstance (ctx )
39+ },
40+ GetState : func (instance * edge.Instance ) (edge.InstanceStatus , error ) {
41+ if instance == nil || instance .Status == nil {
42+ return "" , ErrInstanceNotFound
43+ }
44+ return * instance .Status , nil
45+ },
46+ ActiveState : []edge.InstanceStatus {edge .INSTANCESTATUS_ACTIVE },
47+ ErrorState : []edge.InstanceStatus {edge .INSTANCESTATUS_ERROR , edge .INSTANCESTATUS_DELETING },
48+ }
49+ handler := wait .New (waitConfig .Wait ())
6350 handler .SetTimeout (timeoutMinutes * time .Minute )
6451 return handler
6552}
@@ -80,17 +67,15 @@ func CreateOrUpdateInstanceByNameWaitHandler(ctx context.Context, a EdgeCloudApi
8067
8168// deleteInstanceWaitHandler contains the shared logic for waiting on instance deletion.
8269func deleteInstanceWaitHandler (ctx context.Context , getInstance func (ctx context.Context ) (* edge.Instance , error )) * wait.AsyncActionHandler [edge.Instance ] {
83- handler := wait .New (func () (waitFinished bool , response * edge.Instance , err error ) {
84- _ , err = getInstance (ctx )
85- if err == nil {
86- return false , nil , nil
87- }
88- var oapiErr * oapierror.GenericOpenAPIError
89- if errors .As (err , & oapiErr ) && oapiErr .StatusCode == http .StatusNotFound {
90- return true , nil , nil
91- }
92- return false , nil , err
93- })
70+ waitConfig := wait.WaiterHelper [edge.Instance , edge.InstanceStatus ]{
71+ FetchInstance : func () (* edge.Instance , error ) {
72+ return getInstance (ctx )
73+ },
74+ GetState : func (i * edge.Instance ) (edge.InstanceStatus , error ) {
75+ return "" , nil
76+ },
77+ }
78+ handler := wait .New (waitConfig .Wait ())
9479 handler .SetTimeout (timeoutMinutes * time .Minute )
9580 return handler
9681}
@@ -111,21 +96,29 @@ func DeleteInstanceByNameWaitHandler(ctx context.Context, a EdgeCloudApiClient,
11196
11297// kubeconfigWaitHandlerHelper contains the shared logic for waiting for the instance to become ready before retrieving the kubeconfig.
11398func kubeconfigWaitHandlerHelper (ctx context.Context , checkInstance func (ctx context.Context ) error , getKubeconfig func (ctx context.Context ) (* edge.Kubeconfig , error )) * wait.AsyncActionHandler [edge.Kubeconfig ] {
114- handler := wait .New (func () (waitFinished bool , response * edge.Kubeconfig , err error ) {
115- err = checkInstance (ctx )
116- if err != nil {
117- return false , nil , err
118- }
119- kubeconfig , err := getKubeconfig (ctx )
120- var oapiErr * oapierror.GenericOpenAPIError
121- if err != nil {
122- if errors .As (err , & oapiErr ) && oapiErr .StatusCode == http .StatusNotFound {
123- return false , nil , nil
99+ waitConfig := wait.WaiterHelper [edge.Kubeconfig , string ]{
100+ FetchInstance : func () (* edge.Kubeconfig , error ) {
101+ err := checkInstance (ctx )
102+ if err != nil {
103+ return nil , err
124104 }
125- return false , nil , err
126- }
127- return true , kubeconfig , nil
128- })
105+ config , err := getKubeconfig (ctx )
106+ if err != nil {
107+ if apiErr , ok := errors.AsType [* oapierror.GenericOpenAPIError ](err ); ok && apiErr .StatusCode == http .StatusNotFound {
108+ return nil , nil
109+ }
110+ }
111+ return config , err
112+ },
113+ GetState : func (k * edge.Kubeconfig ) (string , error ) {
114+ if k == nil {
115+ return "NOT_READY" , nil
116+ }
117+ return "READY" , nil
118+ },
119+ ActiveState : []string {"READY" },
120+ }
121+ handler := wait .New (waitConfig .Wait ())
129122 handler .SetTimeout (timeoutMinutes * time .Minute )
130123 return handler
131124}
@@ -164,21 +157,29 @@ func KubeconfigByInstanceNameWaitHandler(ctx context.Context, a EdgeCloudApiClie
164157
165158// tokenWaitHandlerHelper contains the shared logic for waiting for the instance to become ready before retrieving the service token.
166159func tokenWaitHandlerHelper (ctx context.Context , checkInstance func (ctx context.Context ) error , getToken func (ctx context.Context ) (* edge.Token , error )) * wait.AsyncActionHandler [edge.Token ] {
167- handler := wait .New (func () (waitFinished bool , response * edge.Token , err error ) {
168- err = checkInstance (ctx )
169- if err != nil {
170- return false , nil , err
171- }
172- token , err := getToken (ctx )
173- var oapiErr * oapierror.GenericOpenAPIError
174- if err != nil {
175- if errors .As (err , & oapiErr ) && oapiErr .StatusCode == http .StatusNotFound {
176- return false , nil , nil
160+ waitConfig := wait.WaiterHelper [edge.Token , string ]{
161+ FetchInstance : func () (* edge.Token , error ) {
162+ err := checkInstance (ctx )
163+ if err != nil {
164+ return nil , err
177165 }
178- return false , nil , err
179- }
180- return true , token , nil
181- })
166+ token , err := getToken (ctx )
167+ if err != nil {
168+ if apiErr , ok := errors.AsType [* oapierror.GenericOpenAPIError ](err ); ok && apiErr .StatusCode == http .StatusNotFound {
169+ return nil , nil
170+ }
171+ }
172+ return token , err
173+ },
174+ GetState : func (t * edge.Token ) (string , error ) {
175+ if t == nil {
176+ return "NOT_READY" , nil
177+ }
178+ return "READY" , nil
179+ },
180+ ActiveState : []string {"READY" },
181+ }
182+ handler := wait .New (waitConfig .Wait ())
182183 handler .SetTimeout (timeoutMinutes * time .Minute )
183184 return handler
184185}
0 commit comments