diff --git a/configs/module.go b/configs/module.go index 90bf180e59..159cdfdca9 100644 --- a/configs/module.go +++ b/configs/module.go @@ -93,6 +93,7 @@ func NewModule(primaryFiles, overrideFiles []*File) (*Module, hcl.Diagnostics) { ModuleCalls: map[string]*ModuleCall{}, ManagedResources: map[string]*Resource{}, DataResources: map[string]*Resource{}, + ProviderMetas: map[string]*ProviderMeta{}, } for _, file := range primaryFiles { diff --git a/terraform/eval_apply.go b/terraform/eval_apply.go index 725595b869..e389e6b928 100644 --- a/terraform/eval_apply.go +++ b/terraform/eval_apply.go @@ -88,7 +88,6 @@ func (n *EvalApply) Eval(ctx EvalContext) (interface{}, error) { Subject: &n.ProviderMeta.ProviderRange, }) } else { - var configDiags tfdiags.Diagnostics metaConfigVal, _, configDiags = ctx.EvaluateBlock(n.ProviderMeta.Config, (*n.ProviderSchema).ProviderMeta, nil, EvalDataForNoInstanceKey) diags = diags.Append(configDiags) diff --git a/terraform/node_resource_validate.go b/terraform/node_resource_validate.go index 51bfd6f5d5..b0a11c1555 100644 --- a/terraform/node_resource_validate.go +++ b/terraform/node_resource_validate.go @@ -15,12 +15,13 @@ type NodeValidatableResource struct { } var ( - _ GraphNodeSubPath = (*NodeValidatableResource)(nil) - _ GraphNodeEvalable = (*NodeValidatableResource)(nil) - _ GraphNodeReferenceable = (*NodeValidatableResource)(nil) - _ GraphNodeReferencer = (*NodeValidatableResource)(nil) - _ GraphNodeResource = (*NodeValidatableResource)(nil) - _ GraphNodeAttachResourceConfig = (*NodeValidatableResource)(nil) + _ GraphNodeSubPath = (*NodeValidatableResource)(nil) + _ GraphNodeEvalable = (*NodeValidatableResource)(nil) + _ GraphNodeReferenceable = (*NodeValidatableResource)(nil) + _ GraphNodeReferencer = (*NodeValidatableResource)(nil) + _ GraphNodeResource = (*NodeValidatableResource)(nil) + _ GraphNodeAttachResourceConfig = (*NodeValidatableResource)(nil) + _ GraphNodeAttachProviderMetaConfigs = (*NodeValidatableResource)(nil) ) // GraphNodeEvalable diff --git a/terraform/schemas.go b/terraform/schemas.go index df9fd585e7..80eb80e60d 100644 --- a/terraform/schemas.go +++ b/terraform/schemas.go @@ -160,6 +160,10 @@ func loadProviderSchemas(schemas map[string]*ProviderSchema, config *configs.Con } } + if resp.ProviderMeta.Block != nil { + s.ProviderMeta = resp.ProviderMeta.Block + } + schemas[typeName] = s } diff --git a/terraform/state.go b/terraform/state.go index 2f97e5af3c..95c1e85130 100644 --- a/terraform/state.go +++ b/terraform/state.go @@ -1634,6 +1634,8 @@ type InstanceState struct { // and collections. Meta map[string]interface{} `json:"meta"` + ProviderMeta cty.Value + // Tainted is used to mark a resource for recreation. Tainted bool `json:"tainted"` diff --git a/terraform/transform_provider.go b/terraform/transform_provider.go index d8cebe713a..60f2d09838 100644 --- a/terraform/transform_provider.go +++ b/terraform/transform_provider.go @@ -140,7 +140,7 @@ func (t *ProviderTransformer) Transform(g *Graph) error { log.Printf("[TRACE] ProviderTransformer: no provider metas defined for %s", dag.VertexName(v)) continue } - if meta, ok := t.Config.Module.ProviderMetas[p.String()]; ok { + if meta, ok := t.Config.Module.ProviderMetas[p.ProviderConfig.Type]; ok { gnapmc.AttachProviderMetaConfigs(meta) } }