summaryrefslogtreecommitdiff
path: root/ext/typeexpr
diff options
context:
space:
mode:
authorKazuma Watanabe <watassbass@gmail.com>2023-08-30 15:05:21 +0000
committerMartin Atkins <mart@degeneration.co.uk>2023-08-30 08:39:54 -0700
commited6d4bf93b5d9b862dae35dcd605f4d609d3dd7c (patch)
treeff1b9888b0bf96e766b59525921f4dd3e255b156 /ext/typeexpr
parenta9f8d65cae3cf64e58fc38f85c7970ab62964e8b (diff)
ext/typeexpr: Avoid refinements on dynamic values
Diffstat (limited to 'ext/typeexpr')
-rw-r--r--ext/typeexpr/defaults.go2
-rw-r--r--ext/typeexpr/defaults_test.go17
2 files changed, 18 insertions, 1 deletions
diff --git a/ext/typeexpr/defaults.go b/ext/typeexpr/defaults.go
index 43a2539..d3d6be2 100644
--- a/ext/typeexpr/defaults.go
+++ b/ext/typeexpr/defaults.go
@@ -95,7 +95,7 @@ func (d *Defaults) apply(v cty.Value) cty.Value {
}
values[key] = defaultValue
}
- if defaultRng := defaultValue.Range(); defaultRng.DefinitelyNotNull() {
+ if defaultRng := defaultValue.Range(); defaultRng.DefinitelyNotNull() && values[key].Type() != cty.DynamicPseudoType {
values[key] = values[key].RefineNotNull()
}
}
diff --git a/ext/typeexpr/defaults_test.go b/ext/typeexpr/defaults_test.go
index 5f0588f..dc3a3f4 100644
--- a/ext/typeexpr/defaults_test.go
+++ b/ext/typeexpr/defaults_test.go
@@ -898,6 +898,23 @@ func TestDefaults_Apply(t *testing.T) {
"foo": cty.UnknownVal(cty.String).RefineNotNull(),
}),
},
+ "optional attribute with dynamic value can be null": {
+ defaults: &Defaults{
+ Type: cty.ObjectWithOptionalAttrs(map[string]cty.Type{
+ "foo": cty.String,
+ }, []string{"foo"}),
+ DefaultValues: map[string]cty.Value{
+ "foo": cty.StringVal("bar"), // Important: default is non-null
+ },
+ },
+ value: cty.ObjectVal(map[string]cty.Value{
+ "foo": cty.DynamicVal,
+ }),
+ want: cty.ObjectVal(map[string]cty.Value{
+ // The default value is itself non-null, but dynamic value cannot be refined.
+ "foo": cty.DynamicVal,
+ }),
+ },
}
for name, tc := range testCases {