Skip to content

Commit f05d5b3

Browse files
authored
feat(container): add trigger waiter (#1776)
1 parent 74eb7cf commit f05d5b3

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

api/container/v1beta1/container_helpers.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const (
1313
waitForCronDefaultTimeout = 15 * time.Minute
1414
waitForContainerDefaultTimeout = 15 * time.Minute
1515
waitForDomainDefaultTimeout = 15 * time.Minute
16+
waitForTriggerDefaultTimeout = 15 * time.Minute
1617
defaultRetryInterval = 5 * time.Second
1718
)
1819

@@ -207,3 +208,50 @@ func (s *API) WaitForDomain(req *WaitForDomainRequest, opts ...scw.RequestOption
207208

208209
return domain.(*Domain), nil
209210
}
211+
212+
// WaitForTriggerRequest waits for the Trigger to be in a ready state before returning.
213+
type WaitForTriggerRequest struct {
214+
TriggerID string
215+
Region scw.Region
216+
Timeout *time.Duration
217+
RetryInterval *time.Duration
218+
}
219+
220+
// WaitForTrigger waits for the Trigger to be in a ready state before returning.
221+
func (s *API) WaitForTrigger(req *WaitForTriggerRequest, opts ...scw.RequestOption) (*Trigger, error) {
222+
timeout := waitForTriggerDefaultTimeout
223+
if req.Timeout != nil {
224+
timeout = *req.Timeout
225+
}
226+
retryInterval := defaultRetryInterval
227+
if req.RetryInterval != nil {
228+
retryInterval = *req.RetryInterval
229+
}
230+
231+
terminalStatus := map[TriggerStatus]struct{}{
232+
TriggerStatusError: {},
233+
TriggerStatusReady: {},
234+
}
235+
236+
trigger, err := async.WaitSync(&async.WaitSyncConfig{
237+
Get: func() (interface{}, bool, error) {
238+
trigger, err := s.GetTrigger(&GetTriggerRequest{
239+
TriggerID: req.TriggerID,
240+
Region: req.Region,
241+
}, opts...)
242+
if err != nil {
243+
return nil, false, err
244+
}
245+
246+
_, isTerminal := terminalStatus[trigger.Status]
247+
return trigger, isTerminal, nil
248+
},
249+
Timeout: timeout,
250+
IntervalStrategy: async.LinearIntervalStrategy(retryInterval),
251+
})
252+
if err != nil {
253+
return nil, errors.Wrap(err, "waiting for Trigger failed")
254+
}
255+
256+
return trigger.(*Trigger), nil
257+
}

0 commit comments

Comments
 (0)