diff --git a/internal/deprecation/deprecation.go b/internal/deprecation/deprecation.go index 507e8ad1e9..3445455b21 100644 --- a/internal/deprecation/deprecation.go +++ b/internal/deprecation/deprecation.go @@ -84,12 +84,13 @@ func (d *Deprecations) deprecationMarksToDiagnostics(deprecationMarks []marks.De // ValidateAsConfig checks the given value for deprecation marks and returns diagnostics // for each deprecation found, unless deprecation warnings are suppressed for the given module. // It checks for deeply nested deprecation marks as well. -func (d *Deprecations) ValidateAsConfig(value cty.Value, schema *configschema.Block, module addrs.Module) tfdiags.Diagnostics { +func (d *Deprecations) ValidateAsConfig(value cty.Value, schema *configschema.Block, module addrs.Module) (cty.Value, tfdiags.Diagnostics) { var diags tfdiags.Diagnostics - _, pvms := value.UnmarkDeepWithPaths() + unmarked, pvms := value.UnmarkDeepWithPaths() - if len(pvms) == 0 || d.IsModuleCallDeprecationSuppressed(module) { - return diags + if d.IsModuleCallDeprecationSuppressed(module) { + // Even if we don't want to get deprecation warnings we want to remove the marks + return unmarked.MarkWithPaths(marks.RemoveAll(pvms, marks.Deprecation)), diags } for _, pvm := range pvms { @@ -118,7 +119,8 @@ func (d *Deprecations) ValidateAsConfig(value cty.Value, schema *configschema.Bl } } } - return diags + + return unmarked.MarkWithPaths(marks.RemoveAll(pvms, marks.Deprecation)), diags } func (d *Deprecations) IsModuleCallDeprecationSuppressed(addr addrs.Module) bool { diff --git a/internal/terraform/node_action_instance.go b/internal/terraform/node_action_instance.go index a2eb8a884a..a096a497c7 100644 --- a/internal/terraform/node_action_instance.go +++ b/internal/terraform/node_action_instance.go @@ -71,7 +71,8 @@ func (n *NodeActionDeclarationInstance) Execute(ctx EvalContext, _ walkOperation valDiags := validateResourceForbiddenEphemeralValues(ctx, configVal, n.Schema.ConfigSchema) diags = diags.Append(valDiags.InConfigBody(n.Config.Config, n.Addr.String())) - deprecationDiags := ctx.Deprecations().ValidateAsConfig(configVal, n.Schema.ConfigSchema, n.ModulePath()) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, n.Schema.ConfigSchema, n.ModulePath()) diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) if diags.HasErrors() { diff --git a/internal/terraform/node_action_partialexp.go b/internal/terraform/node_action_partialexp.go index 2fdbf1ce23..c70e80d671 100644 --- a/internal/terraform/node_action_partialexp.go +++ b/internal/terraform/node_action_partialexp.go @@ -68,8 +68,8 @@ func (n *NodeActionDeclarationPartialExpanded) Execute(ctx EvalContext, op walkO if diags.HasErrors() { return diags } - - deprecationDiags := ctx.Deprecations().ValidateAsConfig(configVal, n.Schema.ConfigSchema, n.ActionAddr().Module) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, n.Schema.ConfigSchema, n.ActionAddr().Module) diags = diags.Append(deprecationDiags) if diags.HasErrors() { return diags diff --git a/internal/terraform/node_action_validate.go b/internal/terraform/node_action_validate.go index 59e85e20d9..7fc26cd7e8 100644 --- a/internal/terraform/node_action_validate.go +++ b/internal/terraform/node_action_validate.go @@ -101,8 +101,9 @@ func (n *NodeValidatableAction) Execute(ctx EvalContext, _ walkOperation) tfdiag return diags } } - - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(configVal, schema.ConfigSchema, n.ModulePath()).InConfigBody(n.Config.Config, n.Addr.String())) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.ConfigSchema, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) valDiags = validateResourceForbiddenEphemeralValues(ctx, configVal, schema.ConfigSchema) diags = diags.Append(valDiags.InConfigBody(config, n.Addr.String())) diff --git a/internal/terraform/node_provider.go b/internal/terraform/node_provider.go index 9ed0fe538d..49ef049f8d 100644 --- a/internal/terraform/node_provider.go +++ b/internal/terraform/node_provider.go @@ -83,7 +83,8 @@ func (n *NodeApplyableProvider) ValidateProvider(ctx EvalContext, provider provi return diags } - deprecationDiags := ctx.Deprecations().ValidateAsConfig(configVal, configSchema, n.Addr.Module) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, configSchema, n.Addr.Module) diags = diags.Append(deprecationDiags.InConfigBody(configBody, n.Addr.String())) if diags.HasErrors() { return diags diff --git a/internal/terraform/node_resource_abstract_instance.go b/internal/terraform/node_resource_abstract_instance.go index 9e463bc890..bb9cbe80d1 100644 --- a/internal/terraform/node_resource_abstract_instance.go +++ b/internal/terraform/node_resource_abstract_instance.go @@ -869,7 +869,9 @@ func (n *NodeAbstractResourceInstance) plan( diags = diags.Append( validateResourceForbiddenEphemeralValues(ctx, origConfigVal, schema.Body).InConfigBody(n.Config.Config, n.Addr.String()), ) - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(origConfigVal, schema.Body, n.ModulePath()).InConfigBody(n.Config.Config, n.Addr.String())) + var deprecationDiags tfdiags.Diagnostics + origConfigVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(origConfigVal, schema.Body, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) if diags.HasErrors() { return nil, nil, deferred, keyData, diags } @@ -1787,10 +1789,9 @@ func (n *NodeAbstractResourceInstance) providerMetas(ctx EvalContext) (cty.Value var configDiags tfdiags.Diagnostics metaConfigVal, _, configDiags = ctx.EvaluateBlock(m.Config, providerSchema.ProviderMeta.Body, nil, EvalDataForNoInstanceKey) diags = diags.Append(configDiags) - diags = diags.Append( - ctx.Deprecations().ValidateAsConfig(metaConfigVal, providerSchema.ProviderMeta.Body, ctx.Path().Module()).InConfigBody(m.Config, n.Addr.String()), - ) - metaConfigVal = marks.RemoveDeprecationMarks(metaConfigVal) + var deprecationDiags tfdiags.Diagnostics + metaConfigVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(metaConfigVal, providerSchema.ProviderMeta.Body, ctx.Path().Module()) + diags = diags.Append(deprecationDiags.InConfigBody(m.Config, n.Addr.String())) } } } @@ -1867,10 +1868,11 @@ func (n *NodeAbstractResourceInstance) planDataSource(ctx EvalContext, checkRule diags = diags.Append( validateResourceForbiddenEphemeralValues(ctx, configVal, schema.Body).InConfigBody(n.Config.Config, n.Addr.String()), ) - diags = diags.Append( - ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, ctx.Path().Module()).InConfigBody(n.Config.Config, n.Addr.String()), - ) - configVal = marks.RemoveDeprecationMarks(configVal) + + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, ctx.Path().Module()) + diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) + if diags.HasErrors() { return nil, nil, deferred, keyData, diags } @@ -2208,13 +2210,13 @@ func (n *NodeAbstractResourceInstance) applyDataSource(ctx EvalContext, planned return nil, keyData, diags } - diags = diags.Append( - ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()).InConfigBody(n.Config.Config, n.Addr.String()), - ) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) + if diags.HasErrors() { return nil, keyData, diags } - configVal = marks.RemoveDeprecationMarks(configVal) newVal, readDeferred, readDiags := n.readDataSource(ctx, configVal) if check, nested := n.nestedInCheckBlock(); nested { @@ -2527,8 +2529,9 @@ func (n *NodeAbstractResourceInstance) evalProvisionerConfig(ctx EvalContext, bo config, _, configDiags := ctx.EvaluateBlock(body, schema, n.ResourceInstanceAddr().Resource, keyData) diags = diags.Append(configDiags) - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(config, schema, n.ModulePath()).InConfigBody(body, n.Addr.String())) - config = marks.RemoveDeprecationMarks(config) + var deprecationDiags tfdiags.Diagnostics + config, deprecationDiags = ctx.Deprecations().ValidateAsConfig(config, schema, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(body, n.Addr.String())) return config, diags } @@ -2546,8 +2549,9 @@ func (n *NodeAbstractResourceInstance) evalDestroyProvisionerConfig(ctx EvalCont evalScope := ctx.EvaluationScope(n.ResourceInstanceAddr().Resource, nil, keyData) config, evalDiags := evalScope.EvalSelfBlock(body, self, schema, keyData) diags = diags.Append(evalDiags) - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(config, schema, n.ModulePath()).InConfigBody(body, n.Addr.String())) - config = marks.RemoveDeprecationMarks(config) + var deprecationDiags tfdiags.Diagnostics + config, deprecationDiags = ctx.Deprecations().ValidateAsConfig(config, schema, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(body, n.Addr.String())) return config, diags } diff --git a/internal/terraform/node_resource_ephemeral.go b/internal/terraform/node_resource_ephemeral.go index 93530ccaf6..9991d6571d 100644 --- a/internal/terraform/node_resource_ephemeral.go +++ b/internal/terraform/node_resource_ephemeral.go @@ -76,7 +76,9 @@ func ephemeralResourceOpen(ctx EvalContext, inp ephemeralResourceInput) (*provid if diags.HasErrors() { return nil, diags } - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, ctx.Path().Module()).InConfigBody(config.Config, inp.addr.String())) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, ctx.Path().Module()) + diags = diags.Append(deprecationDiags.InConfigBody(config.Config, inp.addr.String())) if diags.HasErrors() { return nil, diags } diff --git a/internal/terraform/node_resource_plan_instance.go b/internal/terraform/node_resource_plan_instance.go index a18ac8e1ad..2ee1b2237c 100644 --- a/internal/terraform/node_resource_plan_instance.go +++ b/internal/terraform/node_resource_plan_instance.go @@ -662,7 +662,9 @@ func (n *NodePlannableResourceInstance) importState(ctx EvalContext, addr addrs. diags = diags.Append(configDiags) return nil, deferred, diags } - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()).InConfigBody(n.Config.Config, absAddr.String())) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, absAddr.String())) if diags.HasErrors() { return nil, deferred, diags } diff --git a/internal/terraform/node_resource_plan_instance_query.go b/internal/terraform/node_resource_plan_instance_query.go index e99879f708..e1dd8d318f 100644 --- a/internal/terraform/node_resource_plan_instance_query.go +++ b/internal/terraform/node_resource_plan_instance_query.go @@ -8,7 +8,6 @@ import ( "log" "github.com/hashicorp/terraform/internal/addrs" - "github.com/hashicorp/terraform/internal/lang/marks" "github.com/hashicorp/terraform/internal/plans" "github.com/hashicorp/terraform/internal/providers" "github.com/hashicorp/terraform/internal/tfdiags" @@ -50,8 +49,9 @@ func (n *NodePlannableResourceInstance) listResourceExecute(ctx EvalContext) (di if diags.HasErrors() { return diags } - - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(blockVal, schema.FullSchema, n.ModulePath()).InConfigBody(config.Config, n.Addr.String())) + var deprecationDiags tfdiags.Diagnostics + blockVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(blockVal, schema.FullSchema, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(config.Config, n.Addr.String())) if diags.HasErrors() { return diags } @@ -74,7 +74,6 @@ func (n *NodePlannableResourceInstance) listResourceExecute(ctx EvalContext) (di var limitDeprecationDiags tfdiags.Diagnostics limitCty, limitDeprecationDiags = ctx.Deprecations().Validate(limitCty, ctx.Path().Module(), config.List.Limit.Range().Ptr()) diags = diags.Append(limitDeprecationDiags) - limitCty = marks.RemoveDeprecationMarks(limitCty) } includeRscCty, includeRsc, includeDiags := newIncludeRscEvaluator(false).EvaluateExpr(ctx, config.List.IncludeResource) @@ -87,7 +86,6 @@ func (n *NodePlannableResourceInstance) listResourceExecute(ctx EvalContext) (di var includeDeprecationDiags tfdiags.Diagnostics includeRscCty, includeDeprecationDiags = ctx.Deprecations().Validate(includeRscCty, ctx.Path().Module(), config.List.IncludeResource.Range().Ptr()) diags = diags.Append(includeDeprecationDiags) - includeRscCty = marks.RemoveDeprecationMarks(includeRscCty) } rId := HookResourceIdentity{ diff --git a/internal/terraform/node_resource_plan_partialexp.go b/internal/terraform/node_resource_plan_partialexp.go index a8c2b34fca..05573203d3 100644 --- a/internal/terraform/node_resource_plan_partialexp.go +++ b/internal/terraform/node_resource_plan_partialexp.go @@ -200,7 +200,9 @@ func (n *nodePlannablePartialExpandedResource) managedResourceExecute(ctx EvalCo return &change, diags } - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ResourceAddr().Module).InConfigBody(n.config.Config, n.addr.String())) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ResourceAddr().Module) + diags = diags.Append(deprecationDiags.InConfigBody(n.config.Config, n.addr.String())) if diags.HasErrors() { return &change, diags } @@ -359,7 +361,9 @@ func (n *nodePlannablePartialExpandedResource) dataResourceExecute(ctx EvalConte return &change, diags } - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ResourceAddr().Module).InConfigBody(n.config.Config, n.addr.String())) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ResourceAddr().Module) + diags = diags.Append(deprecationDiags.InConfigBody(n.config.Config, n.addr.String())) if diags.HasErrors() { return &change, diags } diff --git a/internal/terraform/node_resource_validate.go b/internal/terraform/node_resource_validate.go index c918cb32f4..fa2e4b5e67 100644 --- a/internal/terraform/node_resource_validate.go +++ b/internal/terraform/node_resource_validate.go @@ -19,7 +19,6 @@ import ( "github.com/hashicorp/terraform/internal/lang/ephemeral" "github.com/hashicorp/terraform/internal/lang/format" "github.com/hashicorp/terraform/internal/lang/langrefs" - "github.com/hashicorp/terraform/internal/lang/marks" "github.com/hashicorp/terraform/internal/providers" "github.com/hashicorp/terraform/internal/provisioners" "github.com/hashicorp/terraform/internal/tfdiags" @@ -144,9 +143,11 @@ func (n *NodeValidatableResource) evaluateBlock(ctx EvalContext, body hcl.Body, keyData, selfAddr := n.stubRepetitionData(n.Config.Count != nil, n.Config.ForEach != nil) val, hclBody, diags := ctx.EvaluateBlock(body, schema, selfAddr, keyData) - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(val, schema, n.Addr.Module).InConfigBody(body, n.Addr.String())) - return marks.RemoveDeprecationMarks(val), hclBody, diags + var deprecationDiags tfdiags.Diagnostics + val, deprecationDiags = ctx.Deprecations().ValidateAsConfig(val, schema, n.Addr.Module) + diags = diags.Append(deprecationDiags.InConfigBody(body, n.Addr.String())) + return val, hclBody, diags } // connectionBlockSupersetSchema is a schema representing the superset of all @@ -360,7 +361,9 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag diags = diags.Append( validateResourceForbiddenEphemeralValues(ctx, configVal, schema.Body).InConfigBody(n.Config.Config, n.Addr.String()), ) - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()).InConfigBody(n.Config.Config, n.Addr.String())) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) if n.Config.Managed != nil { // can be nil only in tests with poorly-configured mocks for _, traversal := range n.Config.Managed.IgnoreChanges { @@ -440,7 +443,9 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag diags = diags.Append( validateResourceForbiddenEphemeralValues(ctx, configVal, schema.Body).InConfigBody(n.Config.Config, n.Addr.String()), ) - diags = diags.Append(ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath())) + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()) + diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) // Use unmarked value for validate request unmarkedConfigVal, _ := configVal.UnmarkDeep() @@ -468,8 +473,10 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag if valDiags.HasErrors() { return diags } + var deprecationDiags tfdiags.Diagnostics + configVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()) diags = diags.Append( - ctx.Deprecations().ValidateAsConfig(configVal, schema.Body, n.ModulePath()).InConfigBody(n.Config.Config, n.Addr.String()), + deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String()), ) // Use unmarked value for validate request unmarkedConfigVal, _ := configVal.UnmarkDeep() @@ -502,7 +509,8 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag if valDiags.HasErrors() { return diags } - deprecationDiags := ctx.Deprecations().ValidateAsConfig(blockVal, schema.FullSchema, n.ModulePath()) + var deprecationDiags tfdiags.Diagnostics + blockVal, deprecationDiags = ctx.Deprecations().ValidateAsConfig(blockVal, schema.FullSchema, n.ModulePath()) diags = diags.Append(deprecationDiags.InConfigBody(n.Config.Config, n.Addr.String())) } @@ -513,9 +521,9 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag if limitDiags.HasErrors() { return diags } - _, deprecationDiags := ctx.Deprecations().Validate(limit, n.ModulePath(), n.Config.List.Limit.Range().Ptr()) + var deprecationDiags tfdiags.Diagnostics + limit, deprecationDiags = ctx.Deprecations().Validate(limit, n.ModulePath(), n.Config.List.Limit.Range().Ptr()) diags = diags.Append(deprecationDiags) - limit = marks.RemoveDeprecationMarks(limit) } if n.Config.List.IncludeResource != nil { @@ -524,9 +532,9 @@ func (n *NodeValidatableResource) validateResource(ctx EvalContext) tfdiags.Diag if includeDiags.HasErrors() { return diags } - _, deprecationDiags := ctx.Deprecations().Validate(includeResource, n.ModulePath(), n.Config.List.IncludeResource.Range().Ptr()) + var deprecationDiags tfdiags.Diagnostics + includeResource, deprecationDiags = ctx.Deprecations().Validate(includeResource, n.ModulePath(), n.Config.List.IncludeResource.Range().Ptr()) diags = diags.Append(deprecationDiags) - includeResource = marks.RemoveDeprecationMarks(includeResource) } // Use unmarked value for validate request