fix: validate implied provider names in submodules (#31573)

This commit is contained in:
Radek Simko 2022-08-05 20:44:52 +01:00 committed by GitHub
parent fbda4382f3
commit fc62afb6dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 63 additions and 0 deletions

View File

@ -105,6 +105,33 @@ func TestLoaderLoadConfig_loadDiags(t *testing.T) {
}
}
func TestLoaderLoadConfig_loadDiagsFromSubmodules(t *testing.T) {
// building a config which didn't load correctly may cause configs to panic
fixtureDir := filepath.Clean("testdata/invalid-names-in-submodules")
loader, err := NewLoader(&Config{
ModulesDir: filepath.Join(fixtureDir, ".terraform/modules"),
})
if err != nil {
t.Fatalf("unexpected error from NewLoader: %s", err)
}
cfg, diags := loader.LoadConfig(fixtureDir)
if !diags.HasErrors() {
t.Fatalf("loading succeeded; want an error")
}
if got, want := diags.Error(), " Invalid provider local name"; !strings.Contains(got, want) {
t.Errorf("missing expected error\nwant substring: %s\ngot: %s", want, got)
}
if cfg == nil {
t.Fatal("partial config not returned with diagnostics")
}
if cfg.Module == nil {
t.Fatal("expected config module")
}
}
func TestLoaderLoadConfig_childProviderGrandchildCount(t *testing.T) {
// This test is focused on the specific situation where:
// - A child module contains a nested provider block, which is no longer

View File

@ -0,0 +1,14 @@
{
"Modules": [
{
"Key": "test",
"Source": "./sub",
"Dir": "testdata/invalid-names-in-submodules/sub"
},
{
"Key": "",
"Source": "",
"Dir": "."
}
]
}

View File

@ -0,0 +1,3 @@
module "test" {
source = "./sub"
}

View File

@ -0,0 +1,7 @@
resource "aws-_foo" "test" {
}
data "aws-_bar" "test" {
}

View File

@ -153,6 +153,18 @@ func validateProviderConfigs(parentCall *ModuleCall, cfg *Config, noProviderConf
}
localName := r.Addr().ImpliedProvider()
_, err := addrs.ParseProviderPart(localName)
if err != nil {
diags = append(diags, &hcl.Diagnostic{
Severity: hcl.DiagError,
Summary: "Invalid provider local name",
Detail: fmt.Sprintf("%q is an invalid implied provider local name: %s", localName, err),
Subject: r.DeclRange.Ptr(),
})
continue
}
if _, ok := localNames[localName]; ok {
// OK, this was listed directly in the required_providers
continue