Merge pull request #37812 from hashicorp/backport/jbardin/unknown-pure-results/trivially-positive-lizard

Backport of filesystem functions, don't cache unknown function results into v1.14
pull/37929/head
James Bardin 5 months ago committed by GitHub
commit 4cee65849b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -51,6 +51,16 @@ func (f *FunctionResults) CheckPrior(name string, args []cty.Value, result cty.V
// CheckPriorProvider compares the provider function call against any cached
// results, and returns an error if the result does not match a prior call.
func (f *FunctionResults) CheckPriorProvider(provider addrs.Provider, name string, args []cty.Value, result cty.Value) error {
// Don't cache unknown values. We could technically store types and
// refinements for validation, but we don't currently have a way to
// serialize those in the plan. Unknowns are also handled much more
// gracefully throughout the evaluation system, whereas invalid data is
// harder to trace back to the source since it's usually only visible due to
// unexpected side-effects.
if !result.IsKnown() {
return nil
}
argSum := sha256.New()
if !provider.IsZero() {

@ -72,7 +72,7 @@ func TestFunctionCache(t *testing.T) {
result: cty.False,
},
// result changed from unknown => false
expectErr: true,
expectErr: false,
},
{
first: testCall{
@ -172,6 +172,9 @@ func TestFunctionCache(t *testing.T) {
if err != nil && !test.expectErr {
t.Fatal(err)
}
if err == nil && test.expectErr {
t.Fatal("expected error")
}
// reload the data to ensure we validate identically
newResults := NewFunctionResultsTable(results.GetHashes())

Loading…
Cancel
Save