blob: f709dc0aa79f14b64379dc8ca55563954b517162 [file] [log] [blame] [edit]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package remote
import (
"context"
"log"
"time"
)
// IntegrationContext is a set of data that is useful when performing HCP Terraform integration operations
type IntegrationContext struct {
StopContext context.Context
CancelContext context.Context
}
func (s *IntegrationContext) Poll(backoffMinInterval float64, backoffMaxInterval float64, every func(i int) (bool, error)) error {
for i := 0; ; i++ {
select {
case <-s.StopContext.Done():
log.Print("IntegrationContext.Poll: StopContext.Done() called")
return s.StopContext.Err()
case <-s.CancelContext.Done():
log.Print("IntegrationContext.Poll: CancelContext.Done() called")
return s.CancelContext.Err()
case <-time.After(backoff(backoffMinInterval, backoffMaxInterval, i)):
// blocks for a time between min and max
}
cont, err := every(i)
if !cont {
return err
}
}
}