Skip to content

Commit 2646fa0

Browse files
authored
chore: add retryable error handling for deploy helper (#1434)
1 parent baaf30e commit 2646fa0

File tree

4 files changed

+54
-35
lines changed

4 files changed

+54
-35
lines changed

helpers/foundation-deployer/stages/apply.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,12 @@ func DeployBootstrapStage(t testing.TB, s steps.Steps, tfvars GlobalTFVars, c Co
7070

7171
terraformDir := filepath.Join(c.FoundationPath, BootstrapStep)
7272
options := &terraform.Options{
73-
TerraformDir: terraformDir,
74-
Logger: c.Logger,
75-
NoColor: true,
73+
TerraformDir: terraformDir,
74+
Logger: c.Logger,
75+
NoColor: true,
76+
RetryableTerraformErrors: testutils.RetryableTransientErrors,
77+
MaxRetries: MaxRetries,
78+
TimeBetweenRetries: TimeBetweenRetries,
7679
}
7780
// terraform deploy
7881
err = applyLocal(t, options, "", c.PolicyPath, c.ValidatorProject)
@@ -177,9 +180,12 @@ func DeployBootstrapStage(t testing.TB, s steps.Steps, tfvars GlobalTFVars, c Co
177180
// Init gcp-bootstrap terraform
178181
err = s.RunStep("gcp-bootstrap.init-tf", func() error {
179182
options := &terraform.Options{
180-
TerraformDir: filepath.Join(gcpBootstrapPath, "envs", "shared"),
181-
Logger: c.Logger,
182-
NoColor: true,
183+
TerraformDir: filepath.Join(gcpBootstrapPath, "envs", "shared"),
184+
Logger: c.Logger,
185+
NoColor: true,
186+
RetryableTerraformErrors: testutils.RetryableTransientErrors,
187+
MaxRetries: MaxRetries,
188+
TimeBetweenRetries: TimeBetweenRetries,
183189
}
184190
_, err := terraform.InitE(t, options)
185191
return err
@@ -461,9 +467,12 @@ func deployStage(t testing.TB, sc StageConf, s steps.Steps, c CommonConf) error
461467
for _, bu := range groupunit {
462468
for _, localStep := range sc.LocalSteps {
463469
buOptions := &terraform.Options{
464-
TerraformDir: filepath.Join(filepath.Join(c.CheckoutPath, sc.Repo), bu, localStep),
465-
Logger: c.Logger,
466-
NoColor: true,
470+
TerraformDir: filepath.Join(filepath.Join(c.CheckoutPath, sc.Repo), bu, localStep),
471+
Logger: c.Logger,
472+
NoColor: true,
473+
RetryableTerraformErrors: testutils.RetryableTransientErrors,
474+
MaxRetries: MaxRetries,
475+
TimeBetweenRetries: TimeBetweenRetries,
467476
}
468477

469478
err := s.RunStep(fmt.Sprintf("%s.%s.apply-%s", sc.Stage, bu, localStep), func() error {

helpers/foundation-deployer/stages/data.go

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"os"
2020
"path/filepath"
2121
"reflect"
22+
"time"
2223

2324
"github.com/gruntwork-io/terratest/modules/logger"
2425
"github.com/gruntwork-io/terratest/modules/terraform"
@@ -28,20 +29,22 @@ import (
2829
)
2930

3031
const (
31-
PoliciesRepo = "gcp-policies"
32-
BootstrapRepo = "gcp-bootstrap"
33-
OrgRepo = "gcp-org"
34-
EnvironmentsRepo = "gcp-environments"
35-
NetworksRepo = "gcp-networks"
36-
ProjectsRepo = "gcp-projects"
37-
AppInfraRepo = "bu1-example-app"
38-
BootstrapStep = "0-bootstrap"
39-
OrgStep = "1-org"
40-
EnvironmentsStep = "2-environments"
41-
HubAndSpokeStep = "3-networks-hub-and-spoke"
42-
SvpcStep = "3-networks-svpc"
43-
ProjectsStep = "4-projects"
44-
AppInfraStep = "5-app-infra"
32+
PoliciesRepo = "gcp-policies"
33+
BootstrapRepo = "gcp-bootstrap"
34+
OrgRepo = "gcp-org"
35+
EnvironmentsRepo = "gcp-environments"
36+
NetworksRepo = "gcp-networks"
37+
ProjectsRepo = "gcp-projects"
38+
AppInfraRepo = "bu1-example-app"
39+
BootstrapStep = "0-bootstrap"
40+
OrgStep = "1-org"
41+
EnvironmentsStep = "2-environments"
42+
HubAndSpokeStep = "3-networks-hub-and-spoke"
43+
SvpcStep = "3-networks-svpc"
44+
ProjectsStep = "4-projects"
45+
AppInfraStep = "5-app-infra"
46+
MaxRetries = 2
47+
TimeBetweenRetries = 2 * time.Minute
4548
)
4649

4750
type CommonConf struct {

helpers/foundation-deployer/stages/destroy.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"fmt"
1919
"os"
2020
"path/filepath"
21-
"time"
2221

2322
"github.com/gruntwork-io/terratest/modules/terraform"
2423
"github.com/mitchellh/go-testing-interface"
@@ -61,9 +60,12 @@ func forceBackendMigration(t testing.TB, repo, groupUnit, env string, c CommonCo
6160
}
6261
if exist {
6362
options := &terraform.Options{
64-
TerraformDir: tfDir,
65-
Logger: c.Logger,
66-
NoColor: true,
63+
TerraformDir: tfDir,
64+
Logger: c.Logger,
65+
NoColor: true,
66+
RetryableTerraformErrors: testutils.RetryableTransientErrors,
67+
MaxRetries: MaxRetries,
68+
TimeBetweenRetries: TimeBetweenRetries,
6769
}
6870
_, err := terraform.InitE(t, options)
6971
if err != nil {
@@ -164,8 +166,8 @@ func destroyStage(t testing.TB, sc StageConf, s steps.Steps, c CommonConf) error
164166
Logger: c.Logger,
165167
NoColor: true,
166168
RetryableTerraformErrors: testutils.RetryableTransientErrors,
167-
MaxRetries: 2,
168-
TimeBetweenRetries: 2 * time.Minute,
169+
MaxRetries: MaxRetries,
170+
TimeBetweenRetries: TimeBetweenRetries,
169171
}
170172
conf := utils.CloneCSR(t, sc.Repo, gcpPath, sc.CICDProject, c.Logger)
171173
branch := e
@@ -198,8 +200,8 @@ func destroyStage(t testing.TB, sc StageConf, s steps.Steps, c CommonConf) error
198200
Logger: c.Logger,
199201
NoColor: true,
200202
RetryableTerraformErrors: testutils.RetryableTransientErrors,
201-
MaxRetries: 2,
202-
TimeBetweenRetries: 2 * time.Minute,
203+
MaxRetries: MaxRetries,
204+
TimeBetweenRetries: TimeBetweenRetries,
203205
}
204206
conf := utils.CloneCSR(t, ProjectsRepo, gcpPath, sc.CICDProject, c.Logger)
205207
err := conf.CheckoutBranch("production")

helpers/foundation-deployer/stages/vet.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import (
2727

2828
"github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test/pkg/gcloud"
2929
"github.com/GoogleCloudPlatform/cloud-foundation-toolkit/infra/blueprint-test/pkg/utils"
30+
31+
"github.com/terraform-google-modules/terraform-example-foundation/test/integration/testutils"
3032
)
3133

3234
// TerraformVet runs gcloud terraform vet on the plan of the provided terraform directory
@@ -37,10 +39,13 @@ func TerraformVet(t testing.TB, terraformDir, policyPath, project string) error
3739
fmt.Println("")
3840

3941
options := &terraform.Options{
40-
TerraformDir: terraformDir,
41-
Logger: logger.Discard,
42-
NoColor: true,
43-
PlanFilePath: filepath.Join(os.TempDir(), "plan.tfplan"),
42+
TerraformDir: terraformDir,
43+
Logger: logger.Discard,
44+
NoColor: true,
45+
PlanFilePath: filepath.Join(os.TempDir(), "plan.tfplan"),
46+
RetryableTerraformErrors: testutils.RetryableTransientErrors,
47+
MaxRetries: MaxRetries,
48+
TimeBetweenRetries: TimeBetweenRetries,
4449
}
4550
_, err := terraform.PlanE(t, options)
4651
if err != nil {

0 commit comments

Comments
 (0)