diff --git a/internal/lang/checks.go b/internal/lang/checks.go index 7c6b39818a..9ad8d91e04 100644 --- a/internal/lang/checks.go +++ b/internal/lang/checks.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/hashicorp/hcl/v2" + "github.com/hashicorp/terraform/internal/addrs" "github.com/hashicorp/terraform/internal/lang/marks" "github.com/hashicorp/terraform/internal/tfdiags" "github.com/zclconf/go-cty/cty" @@ -21,7 +22,7 @@ import ( // It will either return a non-empty message string or it'll return diagnostics // with either errors or warnings that explain why the given expression isn't // acceptable. -func EvalCheckErrorMessage(expr hcl.Expression, hclCtx *hcl.EvalContext) (string, tfdiags.Diagnostics) { +func EvalCheckErrorMessage(expr hcl.Expression, hclCtx *hcl.EvalContext, ruleAddr *addrs.CheckRule) (string, tfdiags.Diagnostics) { var diags tfdiags.Diagnostics val, hclDiags := expr.Value(hclCtx) @@ -73,6 +74,13 @@ You can correct this by removing references to sensitive values, or by carefully } if _, ephemeral := valMarks[marks.Ephemeral]; ephemeral { + var extra interface{} + if ruleAddr != nil { + extra = &addrs.CheckRuleDiagnosticExtra{ + CheckRule: *ruleAddr, + } + } + diags = diags.Append(&hcl.Diagnostic{ Severity: hcl.DiagWarning, Summary: "Error message refers to ephemeral values", @@ -80,6 +88,7 @@ You can correct this by removing references to sensitive values, or by carefully You can correct this by removing references to ephemeral values, or by using the ephemeralasnull() function on the references to not reveal ephemeral data.`, Subject: expr.Range().Ptr(), + Extra: extra, }) return "", diags } diff --git a/internal/moduletest/eval_context.go b/internal/moduletest/eval_context.go index 3822d2b119..0c4583b706 100644 --- a/internal/moduletest/eval_context.go +++ b/internal/moduletest/eval_context.go @@ -109,7 +109,7 @@ func (ec *EvalContext) Evaluate() (Status, cty.Value, tfdiags.Diagnostics) { continue } - errorMessage, moreDiags := lang.EvalCheckErrorMessage(rule.ErrorMessage, hclCtx) + errorMessage, moreDiags := lang.EvalCheckErrorMessage(rule.ErrorMessage, hclCtx, nil) ruleDiags = ruleDiags.Append(moreDiags) runVal, hclDiags := rule.Condition.Value(hclCtx) diff --git a/internal/terraform/eval_conditions.go b/internal/terraform/eval_conditions.go index 09be10951d..6a221339e4 100644 --- a/internal/terraform/eval_conditions.go +++ b/internal/terraform/eval_conditions.go @@ -103,7 +103,7 @@ func validateCheckRule(addr addrs.CheckRule, rule *configs.CheckRule, ctx EvalCo hclCtx, moreDiags := scope.EvalContext(refs) diags = diags.Append(moreDiags) - errorMessage, moreDiags := lang.EvalCheckErrorMessage(rule.ErrorMessage, hclCtx) + errorMessage, moreDiags := lang.EvalCheckErrorMessage(rule.ErrorMessage, hclCtx, &addr) diags = diags.Append(moreDiags) return errorMessage, hclCtx, diags