Skip to content

Commit da22823

Browse files
Fix nested computed read (#2181)
Fixes an issue with the SDKv2 and PF input extraction. During import we wrongly return values for properties which are fully computed which causes invalid programs to be generated. ~The object check in `CastToTypeObject` was wrong for SDKV2 objects: https://github.com/pulumi/pulumi-terraform-bridge/blob/48fd41bd16e2f7f933bb9390ab7619d52faabb6d/pkg/tfshim/util/types.go#L36~ The `CastToTypeObject` object check is wrong for both SDKv2 and PF. For the SDKV2 only sets and lists can have a `Resource` `.Elem`. For PF it list-nested blocks are represented with a `Resource` `.Elem` in the shim layer, so the check did not catch these. PF details here: #2231 This fixes the check and adds regression tests for the broken imports which resulted from 2180. Test coverage added in #2224 for sdkv2 and #2225 for pf. fixes #2180 depends on pulumi/providertest#91 stacked on #2225
1 parent bf90025 commit da22823

File tree

13 files changed

+146
-53
lines changed

13 files changed

+146
-53
lines changed

dynamic/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -760,8 +760,8 @@ github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs=
760760
github.com/pulumi/esc v0.9.1/go.mod h1:oEJ6bOsjYlQUpjf70GiX+CXn3VBmpwFDxUTlmtUN84c=
761761
github.com/pulumi/inflector v0.1.1 h1:dvlxlWtXwOJTUUtcYDvwnl6Mpg33prhK+7mzeF+SobA=
762762
github.com/pulumi/inflector v0.1.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY=
763-
github.com/pulumi/providertest v0.0.13 h1:9CAaoviOTuCVHDI15h3znXa5JsKYtXLYHIIdxOCzo3Y=
764-
github.com/pulumi/providertest v0.0.13/go.mod h1:REAoaN+hGOtdWJGirfWYqcSjCejlbGfzyVTUuemJTuE=
763+
github.com/pulumi/providertest v0.0.14 h1:5QlAPAAs82jkQraHsJvq1xgVfC7xtW8sFJwv2pHgxQ8=
764+
github.com/pulumi/providertest v0.0.14/go.mod h1:GcsqEGgSngwaNOD+kICJPIUQlnA911fGBU8HDlJvVL0=
765765
github.com/pulumi/pulumi-java/pkg v0.11.0 h1:Jw9gBvyfmfOMq/EkYDm9+zGPxsDAA8jfeMpHmtZ+1oA=
766766
github.com/pulumi/pulumi-java/pkg v0.11.0/go.mod h1:sXAk25P47AQVQL6ilAbFmRNgZykC7og/+87ihnqzFTc=
767767
github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8 h1:mav2tSitA9BPJPLLahKgepHyYsMzwaTm4cvp0dcTMYw=

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ require (
3636
github.com/mitchellh/reflectwalk v1.0.2
3737
github.com/pkg/errors v0.9.1
3838
github.com/pulumi/inflector v0.1.1
39-
github.com/pulumi/providertest v0.0.13
39+
github.com/pulumi/providertest v0.0.14
4040
github.com/pulumi/pulumi-java/pkg v0.11.0
4141
github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8
4242
github.com/pulumi/pulumi-yaml v1.9.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1902,8 +1902,8 @@ github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs=
19021902
github.com/pulumi/esc v0.9.1/go.mod h1:oEJ6bOsjYlQUpjf70GiX+CXn3VBmpwFDxUTlmtUN84c=
19031903
github.com/pulumi/inflector v0.1.1 h1:dvlxlWtXwOJTUUtcYDvwnl6Mpg33prhK+7mzeF+SobA=
19041904
github.com/pulumi/inflector v0.1.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY=
1905-
github.com/pulumi/providertest v0.0.13 h1:9CAaoviOTuCVHDI15h3znXa5JsKYtXLYHIIdxOCzo3Y=
1906-
github.com/pulumi/providertest v0.0.13/go.mod h1:REAoaN+hGOtdWJGirfWYqcSjCejlbGfzyVTUuemJTuE=
1905+
github.com/pulumi/providertest v0.0.14 h1:5QlAPAAs82jkQraHsJvq1xgVfC7xtW8sFJwv2pHgxQ8=
1906+
github.com/pulumi/providertest v0.0.14/go.mod h1:GcsqEGgSngwaNOD+kICJPIUQlnA911fGBU8HDlJvVL0=
19071907
github.com/pulumi/pulumi-java/pkg v0.11.0 h1:Jw9gBvyfmfOMq/EkYDm9+zGPxsDAA8jfeMpHmtZ+1oA=
19081908
github.com/pulumi/pulumi-java/pkg v0.11.0/go.mod h1:sXAk25P47AQVQL6ilAbFmRNgZykC7og/+87ihnqzFTc=
19091909
github.com/pulumi/pulumi-yaml v1.9.1 h1:JPeI80M23SPactxgnCFS1casZlSr7ZhAXwSx4H55QQ4=

pf/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1901,8 +1901,8 @@ github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs=
19011901
github.com/pulumi/esc v0.9.1/go.mod h1:oEJ6bOsjYlQUpjf70GiX+CXn3VBmpwFDxUTlmtUN84c=
19021902
github.com/pulumi/inflector v0.1.1 h1:dvlxlWtXwOJTUUtcYDvwnl6Mpg33prhK+7mzeF+SobA=
19031903
github.com/pulumi/inflector v0.1.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY=
1904-
github.com/pulumi/providertest v0.0.13 h1:9CAaoviOTuCVHDI15h3znXa5JsKYtXLYHIIdxOCzo3Y=
1905-
github.com/pulumi/providertest v0.0.13/go.mod h1:REAoaN+hGOtdWJGirfWYqcSjCejlbGfzyVTUuemJTuE=
1904+
github.com/pulumi/providertest v0.0.14 h1:5QlAPAAs82jkQraHsJvq1xgVfC7xtW8sFJwv2pHgxQ8=
1905+
github.com/pulumi/providertest v0.0.14/go.mod h1:GcsqEGgSngwaNOD+kICJPIUQlnA911fGBU8HDlJvVL0=
19061906
github.com/pulumi/pulumi-java/pkg v0.11.0 h1:Jw9gBvyfmfOMq/EkYDm9+zGPxsDAA8jfeMpHmtZ+1oA=
19071907
github.com/pulumi/pulumi-java/pkg v0.11.0/go.mod h1:sXAk25P47AQVQL6ilAbFmRNgZykC7og/+87ihnqzFTc=
19081908
github.com/pulumi/pulumi-yaml v1.9.1 h1:JPeI80M23SPactxgnCFS1casZlSr7ZhAXwSx4H55QQ4=

pf/tests/extract_inputs_test.go

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,6 @@ func TestExtractInputsFromOutputsPF(t *testing.T) {
703703
}}},
704704
}),
705705
},
706-
// TODO[pulumi/pulumi-terraform-bridge#2180]: This should not yield values for computed properties
707706
{
708707
name: "list nested block computed not extracted",
709708
props: resource.NewPropertyMapFromMap(map[string]interface{}{
@@ -727,12 +726,9 @@ func TestExtractInputsFromOutputsPF(t *testing.T) {
727726
V: []resource.PropertyValue{},
728727
},
729728
resource.PropertyKey("block_field"): resource.PropertyValue{V: []resource.PropertyValue{{
730-
V: resource.PropertyMap{
731-
resource.PropertyKey("__defaults"): resource.PropertyValue{
732-
V: []resource.PropertyValue{},
733-
},
734-
resource.PropertyKey("nested_field"): resource.PropertyValue{V: "nested_value"}, // wrong
735-
},
729+
V: resource.PropertyMap{resource.PropertyKey("__defaults"): resource.PropertyValue{
730+
V: []resource.PropertyValue{},
731+
}},
736732
}}},
737733
}),
738734
},
@@ -801,7 +797,6 @@ func TestExtractInputsFromOutputsPF(t *testing.T) {
801797
}}},
802798
}),
803799
},
804-
// TODO[pulumi/pulumi-terraform-bridge#2180]: This should not yield values for computed properties
805800
{
806801
name: "set nested block computed not extracted",
807802
props: resource.NewPropertyMapFromMap(map[string]interface{}{
@@ -825,12 +820,9 @@ func TestExtractInputsFromOutputsPF(t *testing.T) {
825820
V: []resource.PropertyValue{},
826821
},
827822
resource.PropertyKey("block_field"): resource.PropertyValue{V: []resource.PropertyValue{{
828-
V: resource.PropertyMap{
829-
resource.PropertyKey("__defaults"): resource.PropertyValue{
830-
V: []resource.PropertyValue{},
831-
},
832-
resource.PropertyKey("nested_field"): resource.PropertyValue{V: "nested_value"}, //wrong
833-
},
823+
V: resource.PropertyMap{resource.PropertyKey("__defaults"): resource.PropertyValue{
824+
V: []resource.PropertyValue{},
825+
}},
834826
}}},
835827
}),
836828
},

