Skip to content

Commit

Permalink
Fix path.module when using --chdir/--recursive (#1635)
Browse files Browse the repository at this point in the history
  • Loading branch information
wata727 authored Dec 29, 2022
1 parent 4fc0738 commit df7277a
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 28 deletions.
2 changes: 1 addition & 1 deletion integrationtest/inspection/chdir/dir/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ variable "from_auto_default" {
module "aws_instance" {
source = "./module"

instance_type = "${var.from_config}-${var.from_cli}-${var.from_auto}-${var.from_auto_default}-${file("dir.txt")}-${file("${path.cwd}/root.txt")}"
instance_type = "${var.from_config}-${var.from_cli}-${var.from_auto}-${var.from_auto_default}-${file("dir.txt")}-${file("${path.cwd}/root.txt")}-${file("${path.module}/module.txt")}-${file("${path.root}/module.txt")}"
}
1 change: 1 addition & 0 deletions integrationtest/inspection/chdir/dir/module.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
file_in_module
6 changes: 3 additions & 3 deletions integrationtest/inspection/chdir/result.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"severity": "error",
"link": ""
},
"message": "instance type is from_config-from_cli-from_auto-from_auto_default-file_in_dir-file_in_root",
"message": "instance type is from_config-from_cli-from_auto-from_auto_default-file_in_dir-file_in_root-file_in_module-file_in_module",
"range": {
"filename": "dir/main.tf",
"start": {
Expand All @@ -15,7 +15,7 @@
},
"end": {
"line": 20,
"column": 148
"column": 220
}
},
"callers": [
Expand All @@ -27,7 +27,7 @@
},
"end": {
"line": 20,
"column": 148
"column": 220
}
},
{
Expand Down
6 changes: 3 additions & 3 deletions integrationtest/inspection/chdir/result_windows.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"severity": "error",
"link": ""
},
"message": "instance type is from_config-from_cli-from_auto-from_auto_default-file_in_dir-file_in_root",
"message": "instance type is from_config-from_cli-from_auto-from_auto_default-file_in_dir-file_in_root-file_in_module-file_in_module",
"range": {
"filename": "dir\\main.tf",
"start": {
Expand All @@ -15,7 +15,7 @@
},
"end": {
"line": 20,
"column": 148
"column": 220
}
},
"callers": [
Expand All @@ -27,7 +27,7 @@
},
"end": {
"line": 20,
"column": 148
"column": 220
}
},
{
Expand Down
34 changes: 17 additions & 17 deletions terraform/loader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,48 +30,48 @@ func TestLoadConfig_v0_15_0(t *testing.T) {
// module.instance
testChildModule(t, config, "instance", "ec2")
// module.consul
testChildModule(t, config, "consul", filepath.Join(".terraform", "modules", "consul"))
testChildModule(t, config, "consul", ".terraform/modules/consul")
// module.consul.module.consul_clients
testChildModule(
t,
config.Children["consul"],
"consul_clients",
filepath.Join(".terraform", "modules", "consul", "modules", "consul-cluster"),
".terraform/modules/consul/modules/consul-cluster",
)
// module.consul.module.consul_clients.module.iam_policies
testChildModule(
t,
config.Children["consul"].Children["consul_clients"],
"iam_policies",
filepath.Join(".terraform", "modules", "consul", "modules", "consul-iam-policies"),
".terraform/modules/consul/modules/consul-iam-policies",
)
// module.consul.module.consul_clients.module.security_group_rules
testChildModule(
t,
config.Children["consul"].Children["consul_clients"],
"security_group_rules",
filepath.Join(".terraform", "modules", "consul", "modules", "consul-security-group-rules"),
".terraform/modules/consul/modules/consul-security-group-rules",
)
// module.consul.module.consul_servers
testChildModule(
t,
config.Children["consul"],
"consul_servers",
filepath.Join(".terraform", "modules", "consul", "modules", "consul-cluster"),
".terraform/modules/consul/modules/consul-cluster",
)
// module.consul.module.consul_servers.module.iam_policies
testChildModule(
t,
config.Children["consul"].Children["consul_servers"],
"iam_policies",
filepath.Join(".terraform", "modules", "consul", "modules", "consul-iam-policies"),
".terraform/modules/consul/modules/consul-iam-policies",
)
// module.consul.module.consul_servers.module.security_group_rules
testChildModule(
t,
config.Children["consul"].Children["consul_servers"],
"security_group_rules",
filepath.Join(".terraform", "modules", "consul", "modules", "consul-security-group-rules"),
".terraform/modules/consul/modules/consul-security-group-rules",
)
})
}
Expand All @@ -89,54 +89,54 @@ func TestLoadConfig_v0_15_0_withBaseDir(t *testing.T) {
}

