github.com/adamar/terraform@v0.2.2-0.20141016210445-2e703afdad0e/helper/resource/wait.go (about)

     1  package resource
     2  
     3  import (
     4  	"time"
     5  )
     6  
     7  // RetryFunc is the function retried until it succeeds.
     8  type RetryFunc func() error
     9  
    10  // Retry is a basic wrapper around StateChangeConf that will just retry
    11  // a function until it no longer returns an error.
    12  func Retry(timeout time.Duration, f RetryFunc) error {
    13  	var err error
    14  	c := &StateChangeConf{
    15  		Pending:    []string{"error"},
    16  		Target:     "success",
    17  		Timeout:    timeout,
    18  		MinTimeout: 500 * time.Millisecond,
    19  		Refresh: func() (interface{}, string, error) {
    20  			err = f()
    21  			if err != nil {
    22  				return 42, "error", nil
    23  			}
    24  
    25  			return 42, "success", nil
    26  		},
    27  	}
    28  
    29  	c.WaitForState()
    30  	return err
    31  }