Merge pull request #16621 from hashicorp/jbardin/provider-panic
Fix panic with invalid module providers
This commit is contained in:
commit
aef082d1ec
|
@ -390,7 +390,7 @@ func (c *Config) Validate() error {
|
|||
|
||||
// Check that providers aren't declared multiple times and that their
|
||||
// version constraints, where present, are syntactically valid.
|
||||
providerSet := make(map[string]struct{})
|
||||
providerSet := make(map[string]bool)
|
||||
for _, p := range c.ProviderConfigs {
|
||||
name := p.FullName()
|
||||
if _, ok := providerSet[name]; ok {
|
||||
|
@ -410,7 +410,7 @@ func (c *Config) Validate() error {
|
|||
}
|
||||
}
|
||||
|
||||
providerSet[name] = struct{}{}
|
||||
providerSet[name] = true
|
||||
}
|
||||
|
||||
// Check that all references to modules are valid
|
||||
|
@ -500,6 +500,15 @@ func (c *Config) Validate() error {
|
|||
"%s: can't initialize configuration: %s",
|
||||
m.Id(), err))
|
||||
}
|
||||
|
||||
// check that all named providers actually exist
|
||||
for _, p := range m.Providers {
|
||||
if !providerSet[p] {
|
||||
errs = append(errs, fmt.Errorf(
|
||||
"provider %q named in module %q does not exist", p, m.Name))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
dupped = nil
|
||||
|
||||
|
|
|
@ -219,6 +219,12 @@ func TestConfigValidate_table(t *testing.T) {
|
|||
true,
|
||||
"invalid version constraint",
|
||||
},
|
||||
{
|
||||
"invalid provider name in module block",
|
||||
"validate-missing-provider",
|
||||
true,
|
||||
"does not exist",
|
||||
},
|
||||
}
|
||||
|
||||
for i, tc := range cases {
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
provider "test" {
|
||||
alias = "bar"
|
||||
}
|
||||
|
||||
module "mod" {
|
||||
source = "./mod"
|
||||
providers = {
|
||||
"test" = "test.foo"
|
||||
}
|
||||
}
|
|
@ -530,7 +530,8 @@ func (t *ProviderConfigTransformer) addProxyProvider(g *Graph, m *module.Tree, p
|
|||
parentProvider := t.providers[fullParentName]
|
||||
|
||||
if parentProvider == nil {
|
||||
panic(fmt.Sprintf("missing provider %s in module %s", parentProviderName, m.Name()))
|
||||
log.Printf("[ERROR] missing provider %s in module %s", parentProviderName, m.Name())
|
||||
return false
|
||||
}
|
||||
|
||||
v := &graphNodeProxyProvider{
|
||||
|
|
Loading…
Reference in New Issue