lang: Add Extra to avoid duplicate diagnostic in check blocks (#35944)

pull/35903/head
Radek Simko 1 year ago committed by GitHub
parent 7cf7cc8a94
commit 79a35f3968
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -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
}

@ -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)

@ -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

Loading…
Cancel
Save