Skip to content

Commit

Permalink
Fix: terragunt should call 'providers schema -json' (#205)
Browse files Browse the repository at this point in the history
  • Loading branch information
TomerHeber authored Oct 28, 2024
1 parent 4369f90 commit 61c53d0
Showing 1 changed file with 5 additions and 45 deletions.
50 changes: 5 additions & 45 deletions internal/tfschema/tfschema.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@ import (
"encoding/json"
"errors"
"fmt"
"io/fs"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
"sync"

Expand Down Expand Up @@ -90,36 +87,6 @@ type TfSchemaAttribute struct {
Type string
}

func getFolderPathHelper(dir string, suffix string) string {
ret := dir
found := false

filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
if found || err != nil {
return filepath.SkipDir
}

if strings.HasSuffix(path, suffix) {
ret = strings.TrimSuffix(path, suffix)
found = true
}

return nil
})

return ret
}

func getTerragruntCacheFolderPath(dir string) string {
return getFolderPathHelper(dir, "/.terragrunt-cache")
}

func getTerragruntPluginPath(dir string) string {
dir += "/.terragrunt-cache"

return getFolderPathHelper(dir, "/.terraform")
}

func extractProviderNameFromResourceType(resourceType string) (string, error) {
s := strings.SplitN(resourceType, "_", 2)
if len(s) < 2 {
Expand All @@ -145,17 +112,6 @@ func detectProviderName(resource hclwrite.Block) (string, error) {
}

func getResourceSchema(resourceType string, resource hclwrite.Block, dir string, iacType common.IACType, defaultToTerraform bool) (*ResourceSchema, error) {
if iacType == common.Terragrunt {
// try to locate a .terragrunt-cache cache folder.
dir = getTerragruntCacheFolderPath(dir)

// which mode of terragrunt it is (with or without cache folder).
if _, err := os.Stat(dir + "/.terragrunt-cache"); err == nil {
// try to locate a .terrafrom cache folder within the .terragrunt-cache cache folder.
dir = getTerragruntPluginPath(dir)
}
}

providerSchemasMapLock.Lock()
defer providerSchemasMapLock.Unlock()

Expand All @@ -164,8 +120,12 @@ func getResourceSchema(resourceType string, resource hclwrite.Block, dir string,
providerSchemas = &ProviderSchemas{}

// Use tofu by default (if it exists).

name := "terraform"
if _, err := exec.LookPath("tofu"); !defaultToTerraform && err == nil {
// For terragrunt - use terragrunt.
if iacType == common.Terragrunt {
name = "terragrunt"
} else if _, err := exec.LookPath("tofu"); !defaultToTerraform && err == nil {
name = "tofu"
}

Expand Down

0 comments on commit 61c53d0

Please sign in to comment.