pf/tests/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0
99
github.com/hashicorp/terraform-provider-tls/shim v0.0.0-00010101000000-000000000000
1010
github.com/hexops/autogold/v2 v2.2.1
11-
github.com/pulumi/providertest v0.0.13
11+
github.com/pulumi/providertest v0.0.14
1212
github.com/pulumi/pulumi-terraform-bridge/pf v0.0.0
1313
github.com/pulumi/pulumi-terraform-bridge/v3 v3.87.0
1414
github.com/stretchr/testify v1.9.0

pf/tests/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1928,8 +1928,8 @@ github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs=
19281928
github.com/pulumi/esc v0.9.1/go.mod h1:oEJ6bOsjYlQUpjf70GiX+CXn3VBmpwFDxUTlmtUN84c=
19291929
github.com/pulumi/inflector v0.1.1 h1:dvlxlWtXwOJTUUtcYDvwnl6Mpg33prhK+7mzeF+SobA=
19301930
github.com/pulumi/inflector v0.1.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY=
1931-
github.com/pulumi/providertest v0.0.13 h1:9CAaoviOTuCVHDI15h3znXa5JsKYtXLYHIIdxOCzo3Y=
1932-
github.com/pulumi/providertest v0.0.13/go.mod h1:REAoaN+hGOtdWJGirfWYqcSjCejlbGfzyVTUuemJTuE=
1931+
github.com/pulumi/providertest v0.0.14 h1:5QlAPAAs82jkQraHsJvq1xgVfC7xtW8sFJwv2pHgxQ8=
1932+
github.com/pulumi/providertest v0.0.14/go.mod h1:GcsqEGgSngwaNOD+kICJPIUQlnA911fGBU8HDlJvVL0=
19331933
github.com/pulumi/pulumi-java/pkg v0.11.0 h1:Jw9gBvyfmfOMq/EkYDm9+zGPxsDAA8jfeMpHmtZ+1oA=
19341934
github.com/pulumi/pulumi-java/pkg v0.11.0/go.mod h1:sXAk25P47AQVQL6ilAbFmRNgZykC7og/+87ihnqzFTc=
19351935
github.com/pulumi/pulumi-yaml v1.9.1 h1:JPeI80M23SPactxgnCFS1casZlSr7ZhAXwSx4H55QQ4=

