Skip to content

Commit

Permalink
Merge pull request #1062 from hashicorp/configure-wait-checks
Browse files Browse the repository at this point in the history
providers/digitalocean: Configure wait checks
  • Loading branch information
pearkes committed Feb 26, 2015
2 parents c21c766 + 8ab4d37 commit 5c74a63
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,11 @@ func WaitForDropletAttribute(
Timeout: 60 * time.Minute,
Delay: 10 * time.Second,
MinTimeout: 3 * time.Second,

// This is a hack around DO API strangeness.
// https://github.com/hashicorp/terraform/issues/481
//
NotFoundChecks: 60,
}

return stateConf.WaitForState()
Expand Down
20 changes: 13 additions & 7 deletions helper/resource/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@ type StateRefreshFunc func() (result interface{}, state string, err error)

// StateChangeConf is the configuration struct used for `WaitForState`.
type StateChangeConf struct {
Delay time.Duration // Wait this time before starting checks
Pending []string // States that are "allowed" and will continue trying
Refresh StateRefreshFunc // Refreshes the current state
Target string // Target state
Timeout time.Duration // The amount of time to wait before timeout
MinTimeout time.Duration // Smallest time to wait before refreshes
Delay time.Duration // Wait this time before starting checks
Pending []string // States that are "allowed" and will continue trying
Refresh StateRefreshFunc // Refreshes the current state
Target string // Target state
Timeout time.Duration // The amount of time to wait before timeout
MinTimeout time.Duration // Smallest time to wait before refreshes
NotFoundChecks int // Number of times to allow not found
}

// WaitForState watches an object and waits for it to achieve the state
Expand All @@ -38,6 +39,11 @@ func (conf *StateChangeConf) WaitForState() (interface{}, error) {

notfoundTick := 0

// Set a default for times to check for not found
if conf.NotFoundChecks == 0 {
conf.NotFoundChecks = 20
}

var result interface{}
var resulterr error

Expand Down Expand Up @@ -78,7 +84,7 @@ func (conf *StateChangeConf) WaitForState() (interface{}, error) {
// If we didn't find the resource, check if we have been
// not finding it for awhile, and if so, report an error.
notfoundTick += 1
if notfoundTick > 20 {
if notfoundTick > conf.NotFoundChecks {
resulterr = errors.New("couldn't find resource")
return
}
Expand Down

0 comments on commit 5c74a63

Please sign in to comment.