Skip to content

Commit

Permalink
refactor(terraform): only run terraform init if .terraform directory …
Browse files Browse the repository at this point in the history
…doesn't exist
  • Loading branch information
aliscott committed Oct 7, 2020
1 parent e39795d commit 55bd94f
Showing 1 changed file with 24 additions and 8 deletions.
32 changes: 24 additions & 8 deletions internal/providers/terraform/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/infracost/infracost/pkg/schema"
"github.com/kballard/go-shellquote"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"golang.org/x/mod/semver"

"github.com/urfave/cli/v2"
Expand Down Expand Up @@ -93,15 +94,19 @@ func (p *terraformProvider) generatePlanJSON() ([]byte, error) {
TerraformDir: p.dir,
}

var spinner *spin.Spinner

if p.planFile == "" {
spinner := spin.NewSpinner("Running terraform init")
_, err := TerraformCmd(opts, "init", "-no-color")
if err != nil {
spinner.Fail()
terraformError(err)
return []byte{}, errors.Wrap(err, "Error running terraform init")
if !p.isTerraformInitRun() {
spinner = spin.NewSpinner("Running terraform init")
_, err := TerraformCmd(opts, "init", "-no-color")
if err != nil {
spinner.Fail()
terraformError(err)
return []byte{}, errors.Wrap(err, "Error running terraform init")
}
spinner.Success()
}
spinner.Success()

spinner = spin.NewSpinner("Running terraform plan")
f, err := ioutil.TempFile(os.TempDir(), "tfplan")
Expand Down Expand Up @@ -129,7 +134,7 @@ func (p *terraformProvider) generatePlanJSON() ([]byte, error) {
p.planFile = f.Name()
}

spinner := spin.NewSpinner("Running terraform show")
spinner = spin.NewSpinner("Running terraform show")
out, err := TerraformCmd(opts, "show", "-no-color", "-json", p.planFile)
if err != nil {
spinner.Fail()
Expand Down Expand Up @@ -182,6 +187,17 @@ func (p *terraformProvider) inTerraformDir() bool {
return matches != nil && err == nil
}

func (p *terraformProvider) isTerraformInitRun() bool {
_, err := os.Stat(filepath.Join(p.dir, ".terraform"))
if err != nil {
if !os.IsNotExist(err) {
log.Errorf("error checking if .terraform directory exists: %v", err)
}
return false
}
return true
}

func terraformError(err error) {
if e, ok := err.(*TerraformCmdError); ok {
fmt.Fprintln(os.Stderr, indent(color.HiRedString("Terraform command failed with:"), " "))
Expand Down

0 comments on commit 55bd94f

Please sign in to comment.