pkg/tests/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0
1212
github.com/hexops/autogold/v2 v2.2.1
1313
github.com/hexops/valast v1.4.4
14-
github.com/pulumi/providertest v0.0.13
14+
github.com/pulumi/providertest v0.0.14
1515
github.com/pulumi/pulumi-terraform-bridge/v3 v3.80.0
1616
github.com/stretchr/testify v1.9.0
1717
gotest.tools v2.2.0+incompatible

pkg/tests/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1912,8 +1912,8 @@ github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs=
19121912
github.com/pulumi/esc v0.9.1/go.mod h1:oEJ6bOsjYlQUpjf70GiX+CXn3VBmpwFDxUTlmtUN84c=
19131913
github.com/pulumi/inflector v0.1.1 h1:dvlxlWtXwOJTUUtcYDvwnl6Mpg33prhK+7mzeF+SobA=
19141914
github.com/pulumi/inflector v0.1.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY=
1915-
github.com/pulumi/providertest v0.0.13 h1:9CAaoviOTuCVHDI15h3znXa5JsKYtXLYHIIdxOCzo3Y=
1916-
github.com/pulumi/providertest v0.0.13/go.mod h1:REAoaN+hGOtdWJGirfWYqcSjCejlbGfzyVTUuemJTuE=
1915+
github.com/pulumi/providertest v0.0.14 h1:5QlAPAAs82jkQraHsJvq1xgVfC7xtW8sFJwv2pHgxQ8=
1916+
github.com/pulumi/providertest v0.0.14/go.mod h1:GcsqEGgSngwaNOD+kICJPIUQlnA911fGBU8HDlJvVL0=
19171917
github.com/pulumi/pulumi-java/pkg v0.11.0 h1:Jw9gBvyfmfOMq/EkYDm9+zGPxsDAA8jfeMpHmtZ+1oA=
19181918
github.com/pulumi/pulumi-java/pkg v0.11.0/go.mod h1:sXAk25P47AQVQL6ilAbFmRNgZykC7og/+87ihnqzFTc=
19191919
github.com/pulumi/pulumi-yaml v1.9.1 h1:JPeI80M23SPactxgnCFS1casZlSr7ZhAXwSx4H55QQ4=

