Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Retry datasources on error #287

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 30 additions & 16 deletions pagerduty/data_source_pagerduty_business_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package pagerduty
import (
"fmt"
"log"
"time"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/heimweh/go-pagerduty/pagerduty"
)
Expand All @@ -28,26 +30,38 @@ func dataSourcePagerDutyBusinessServiceRead(d *schema.ResourceData, meta interfa

searchName := d.Get("name").(string)

resp, _, err := client.BusinessServices.List()
if err != nil {
return err
}
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.BusinessServices.List()
if err != nil {
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.BusinessService
var found *pagerduty.BusinessService

for _, businessService := range resp.BusinessServices {
if businessService.Name == searchName {
found = businessService
break
for _, businessService := range resp.BusinessServices {
if businessService.Name == searchName {
found = businessService
break
}
}
}

if found == nil {
return fmt.Errorf("Unable to locate any business service with the name: %s", searchName)
}
if found == nil {
return resource.NonRetryableError(
fmt.Errorf("Unable to locate any business service with the name: %s", searchName),
)
}

d.SetId(found.ID)
d.Set("name", found.Name)

d.SetId(found.ID)
d.Set("name", found.Name)
return nil
})

return nil
}
10 changes: 8 additions & 2 deletions pagerduty/data_source_pagerduty_escalation_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,14 @@ func dataSourcePagerDutyEscalationPolicyRead(d *schema.ResourceData, meta interf
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.EscalationPolicies.List(o)
if err != nil {
time.Sleep(2 * time.Second)
return resource.RetryableError(err)
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.EscalationPolicy
Expand Down
10 changes: 8 additions & 2 deletions pagerduty/data_source_pagerduty_extension_schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,14 @@ func dataSourcePagerDutyExtensionSchemaRead(d *schema.ResourceData, meta interfa
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.ExtensionSchemas.List(&pagerduty.ListExtensionSchemasOptions{Query: searchName})
if err != nil {
time.Sleep(2 * time.Second)
return resource.RetryableError(err)
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.ExtensionSchema
Expand Down
47 changes: 30 additions & 17 deletions pagerduty/data_source_pagerduty_priority.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import (
"fmt"
"log"
"strings"
"time"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/heimweh/go-pagerduty/pagerduty"
)
Expand Down Expand Up @@ -34,27 +36,38 @@ func dataSourcePagerDutyPriorityRead(d *schema.ResourceData, meta interface{}) e

searchTeam := d.Get("name").(string)

resp, _, err := client.Priorities.List()
if err != nil {
return err
}
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.Priorities.List()
if err != nil {
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.Priority
var found *pagerduty.Priority

for _, priority := range resp.Priorities {
if strings.EqualFold(priority.Name, searchTeam) {
found = priority
break
for _, priority := range resp.Priorities {
if strings.EqualFold(priority.Name, searchTeam) {
found = priority
break
}
}
}

if found == nil {
return fmt.Errorf("Unable to locate any priority with name: %s", searchTeam)
}
if found == nil {
return resource.NonRetryableError(
fmt.Errorf("Unable to locate any priority with name: %s", searchTeam),
)
}

d.SetId(found.ID)
d.Set("name", found.Name)
d.Set("description", found.Description)
d.SetId(found.ID)
d.Set("name", found.Name)
d.Set("description", found.Description)

return nil
return nil
})
}
45 changes: 29 additions & 16 deletions pagerduty/data_source_pagerduty_ruleset.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package pagerduty
import (
"fmt"
"log"
"time"

"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/heimweh/go-pagerduty/pagerduty"
)
Expand All @@ -28,26 +30,37 @@ func dataSourcePagerDutyRulesetRead(d *schema.ResourceData, meta interface{}) er

searchName := d.Get("name").(string)

resp, _, err := client.Rulesets.List()
if err != nil {
return err
}
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.Rulesets.List()
if err != nil {
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.Ruleset
var found *pagerduty.Ruleset

for _, ruleset := range resp.Rulesets {
if ruleset.Name == searchName {
found = ruleset
break
for _, ruleset := range resp.Rulesets {
if ruleset.Name == searchName {
found = ruleset
break
}
}
}

if found == nil {
return fmt.Errorf("Unable to locate any ruleset with the name: %s", searchName)
}
if found == nil {
return resource.NonRetryableError(
fmt.Errorf("Unable to locate any ruleset with the name: %s", searchName),
)
}

d.SetId(found.ID)
d.Set("name", found.Name)
d.SetId(found.ID)
d.Set("name", found.Name)

return nil
return nil
})
}
10 changes: 8 additions & 2 deletions pagerduty/data_source_pagerduty_schedule.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,14 @@ func dataSourcePagerDutyScheduleRead(d *schema.ResourceData, meta interface{}) e
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.Schedules.List(o)
if err != nil {
time.Sleep(2 * time.Second)
return resource.RetryableError(err)
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.Schedule
Expand Down
10 changes: 8 additions & 2 deletions pagerduty/data_source_pagerduty_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,14 @@ func dataSourcePagerDutyServiceRead(d *schema.ResourceData, meta interface{}) er
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.Services.List(o)
if err != nil {
time.Sleep(2 * time.Second)
return resource.RetryableError(err)
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.Service
Expand Down
10 changes: 8 additions & 2 deletions pagerduty/data_source_pagerduty_team.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,14 @@ func dataSourcePagerDutyTeamRead(d *schema.ResourceData, meta interface{}) error
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.Teams.List(o)
if err != nil {
time.Sleep(2 * time.Second)
return resource.RetryableError(err)
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.Team
Expand Down
10 changes: 8 additions & 2 deletions pagerduty/data_source_pagerduty_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,14 @@ func dataSourcePagerDutyUserRead(d *schema.ResourceData, meta interface{}) error
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.Users.List(o)
if err != nil {
time.Sleep(2 * time.Second)
return resource.RetryableError(err)
if isErrCode(err, 429) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.User
Expand Down
10 changes: 8 additions & 2 deletions pagerduty/data_source_pagerduty_vendor.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,14 @@ func dataSourcePagerDutyVendorRead(d *schema.ResourceData, meta interface{}) err
return resource.Retry(2*time.Minute, func() *resource.RetryError {
resp, _, err := client.Vendors.List(o)
if err != nil {
time.Sleep(2 * time.Second)
return resource.RetryableError(err)
if (isErrCode(err, 429)) {
// Delaying retry by 30s as recommended by PagerDuty
// https://developer.pagerduty.com/docs/rest-api-v2/rate-limiting/#what-are-possible-workarounds-to-the-events-api-rate-limit
time.Sleep(30 * time.Second)
return resource.RetryableError(err)
}

return resource.NonRetryableError(err)
}

var found *pagerduty.Vendor
Expand Down