// root
if config.Module.SourceDir != "v0.15.0_module" {
t.Fatalf("root module path: want=%s, got=%s", "v0.15.0_module", config.Module.SourceDir)
if config.Module.SourceDir != "." {
t.Fatalf("root module path: want=%s, got=%s", ".", config.Module.SourceDir)
}
// module.instance
testChildModule(t, config, "instance", filepath.Join("v0.15.0_module", "ec2"))
testChildModule(t, config, "instance", "ec2")
// module.consul
testChildModule(t, config, "consul", filepath.Join("v0.15.0_module", ".terraform", "modules", "consul"))
testChildModule(t, config, "consul", ".terraform/modules/consul")
// module.consul.module.consul_clients
testChildModule(
t,
config.Children["consul"],
"consul_clients",
filepath.Join("v0.15.0_module", ".terraform", "modules", "consul", "modules", "consul-cluster"),
".terraform/modules/consul/modules/consul-cluster",
)
// module.consul.module.consul_clients.module.iam_policies
testChildModule(
t,
config.Children["consul"].Children["consul_clients"],
"iam_policies",
filepath.Join("v0.15.0_module", ".terraform", "modules", "consul", "modules", "consul-iam-policies"),
".terraform/modules/consul/modules/consul-iam-policies",
)
// module.consul.module.consul_clients.module.security_group_rules
testChildModule(
t,
config.Children["consul"].Children["consul_clients"],
"security_group_rules",
filepath.Join("v0.15.0_module", ".terraform", "modules", "consul", "modules", "consul-security-group-rules"),
".terraform/modules/consul/modules/consul-security-group-rules",
)
// module.consul.module.consul_servers
testChildModule(
t,
config.Children["consul"],
"consul_servers",
filepath.Join("v0.15.0_module", ".terraform", "modules", "consul", "modules", "consul-cluster"),
".terraform/modules/consul/modules/consul-cluster",
)
// module.consul.module.consul_servers.module.iam_policies
testChildModule(
t,
config.Children["consul"].Children["consul_servers"],
"iam_policies",
filepath.Join("v0.15.0_module", ".terraform", "modules", "consul", "modules", "consul-iam-policies"),
".terraform/modules/consul/modules/consul-iam-policies",
)
// module.consul.module.consul_servers.module.security_group_rules
testChildModule(
t,
config.Children["consul"].Children["consul_servers"],
"security_group_rules",
filepath.Join("v0.15.0_module", ".terraform", "modules", "consul", "modules", "consul-security-group-rules"),
".terraform/modules/consul/modules/consul-security-group-rules",
)
})
}
Expand Down
6 changes: 4 additions & 2 deletions terraform/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ func NewParser(fs afero.Fs) *Parser {
// parsed using the HCL JSON syntax.
//
// If a baseDir is passed, the loaded files are assumed to be loaded from that
// directory.
// directory. However, SourceDir does not contain baseDir because it affects
// `path.module` and `path.root` values.
func (p *Parser) LoadConfigDir(baseDir, dir string) (*Module, hcl.Diagnostics) {
primaries, overrides, diags := p.configDirFiles(baseDir, dir)
if diags.HasErrors() {
Expand Down Expand Up @@ -95,7 +96,8 @@ func (p *Parser) LoadConfigDir(baseDir, dir string) (*Module, hcl.Diagnostics) {
return mod, diags
}

mod.SourceDir = filepath.Join(baseDir, dir)
// Do not contain baseDir because it affects `path.module` and `path.root` values.
mod.SourceDir = dir

buildDiags := mod.build()
diags = diags.Extend(buildDiags)
Expand Down
4 changes: 2 additions & 2 deletions terraform/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func TestLoadConfigDir(t *testing.T) {
baseDir: "foo",
dir: ".",
want: &Module{
SourceDir: "foo",
SourceDir: ".",
primaries: []*hcl.File{
{Body: hcltest.MockBody(&hcl.BodyContent{MissingItemRange: hcl.Range{Filename: filepath.Join("foo", "main.tf")}})},
},
Expand Down Expand Up @@ -151,7 +151,7 @@ func TestLoadConfigDir(t *testing.T) {
baseDir: "foo",
dir: "bar",
want: &Module{
SourceDir: filepath.Join("foo", "bar"),
SourceDir: "bar",
primaries: []*hcl.File{
{Body: hcltest.MockBody(&hcl.BodyContent{MissingItemRange: hcl.Range{Filename: filepath.Join("foo", "bar", "main.tf")}})},
},
Expand Down

0 comments on commit df7277a

Please sign in to comment.