pkg/tests/schema_pulumi_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,3 +1396,81 @@ Resources:
13961396
})
13971397
}
13981398
}
1399+
1400+
func TestFullyComputedNestedAttribute(t *testing.T) {
1401+
resMap := map[string]*schema.Resource{
1402+
"prov_test": {
1403+
Schema: map[string]*schema.Schema{
1404+
"attached_disks": {
1405+
Type: schema.TypeList,
1406+
Optional: true,
1407+
Elem: &schema.Resource{
1408+
Schema: map[string]*schema.Schema{
1409+
"name": {
1410+
Optional: true,
1411+
Type: schema.TypeString,
1412+
},
1413+
"key256": {
1414+
Computed: true,
1415+
Type: schema.TypeString,
1416+
},
1417+
},
1418+
},
1419+
},
1420+
"top_level_computed": {
1421+
Type: schema.TypeString,
1422+
Computed: true,
1423+
},
1424+
},
1425+
},
1426+
}
1427+
1428+
importer := func(val any) func(context.Context, *schema.ResourceData, interface{}) ([]*schema.ResourceData, error) {
1429+
return func(ctx context.Context, rd *schema.ResourceData, i interface{}) ([]*schema.ResourceData, error) {
1430+
elMap := map[string]any{
1431+
"name": "disk1",
1432+
"key256": val,
1433+
}
1434+
err := rd.Set("attached_disks", []map[string]any{elMap})
1435+
require.NoError(t, err)
1436+
1437+
err = rd.Set("top_level_computed", "computed_val")
1438+
require.NoError(t, err)
1439+
1440+
return []*schema.ResourceData{rd}, nil
1441+
}
1442+
}
1443+
bridgedProvider := pulcheck.BridgedProvider(t, "prov", resMap)
1444+
1445+
program := `
1446+
name: test
1447+
runtime: yaml
1448+
`
1449+
for _, tc := range []struct {
1450+
name string
1451+
importVal any
1452+
}{
1453+
{
1454+
"non-nil",
1455+
"val1",
1456+
},
1457+
{
1458+
"nil",
1459+
nil,
1460+
},
1461+
} {
1462+
t.Run(tc.name, func(t *testing.T) {
1463+
resMap["prov_test"].Importer = &schema.ResourceImporter{
1464+
StateContext: importer(tc.importVal),
1465+
}
1466+
1467+
pt := pulcheck.PulCheck(t, bridgedProvider, program)
1468+
1469+
res := pt.Import("prov:index/test:Test", "res1", "id1", "")
1470+
1471+
t.Logf(res.Stdout)
1472+
1473+
require.NotContains(t, res.Stdout, "One or more imported inputs failed to validate")
1474+
})
1475+
}
1476+
}

0 commit comments

Comments
 (0)