mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
Merge pull request #31290 from hashicorp/alisdair/check-block-missing-condition
configs: Fix check block configuration diagnostics
This commit is contained in:
commit
5df6bac2f7
@ -40,7 +40,15 @@ type CheckRule struct {
|
|||||||
// is found.
|
// is found.
|
||||||
func (cr *CheckRule) validateSelfReferences(checkType string, addr addrs.Resource) hcl.Diagnostics {
|
func (cr *CheckRule) validateSelfReferences(checkType string, addr addrs.Resource) hcl.Diagnostics {
|
||||||
var diags hcl.Diagnostics
|
var diags hcl.Diagnostics
|
||||||
refs, _ := lang.References(cr.Condition.Variables())
|
exprs := []hcl.Expression{
|
||||||
|
cr.Condition,
|
||||||
|
cr.ErrorMessage,
|
||||||
|
}
|
||||||
|
for _, expr := range exprs {
|
||||||
|
if expr == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
refs, _ := lang.References(expr.Variables())
|
||||||
for _, ref := range refs {
|
for _, ref := range refs {
|
||||||
var refAddr addrs.Resource
|
var refAddr addrs.Resource
|
||||||
|
|
||||||
@ -58,11 +66,12 @@ func (cr *CheckRule) validateSelfReferences(checkType string, addr addrs.Resourc
|
|||||||
Severity: hcl.DiagError,
|
Severity: hcl.DiagError,
|
||||||
Summary: fmt.Sprintf("Invalid reference in %s", checkType),
|
Summary: fmt.Sprintf("Invalid reference in %s", checkType),
|
||||||
Detail: fmt.Sprintf("Configuration for %s may not refer to itself.", addr.String()),
|
Detail: fmt.Sprintf("Configuration for %s may not refer to itself.", addr.String()),
|
||||||
Subject: cr.Condition.Range().Ptr(),
|
Subject: expr.Range().Ptr(),
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return diags
|
return diags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
29
internal/configs/testdata/invalid-files/precondition-postcondition-badref.tf
vendored
Normal file
29
internal/configs/testdata/invalid-files/precondition-postcondition-badref.tf
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
data "example" "example" {
|
||||||
|
foo = 5
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
precondition {
|
||||||
|
condition = data.example.example.foo == 5 # ERROR: Invalid reference in precondition
|
||||||
|
error_message = "Must be five."
|
||||||
|
}
|
||||||
|
postcondition {
|
||||||
|
condition = self.foo == 5
|
||||||
|
error_message = "Must be five, but is ${data.example.example.foo}." # ERROR: Invalid reference in postcondition
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "example" "example" {
|
||||||
|
foo = 5
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
precondition {
|
||||||
|
condition = example.example.foo == 5 # ERROR: Invalid reference in precondition
|
||||||
|
error_message = "Must be five."
|
||||||
|
}
|
||||||
|
postcondition {
|
||||||
|
condition = self.foo == 5
|
||||||
|
error_message = "Must be five, but is ${example.example.foo}." # ERROR: Invalid reference in postcondition
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
internal/configs/testdata/invalid-files/precondition-postcondition-missing-condition.tf
vendored
Normal file
12
internal/configs/testdata/invalid-files/precondition-postcondition-missing-condition.tf
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
resource "example" "example" {
|
||||||
|
foo = 5
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
precondition { # ERROR: Missing required argument
|
||||||
|
error_message = "Can a check block fail without a condition?"
|
||||||
|
}
|
||||||
|
postcondition { # ERROR: Missing required argument
|
||||||
|
error_message = "Do not try to pass the check; only realize that there is no check."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user