Skip to content

Commit

Permalink
Merge pull request #4823 from hashicorp/phinze/heroku-drain-poll
Browse files Browse the repository at this point in the history
provider/heroku: retry drain create until log channel is assigned
  • Loading branch information
phinze committed Jan 25, 2016
2 parents 5f8b0e8 + b537e5e commit 7784fbf
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion builtin/providers/heroku/resource_heroku_drain.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package heroku
import (
"fmt"
"log"
"strings"
"time"

"github.com/cyberdelia/heroku-go/v3"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
)

Expand Down Expand Up @@ -35,6 +38,8 @@ func resourceHerokuDrain() *schema.Resource {
}
}

const retryableError = `App hasn't yet been assigned a log channel. Please try again momentarily.`

func resourceHerokuDrainCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*heroku.Service)

Expand All @@ -43,7 +48,18 @@ func resourceHerokuDrainCreate(d *schema.ResourceData, meta interface{}) error {

log.Printf("[DEBUG] Drain create configuration: %#v, %#v", app, url)

dr, err := client.LogDrainCreate(app, heroku.LogDrainCreateOpts{url})
var dr *heroku.LogDrain
err := resource.Retry(2*time.Minute, func() error {
d, err := client.LogDrainCreate(app, heroku.LogDrainCreateOpts{url})
if err != nil {
if strings.Contains(err.Error(), retryableError) {
return err
}
return resource.RetryError{Err: err}
}
dr = d
return nil
})
if err != nil {
return err
}
Expand Down

0 comments on commit 7784fbf

Please sign in to comment.