github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/wafregionl_token_handlers.go (about) 1 package aws 2 3 import ( 4 "time" 5 6 "github.com/aws/aws-sdk-go/aws/awserr" 7 "github.com/aws/aws-sdk-go/service/waf" 8 "github.com/aws/aws-sdk-go/service/wafregional" 9 "github.com/hashicorp/errwrap" 10 "github.com/hashicorp/terraform/helper/resource" 11 ) 12 13 type WafRegionalRetryer struct { 14 Connection *wafregional.WAFRegional 15 Region string 16 } 17 18 type withRegionalTokenFunc func(token *string) (interface{}, error) 19 20 func (t *WafRegionalRetryer) RetryWithToken(f withRegionalTokenFunc) (interface{}, error) { 21 awsMutexKV.Lock(t.Region) 22 defer awsMutexKV.Unlock(t.Region) 23 24 var out interface{} 25 err := resource.Retry(15*time.Minute, func() *resource.RetryError { 26 var err error 27 var tokenOut *waf.GetChangeTokenOutput 28 29 tokenOut, err = t.Connection.GetChangeToken(&waf.GetChangeTokenInput{}) 30 if err != nil { 31 return resource.NonRetryableError(errwrap.Wrapf("Failed to acquire change token: {{err}}", err)) 32 } 33 34 out, err = f(tokenOut.ChangeToken) 35 if err != nil { 36 awsErr, ok := err.(awserr.Error) 37 if ok && awsErr.Code() == "WAFStaleDataException" { 38 return resource.RetryableError(err) 39 } 40 return resource.NonRetryableError(err) 41 } 42 return nil 43 }) 44 45 return out, err 46 } 47 48 func newWafRegionalRetryer(conn *wafregional.WAFRegional, region string) *WafRegionalRetryer { 49 return &WafRegionalRetryer{Connection: conn, Region: region} 50 }