core: Context.InitProvider must cache providers using absolute addresses
Previously InitProvider was incorrectly using only the relative address, which (due to the ambiguity in the string representation of absolute vs. relative addresses) caused it to always initialize providers in the root module. Now we use the absolute address as the key, which then agrees with the Provider method and ensures that each module gets its own separate instance of each provider if explicit configuration is present.
This commit is contained in:
parent
b8c3b8d45d
commit
0c4c7c5a5f
|
@ -105,13 +105,14 @@ func (ctx *BuiltinEvalContext) InitProvider(typeName string, addr addrs.Provider
|
||||||
ctx.ProviderLock.Lock()
|
ctx.ProviderLock.Lock()
|
||||||
defer ctx.ProviderLock.Unlock()
|
defer ctx.ProviderLock.Unlock()
|
||||||
|
|
||||||
key := addr.String()
|
key := absAddr.String()
|
||||||
|
|
||||||
p, err := ctx.Components.ResourceProvider(typeName, key)
|
p, err := ctx.Components.ResourceProvider(typeName, key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Printf("[TRACE] BuiltinEvalContext: Initialized %q provider for %s", typeName, absAddr)
|
||||||
ctx.ProviderCache[key] = p
|
ctx.ProviderCache[key] = p
|
||||||
|
|
||||||
// Also fetch and cache the provider's schema.
|
// Also fetch and cache the provider's schema.
|
||||||
|
|
Loading…
Reference in New Issue