Skip to content

Commit 609a9a9

Browse files
moduliremilapeyre
andcommitted
chore: Add script to generate data sources
Co-authored-by: Rémi Lapeyre <[email protected]>
1 parent e847f5f commit 609a9a9

File tree

4 files changed

+823
-1
lines changed

4 files changed

+823
-1
lines changed

go.mod

+16-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ go 1.22.2
44

55
require (
66
github.com/YakDriver/regexache v0.23.0
7+
github.com/go-openapi/loads v0.22.0
8+
github.com/go-openapi/spec v0.21.0
79
github.com/hashicorp/boundary v0.16.0
810
github.com/hashicorp/boundary/api v0.0.49
911
github.com/hashicorp/boundary/sdk v0.0.46
@@ -17,10 +19,13 @@ require (
1719
github.com/hashicorp/terraform-plugin-docs v0.18.0
1820
github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0
1921
github.com/jimlambrt/gldap v0.1.11
22+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
2023
github.com/kr/pretty v0.3.1
2124
github.com/mitchellh/go-homedir v1.1.0
25+
github.com/sanity-io/litter v1.5.5
2226
github.com/stretchr/testify v1.9.0
2327
golang.org/x/crypto v0.21.0
28+
golang.org/x/text v0.14.0
2429
mvdan.cc/gofumpt v0.6.0
2530
)
2631

@@ -41,6 +46,7 @@ require (
4146
github.com/alessio/shellescape v1.4.2 // indirect
4247
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
4348
github.com/armon/go-radix v1.0.0 // indirect
49+
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
4450
github.com/beorn7/perks v1.0.1 // indirect
4551
github.com/bgentry/speakeasy v0.1.0 // indirect
4652
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
@@ -65,6 +71,12 @@ require (
6571
github.com/go-asn1-ber/asn1-ber v1.5.5 // indirect
6672
github.com/go-jose/go-jose/v3 v3.0.3 // indirect
6773
github.com/go-ldap/ldap/v3 v3.4.6 // indirect
74+
github.com/go-openapi/analysis v0.23.0 // indirect
75+
github.com/go-openapi/errors v0.22.0 // indirect
76+
github.com/go-openapi/jsonpointer v0.21.0 // indirect
77+
github.com/go-openapi/jsonreference v0.21.0 // indirect
78+
github.com/go-openapi/strfmt v0.23.0 // indirect
79+
github.com/go-openapi/swag v0.23.0 // indirect
6880
github.com/godbus/dbus/v5 v5.1.0 // indirect
6981
github.com/gogo/protobuf v1.3.2 // indirect
7082
github.com/golang-migrate/migrate/v4 v4.17.0 // indirect
@@ -134,8 +146,10 @@ require (
134146
github.com/jinzhu/gorm v1.9.16 // indirect
135147
github.com/jinzhu/inflection v1.0.0 // indirect
136148
github.com/jinzhu/now v1.1.5 // indirect
149+
github.com/josharian/intern v1.0.0 // indirect
137150
github.com/kr/text v0.2.0 // indirect
138151
github.com/lib/pq v1.10.9 // indirect
152+
github.com/mailru/easyjson v0.7.7 // indirect
139153
github.com/mattn/go-colorable v0.1.13 // indirect
140154
github.com/mattn/go-isatty v0.0.20 // indirect
141155
github.com/mattn/go-runewidth v0.0.9 // indirect
@@ -155,6 +169,7 @@ require (
155169
github.com/mtibben/percent v0.2.1 // indirect
156170
github.com/ncruces/go-strftime v0.1.9 // indirect
157171
github.com/oklog/run v1.1.0 // indirect
172+
github.com/oklog/ulid v1.3.1 // indirect
158173
github.com/opencontainers/go-digest v1.0.0 // indirect
159174
github.com/opencontainers/image-spec v1.1.0-rc6 // indirect
160175
github.com/opencontainers/runc v1.2.0-rc.1 // indirect
@@ -186,6 +201,7 @@ require (
186201
github.com/yuin/goldmark-meta v1.1.0 // indirect
187202
github.com/zalando/go-keyring v0.2.3 // indirect
188203
github.com/zclconf/go-cty v1.14.2 // indirect
204+
go.mongodb.org/mongo-driver v1.14.0 // indirect
189205
go.uber.org/atomic v1.11.0 // indirect
190206
golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 // indirect
191207
golang.org/x/mod v0.15.0 // indirect
@@ -194,7 +210,6 @@ require (
194210
golang.org/x/sync v0.6.0 // indirect
195211
golang.org/x/sys v0.18.0 // indirect
196212
golang.org/x/term v0.18.0 // indirect
197-
golang.org/x/text v0.14.0 // indirect
198213
golang.org/x/time v0.5.0 // indirect
199214
golang.org/x/tools v0.17.0 // indirect
200215
google.golang.org/appengine v1.6.8 // indirect

go.sum

+33
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmms
4343
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
4444
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
4545
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
46+
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
47+
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
4648
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
4749
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
4850
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
@@ -79,6 +81,7 @@ github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53E
7981
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
8082
github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs=
8183
github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps=
84+
github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8285
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8386
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8487
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -141,6 +144,22 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
141144
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
142145
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
143146
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
147+
github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU=
148+
github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo=
149+
github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w=
150+
github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE=
151+
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
152+
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
153+
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
154+
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
155+
github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco=
156+
github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs=
157+
github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY=
158+
github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=
159+
github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c=
160+
github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4=
161+
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
162+
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
144163
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
145164
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
146165
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
@@ -387,6 +406,10 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
387406
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
388407
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
389408
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
409+
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
410+
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
411+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
412+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
390413
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
391414
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
392415
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -412,6 +435,8 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
412435
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
413436
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
414437
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
438+
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
439+
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
415440
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
416441
github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ=
417442
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
@@ -472,6 +497,8 @@ github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJm
472497
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
473498
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
474499
github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
500+
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
501+
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
475502
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
476503
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
477504
github.com/opencontainers/image-spec v1.1.0-rc6 h1:XDqvyKsJEbRtATzkgItUqBA7QHk58yxX1Ov9HERHNqU=
@@ -489,6 +516,7 @@ github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsK
489516
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
490517
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
491518
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
519+
github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
492520
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
493521
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
494522
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -518,6 +546,8 @@ github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3V
518546
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
519547
github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=
520548
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
549+
github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo=
550+
github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U=
521551
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
522552
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
523553
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
@@ -542,6 +572,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH
542572
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
543573
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
544574
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
575+
github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
545576
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
546577
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
547578
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -583,6 +614,8 @@ github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51D
583614
github.com/zclconf/go-cty v1.14.2 h1:kTG7lqmBou0Zkx35r6HJHUQTvaRPr5bIAf3AoHS0izI=
584615
github.com/zclconf/go-cty v1.14.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
585616
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
617+
go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80=
618+
go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
586619
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU=
587620
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA=
588621
go.opentelemetry.io/otel v1.23.1 h1:Za4UzOqJYS+MUczKI320AtqZHZb7EqxO00jAHE0jmQY=

internal/provider/data_source.go

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package provider
4+
5+
import (
6+
"fmt"
7+
"strings"
8+
9+
"github.com/hashicorp/boundary/api"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
)
13+
14+
func apiErr(err *api.Error) diag.Diagnostics {
15+
detail := err.Message
16+
if err.Details != nil {
17+
var details []string
18+
for _, field := range err.Details.RequestFields {
19+
details = append(details, fmt.Sprintf("%s: %s", field.Name, field.Description))
20+
}
21+
detail = strings.Join(details, "\n")
22+
}
23+
24+
return diag.Diagnostics{
25+
{
26+
Severity: diag.Error,
27+
Summary: "An error occured while querying the API",
28+
Detail: detail,
29+
},
30+
}
31+
}
32+
33+
func set(schema map[string]*schema.Schema, d *schema.ResourceData, val map[string]interface{}) error {
34+
for k, v := range val {
35+
sch := schema[k]
36+
if sch == nil {
37+
continue
38+
}
39+
v = convert(sch, v)
40+
if err := d.Set(k, v); err != nil {
41+
return fmt.Errorf("failed to set '%s': %w", k, err)
42+
}
43+
}
44+
45+
return nil
46+
}
47+
48+
func convertResource(sch *schema.Resource, val map[string]interface{}) map[string]interface{} {
49+
res := map[string]interface{}{}
50+
for k, s := range sch.Schema {
51+
res[k] = convert(s, val[k])
52+
}
53+
return res
54+
}
55+
56+
func convert(sch *schema.Schema, val interface{}) interface{} {
57+
switch ty := sch.Type; ty {
58+
case schema.TypeBool, schema.TypeInt, schema.TypeFloat, schema.TypeString:
59+
return val
60+
case schema.TypeList:
61+
switch val := val.(type) {
62+
case nil:
63+
return []interface{}{}
64+
case []interface{}:
65+
res := []interface{}{}
66+
for _, v := range val {
67+
if s, ok := sch.Elem.(*schema.Schema); ok {
68+
res = append(res, convert(s, v))
69+
} else {
70+
res = append(res, convertResource(sch.Elem.(*schema.Resource), v.(map[string]interface{})))
71+
}
72+
}
73+
return res
74+
case map[string]interface{}:
75+
// terraform-plugin-sdk does not know how to have an object in an
76+
// object so we use a list with one element
77+
if s, ok := sch.Elem.(*schema.Schema); ok {
78+
return []interface{}{
79+
convert(s, val),
80+
}
81+
} else {
82+
return []interface{}{
83+
convertResource(sch.Elem.(*schema.Resource), val),
84+
}
85+
}
86+
default:
87+
panic(fmt.Sprintf("unknown list type %T", val))
88+
}
89+
default:
90+
panic(fmt.Sprintf("unknown type %s", ty))
91+
}
92+
}

0 commit comments

Comments
 (0)