From b92d331294f600f0450cde9ecbe07e7c9bfdd438 Mon Sep 17 00:00:00 2001 From: Jon Jarboe Date: Thu, 5 Nov 2020 17:14:29 -0800 Subject: [PATCH] address #365 by properly handling submodule path --- pkg/iac-providers/terraform/v12/load-dir.go | 5 +-- .../terraform/v12/load-dir_test.go | 7 ++++ .../testdata/deep-modules/modules/m1/main.tf | 23 ++++++++++++ .../testdata/deep-modules/modules/m2/main.tf | 36 +++++++++++++++++++ .../testdata/deep-modules/modules/m3/main.tf | 17 +++++++++ .../v12/testdata/deep-modules/template.tf | 14 ++++++++ .../v12/testdata/tfjson/deep-modules.json | 15 ++++++++ 7 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m1/main.tf create mode 100644 pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m2/main.tf create mode 100644 pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m3/main.tf create mode 100644 pkg/iac-providers/terraform/v12/testdata/deep-modules/template.tf create mode 100644 pkg/iac-providers/terraform/v12/testdata/tfjson/deep-modules.json diff --git a/pkg/iac-providers/terraform/v12/load-dir.go b/pkg/iac-providers/terraform/v12/load-dir.go index d6df50a4e..6466090ac 100644 --- a/pkg/iac-providers/terraform/v12/load-dir.go +++ b/pkg/iac-providers/terraform/v12/load-dir.go @@ -20,7 +20,6 @@ import ( "fmt" "os" "path/filepath" - "strings" "github.com/accurics/terrascan/pkg/iac-providers/output" "github.com/accurics/terrascan/pkg/utils" @@ -84,9 +83,7 @@ func (*TfV12) LoadIacDir(absRootDir string) (allResourcesConfig output.AllResour if isLocalSourceAddr(req.SourceAddr) { // determine the absolute path from root module to the sub module // using *configs.ModuleRequest.Path field - pathArr := strings.Split(req.Path.String(), ".") - pathArr = pathArr[:len(pathArr)-1] - pathToModule = filepath.Join(absRootDir, filepath.Join(pathArr...), req.SourceAddr) + pathToModule = filepath.Join(absRootDir, req.Parent.SourceAddr, req.SourceAddr) zap.S().Debugf("processing local module %q", req.SourceAddr) } else { // temp dir to download the remote repo diff --git a/pkg/iac-providers/terraform/v12/load-dir_test.go b/pkg/iac-providers/terraform/v12/load-dir_test.go index 943b83043..2a7d6682b 100644 --- a/pkg/iac-providers/terraform/v12/load-dir_test.go +++ b/pkg/iac-providers/terraform/v12/load-dir_test.go @@ -91,6 +91,13 @@ func TestLoadIacDir(t *testing.T) { tfv12: TfV12{}, wantErr: nil, }, + { + name: "nested module directory", + tfConfigDir: "./testdata/deep-modules", + tfJSONFile: "./testdata/tfjson/deep-modules.json", + tfv12: TfV12{}, + wantErr: nil, + }, } for _, tt := range table2 { diff --git a/pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m1/main.tf b/pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m1/main.tf new file mode 100644 index 000000000..1eb5cc25f --- /dev/null +++ b/pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m1/main.tf @@ -0,0 +1,23 @@ +variable "m1projectid" { + type = string + default = "asdfasdf" +} + +module "m2" { + source = "../m2" + m2versionyear = "2012" + m2versionmonth = "10" + m2versionday = "17" + m2bucketname = module.m3.fullbucketname +} +module "m3" { + source = "../m3" + m3bucketname = var.m1projectid + m3environment = "dev" +} + + +resource "aws_s3_bucket" "bucket" { + bucket = module.m3.fullbucketname + policy = module.m2.fullbucketpolicy +} diff --git a/pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m2/main.tf b/pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m2/main.tf new file mode 100644 index 000000000..2d9ab4a3c --- /dev/null +++ b/pkg/iac-providers/terraform/v12/testdata/deep-modules/modules/m2/main.tf @@ -0,0 +1,36 @@ +variable "m2versionyear" { + type = string +} +variable "m2versionmonth" { + type = string +} +variable "m2versionday" { + type = string +} +variable "m2bucketname" { + type = string +} +data "aws_iam_policy_document" "readbuckets" { + source_json = <