Skip to content

Commit 257077d

Browse files
Add compute_route retry for "peering operation in progress" (#3518) (#2082)
Signed-off-by: Modular Magician <[email protected]>
1 parent c5a38a9 commit 257077d

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

.changelog/3518.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
Fixed an issue where `google_compute_route` creation failed while VPC peering was in progress.
3+
```

google-beta/error_retry_predicates.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,3 +248,12 @@ func isDataflowJobUpdateRetryableError(err error) (bool, string) {
248248
}
249249
return false, ""
250250
}
251+
252+
func isPeeringOperationInProgress(err error) (bool, string) {
253+
if gerr, ok := err.(*googleapi.Error); ok {
254+
if gerr.Code == 400 && strings.Contains(gerr.Body, "There is a peering operation in progress") {
255+
return true, "Waiting peering operation to complete"
256+
}
257+
}
258+
return false, ""
259+
}

google-beta/resource_compute_route.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ func resourceComputeRouteCreate(d *schema.ResourceData, meta interface{}) error
264264
if err != nil {
265265
return err
266266
}
267-
res, err := sendRequestWithTimeout(config, "POST", project, url, obj, d.Timeout(schema.TimeoutCreate))
267+
res, err := sendRequestWithTimeout(config, "POST", project, url, obj, d.Timeout(schema.TimeoutCreate), isPeeringOperationInProgress)
268268
if err != nil {
269269
return fmt.Errorf("Error creating Route: %s", err)
270270
}
@@ -303,7 +303,7 @@ func resourceComputeRouteRead(d *schema.ResourceData, meta interface{}) error {
303303
if err != nil {
304304
return err
305305
}
306-
res, err := sendRequest(config, "GET", project, url, nil)
306+
res, err := sendRequest(config, "GET", project, url, nil, isPeeringOperationInProgress)
307307
if err != nil {
308308
return handleNotFoundError(err, d, fmt.Sprintf("ComputeRoute %q", d.Id()))
309309
}
@@ -390,7 +390,7 @@ func resourceComputeRouteDelete(d *schema.ResourceData, meta interface{}) error
390390
var obj map[string]interface{}
391391
log.Printf("[DEBUG] Deleting Route %q", d.Id())
392392

393-
res, err := sendRequestWithTimeout(config, "DELETE", project, url, obj, d.Timeout(schema.TimeoutDelete))
393+
res, err := sendRequestWithTimeout(config, "DELETE", project, url, obj, d.Timeout(schema.TimeoutDelete), isPeeringOperationInProgress)
394394
if err != nil {
395395
return handleNotFoundError(err, d, "Route")
396396
}

google-beta/resource_compute_route_generated_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ func testAccCheckComputeRouteDestroyProducer(t *testing.T) func(s *terraform.Sta
155155
return err
156156
}
157157

158-
_, err = sendRequest(config, "GET", "", url, nil)
158+
_, err = sendRequest(config, "GET", "", url, nil, isPeeringOperationInProgress)
159159
if err == nil {
160160
return fmt.Errorf("ComputeRoute still exists at %s", url)
161161
}

0 commit comments

Comments
 (0)