@@ -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