mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-27 09:21:14 -06:00
db7596c045
Use the configured providers directly, rather than looking for inherited provider configuration during graph evaluation. First remove the provider config cache, and the associated SetProviderConfig and ParentProviderConfig methods on the eval context. Every provider must be configured, so there's no need to look for configuration from other provider instances. The config.ProviderConfig struct now has a Scope field which stores the proper path for the interpolation scope. To get this metadata to the interpolator, we add an EvalInterpolatProvider node which can carry the ProviderConfig, and an InterpolateProvider context method to carry the ProviderConfig.Scope into the InterplationScope. Some of the tests could be adjusted to account for the new inheritance behavior, and some were simply no longer valid and will be removed. The remaining tests have questions on how they should work in practice. This mostly concerns orphaned modules where there is no longer a way to obtain a provider. In some cases we may require that a minimal provider config be present to handle the destroy process, but we need further testing. All disabled code was commented out in this commit to record any additional comments. The following commit will be a cleanup pass.
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package terraform
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/hashicorp/terraform/config"
|
|
)
|
|
|
|
// EvalInterpolate is an EvalNode implementation that takes a raw
|
|
// configuration and interpolates it.
|
|
type EvalInterpolate struct {
|
|
Config *config.RawConfig
|
|
Resource *Resource
|
|
Output **ResourceConfig
|
|
ContinueOnErr bool
|
|
}
|
|
|
|
func (n *EvalInterpolate) Eval(ctx EvalContext) (interface{}, error) {
|
|
rc, err := ctx.Interpolate(n.Config, n.Resource)
|
|
if err != nil {
|
|
if n.ContinueOnErr {
|
|
log.Printf("[WARN] Interpolation %q failed: %s", n.Config.Key, err)
|
|
return nil, EvalEarlyExitError{}
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
if n.Output != nil {
|
|
*n.Output = rc
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
// EvalInterpolateProvider is an EvalNode implementation that takes a
|
|
// ProviderConfig and interpolates it. Provider configurations are the only
|
|
// "inherited" type of configuration we have, and the original raw config may
|
|
// have a different interpolation scope.
|
|
type EvalInterpolateProvider struct {
|
|
Config *config.ProviderConfig
|
|
Resource *Resource
|
|
Output **ResourceConfig
|
|
}
|
|
|
|
func (n *EvalInterpolateProvider) Eval(ctx EvalContext) (interface{}, error) {
|
|
rc, err := ctx.InterpolateProvider(n.Config, n.Resource)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if n.Output != nil {
|
|
*n.Output = rc
|
|
}
|
|
|
|
return nil, nil
|
|
}
|