Skip to content

Commit 6ad2cbf

Browse files
author
Rishabh Garg
authored
Merge pull request #1 from coursera/datashare-add-schema-tables
Datashare add schema tables
2 parents e97b39e + 3796955 commit 6ad2cbf

7 files changed

Lines changed: 189 additions & 3 deletions

File tree

docs/resources/datashare.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ resource "redshift_datashare" "my_datashare" {
3535
"public",
3636
"other",
3737
]
38+
# Optional. Specifies which schema tables to expose to the datashare.
39+
schema_tables = [
40+
"schema1.table1",
41+
"schema1.table2",
42+
"schema2.table1",
43+
"schema2.table2",
44+
]
3845
}
3946
```
4047

@@ -50,6 +57,7 @@ resource "redshift_datashare" "my_datashare" {
5057
- **id** (String) The ID of this resource.
5158
- **owner** (String) The user who owns the datashare.
5259
- **publicly_accessible** (Boolean) Specifies whether the datashare can be shared to clusters that are publicly accessible. Default is `false`.
60+
- **schema_tables** (Set of String) Defines which schema tables are exposed to the data share.
5361
- **schemas** (Set of String) Defines which schemas are exposed to the data share.
5462

5563
### Read-Only

examples/resources/redshift_datashare/resource.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,11 @@ resource "redshift_datashare" "my_datashare" {
88
"public",
99
"other",
1010
]
11+
# Optional. Specifies which schema tables to expose to the datashare.
12+
schema_tables = [
13+
"schema1.table1",
14+
"schema1.table2",
15+
"schema2.table1",
16+
"schema2.table2",
17+
]
1118
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ require (
2525
github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect
2626
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 // indirect
2727
github.com/aws/aws-sdk-go v1.25.3 // indirect
28-
github.com/aws/aws-sdk-go-v2/credentials v1.3.0 // indirect
28+
github.com/aws/aws-sdk-go-v2/credentials v1.3.0
2929
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.2.0 // indirect
3030
github.com/aws/aws-sdk-go-v2/internal/ini v1.1.0 // indirect
3131
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.2.0 // indirect

go.sum

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki
5151
github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE=
5252
github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
5353
github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE=
54+
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
5455
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
5556
github.com/apparentlymart/go-cidr v1.0.1 h1:NmIwLZ/KdsjIUlhf+/Np40atNXm/+lZ5txfTJ/SpF+U=
5657
github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
@@ -64,6 +65,7 @@ github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6
6465
github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
6566
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to=
6667
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
68+
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
6769
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
6870
github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM=
6971
github.com/aws/aws-sdk-go v1.25.3 h1:uM16hIw9BotjZKMZlX05SN2EFtaWfi/NonPKIARiBLQ=
@@ -111,13 +113,16 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
111113
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
112114
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
113115
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
116+
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
114117
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
118+
github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
115119
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
116120
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
117121
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
118122
github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
119123
github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34=
120124
github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
125+
github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8=
121126
github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0=
122127
github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4=
123128
github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc=
@@ -277,6 +282,7 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
277282
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
278283
github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8=
279284
github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
285+
github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A=
280286
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
281287
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
282288
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
@@ -315,6 +321,7 @@ github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce/go.mod h1:uFMI8w+ref4
315321
github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
316322
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
317323
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
324+
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
318325
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
319326
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
320327
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=

redshift/helpers.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,3 +203,12 @@ func setToPgIdentList(identifiers *schema.Set, prefix string) string {
203203

204204
return strings.Join(quoted, ",")
205205
}
206+
207+
func contains(s []string, e string) bool {
208+
for _, a := range s {
209+
if a == e {
210+
return true
211+
}
212+
}
213+
return false
214+
}

redshift/resource_redshift_datashare.go

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const (
1818
dataShareProducerNamespaceAttr = "producer_namespace"
1919
dataShareCreatedAttr = "created"
2020
dataShareSchemasAttr = "schemas"
21+
dataShareSchemaTablesAttr = "schema_tables"
2122
)
2223

2324
func redshiftDatashare() *schema.Resource {
@@ -92,6 +93,18 @@ such as RA3.
9293
},
9394
},
9495
},
96+
dataShareSchemaTablesAttr: {
97+
Type: schema.TypeSet,
98+
Optional: true,
99+
Description: "Defines which schema tables are exposed to the data share.",
100+
Set: schema.HashString,
101+
Elem: &schema.Schema{
102+
Type: schema.TypeString,
103+
StateFunc: func(val interface{}) string {
104+
return strings.ToLower(val.(string))
105+
},
106+
},
107+
},
95108
},
96109
}
97110
}
@@ -152,6 +165,20 @@ func resourceRedshiftDatashareCreate(db *DBConnection, d *schema.ResourceData) e
152165
}
153166
}
154167

168+
var schemas []string
169+
var tables []string
170+
for _, schemaTable := range d.Get(dataShareSchemaTablesAttr).(*schema.Set).List() {
171+
schemaName := strings.Split(schemaTable.(string), ".")[0]
172+
appendIfTrue(contains(schemas, schemaName), schemaName, &schemas)
173+
tableName := schemaTable.(string)
174+
appendIfTrue(contains(tables, tableName), tableName, &tables)
175+
}
176+
177+
err = addSchemaTablesToDatashare(tx, shareName, schemas, tables)
178+
if err != nil {
179+
return err
180+
}
181+
155182
if err = tx.Commit(); err != nil {
156183
return fmt.Errorf("could not commit transaction: %w", err)
157184
}
@@ -172,6 +199,19 @@ func addSchemaToDatashare(tx *sql.Tx, shareName string, schemaName string) error
172199
return err
173200
}
174201

202+
func addSchemaTablesToDatashare(tx *sql.Tx, shareName string, schemas []string, tables []string) error {
203+
schemasString := strings.Join(schemas, ",")
204+
tablesString := strings.Join(tables, ",")
205+
err := resourceRedshiftDatashareAddTablesInSchema(tx, shareName, schemasString, tablesString)
206+
return err
207+
}
208+
209+
func removeSchemaTablesFromDatashare(tx *sql.Tx, shareName string, tables []string) error {
210+
tablesString := strings.Join(tables, ",")
211+
err := resourceRedshiftDatashareRemoveTablesInSchema(tx, shareName, tablesString)
212+
return err
213+
}
214+
175215
func resourceRedshiftDatashareAddSchema(tx *sql.Tx, shareName string, schemaName string) error {
176216
query := fmt.Sprintf("ALTER DATASHARE %s ADD SCHEMA %s", pq.QuoteIdentifier(shareName), pq.QuoteIdentifier(schemaName))
177217
log.Printf("[DEBUG] %s\n", query)
@@ -208,6 +248,35 @@ func resourceRedshiftDatashareAddAllTables(tx *sql.Tx, shareName string, schemaN
208248
return err
209249
}
210250

251+
func resourceRedshiftDatashareAddTablesInSchema(tx *sql.Tx, shareName string, schemas string, tables string) error {
252+
query := fmt.Sprintf("ALTER DATASHARE %s ADD SCHEMA %s", pq.QuoteIdentifier(shareName), pq.QuoteIdentifier(schemas))
253+
log.Printf("[DEBUG] %s\n", query)
254+
_, err := tx.Exec(query)
255+
if err != nil {
256+
// if the schema is already in the datashare we get a "duplicate schema" error code. This is fine.
257+
if pqErr, ok := err.(*pq.Error); ok {
258+
if string(pqErr.Code) == pqErrorCodeDuplicateSchema {
259+
log.Printf("[WARN] Schema %s already exists in datashare %s\n", schemas, shareName)
260+
} else {
261+
return err
262+
}
263+
} else {
264+
return err
265+
}
266+
}
267+
query = fmt.Sprintf("ALTER DATASHARE %s ADD TABLE %s", pq.QuoteIdentifier(shareName), pq.QuoteIdentifier(tables))
268+
log.Printf("[DEBUG] %s\n", query)
269+
_, err = tx.Exec(query)
270+
return err
271+
}
272+
273+
func resourceRedshiftDatashareRemoveTablesInSchema(tx *sql.Tx, shareName string, tables string) error {
274+
query := fmt.Sprintf("ALTER DATASHARE %s REMOVE TABLE %s", pq.QuoteIdentifier(shareName), pq.QuoteIdentifier(tables))
275+
log.Printf("[DEBUG] %s\n", query)
276+
_, err := tx.Exec(query)
277+
return err
278+
}
279+
211280
func removeSchemaFromDatashare(tx *sql.Tx, shareName string, schemaName string) error {
212281
err := resourceRedshiftDatashareRemoveAllFunctions(tx, shareName, schemaName)
213282
if err != nil {
@@ -293,6 +362,10 @@ func resourceRedshiftDatashareRead(db *DBConnection, d *schema.ResourceData) err
293362
return err
294363
}
295364

365+
if err = readDatashareSchemaTables(tx, shareName, d); err != nil {
366+
return err
367+
}
368+
296369
if err = tx.Commit(); err != nil {
297370
return err
298371
}
@@ -328,6 +401,34 @@ func readDatashareSchemas(tx *sql.Tx, shareName string, d *schema.ResourceData)
328401
return nil
329402
}
330403

404+
func readDatashareSchemaTables(tx *sql.Tx, shareName string, d *schema.ResourceData) error {
405+
query := `
406+
SELECT
407+
object_name
408+
FROM svv_datashare_objects
409+
WHERE share_type = 'OUTBOUND'
410+
AND object_type = 'table'
411+
AND share_name = $1
412+
`
413+
log.Printf("[DEBUG] %s, $1=%s\n", query, shareName)
414+
rows, err := tx.Query(query, shareName)
415+
if err != nil {
416+
return err
417+
}
418+
defer rows.Close()
419+
420+
schemaTables := schema.NewSet(schema.HashString, nil)
421+
for rows.Next() {
422+
var schemaTableName string
423+
if err = rows.Scan(&schemaTableName); err != nil {
424+
return err
425+
}
426+
schemaTables.Add(schemaTableName)
427+
}
428+
d.Set(dataShareSchemaTablesAttr, schemaTables)
429+
return nil
430+
}
431+
331432
func resourceRedshiftDatashareUpdate(db *DBConnection, d *schema.ResourceData) error {
332433
tx, err := startTransaction(db.client, "")
333434
if err != nil {
@@ -347,6 +448,10 @@ func resourceRedshiftDatashareUpdate(db *DBConnection, d *schema.ResourceData) e
347448
return err
348449
}
349450

451+
if err := setDatashareTableSchemas(tx, d); err != nil {
452+
return err
453+
}
454+
350455
if err = tx.Commit(); err != nil {
351456
return fmt.Errorf("could not commit transaction: %w", err)
352457
}
@@ -420,6 +525,48 @@ func setDatashareSchemas(tx *sql.Tx, d *schema.ResourceData) error {
420525
return nil
421526
}
422527

528+
func setDatashareTableSchemas(tx *sql.Tx, d *schema.ResourceData) error {
529+
if !d.HasChange(dataShareSchemaTablesAttr) {
530+
return nil
531+
}
532+
before, after := d.GetChange(dataShareSchemaTablesAttr)
533+
if before == nil {
534+
before = schema.NewSet(schema.HashString, nil)
535+
}
536+
if after == nil {
537+
after = schema.NewSet(schema.HashString, nil)
538+
}
539+
540+
add := after.(*schema.Set).Difference(before.(*schema.Set))
541+
remove := before.(*schema.Set).Difference(after.(*schema.Set))
542+
543+
shareName := d.Get(dataShareSchemaTablesAttr).(string)
544+
545+
var schemas []string
546+
var tables []string
547+
for _, schemaTable := range add.List() {
548+
schemaName := strings.Split(schemaTable.(string), ".")[0]
549+
appendIfTrue(contains(schemas, schemaName), schemaName, &schemas)
550+
tableName := schemaTable.(string)
551+
appendIfTrue(contains(tables, tableName), tableName, &tables)
552+
}
553+
err := addSchemaTablesToDatashare(tx, shareName, schemas, tables)
554+
if err != nil {
555+
return err
556+
}
557+
558+
var tablesToBeRemoved []string
559+
for _, schemaTable := range remove.List() {
560+
tableName := schemaTable.(string)
561+
appendIfTrue(contains(tablesToBeRemoved, tableName), tableName, &tablesToBeRemoved)
562+
}
563+
if err := removeSchemaTablesFromDatashare(tx, shareName, tablesToBeRemoved); err != nil {
564+
return err
565+
}
566+
567+
return nil
568+
}
569+
423570
func resourceRedshiftDatashareDelete(db *DBConnection, d *schema.ResourceData) error {
424571
tx, err := startTransaction(db.client, "")
425572
if err != nil {

redshift/resource_redshift_datashare_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ resource "redshift_user" "user" {
2828
2929
resource "redshift_datashare" "basic" {
3030
%[5]s = %[2]q
31+
%[6]s = ["schema1.table1"]
3132
depends_on = [
3233
redshift_user.user,
3334
]
3435
}
35-
`, schemaNameAttr, shareName, schemaCascadeOnDeleteAttr, userNameAttr, dataShareNameAttr)
36+
`, schemaNameAttr, shareName, schemaCascadeOnDeleteAttr, userNameAttr, dataShareNameAttr, dataShareSchemaTablesAttr)
3637

3738
configUpdate := fmt.Sprintf(`
3839
resource "redshift_schema" "schema" {
@@ -51,8 +52,9 @@ resource "redshift_datashare" "basic" {
5152
%[8]s = [
5253
redshift_schema.schema.%[1]s,
5354
]
55+
%[9]s = ["schema1.table1", "schema1.table2", "schema2.table1", "schema2.table2"]
5456
}
55-
`, schemaNameAttr, shareName, schemaCascadeOnDeleteAttr, userNameAttr, dataShareNameAttr, dataShareOwnerAttr, dataSharePublicAccessibleAttr, dataShareSchemasAttr)
57+
`, schemaNameAttr, shareName, schemaCascadeOnDeleteAttr, userNameAttr, dataShareNameAttr, dataShareOwnerAttr, dataSharePublicAccessibleAttr, dataShareSchemasAttr, dataShareSchemaTablesAttr)
5658
resource.ParallelTest(t, resource.TestCase{
5759
PreCheck: func() { testAccPreCheck(t) },
5860
Providers: testAccProviders,
@@ -69,6 +71,8 @@ resource "redshift_datashare" "basic" {
6971
resource.TestCheckResourceAttrSet("redshift_datashare.basic", dataShareProducerNamespaceAttr),
7072
resource.TestCheckResourceAttrSet("redshift_datashare.basic", dataShareCreatedAttr),
7173
resource.TestCheckResourceAttr("redshift_datashare.basic", fmt.Sprintf("%s.#", dataShareSchemasAttr), "0"),
74+
resource.TestCheckResourceAttr("redshift_datashare.basic", fmt.Sprintf("%s.#", dataShareSchemaTablesAttr), "1"),
75+
resource.TestCheckTypeSetElemAttr("redshift_datashare.basic", fmt.Sprintf("%s.*", dataShareSchemaTablesAttr), shareName),
7276
),
7377
},
7478
{
@@ -83,6 +87,8 @@ resource "redshift_datashare" "basic" {
8387
resource.TestCheckResourceAttrSet("redshift_datashare.basic", dataShareCreatedAttr),
8488
resource.TestCheckResourceAttr("redshift_datashare.basic", fmt.Sprintf("%s.#", dataShareSchemasAttr), "1"),
8589
resource.TestCheckTypeSetElemAttr("redshift_datashare.basic", fmt.Sprintf("%s.*", dataShareSchemasAttr), shareName),
90+
resource.TestCheckResourceAttr("redshift_datashare.basic", fmt.Sprintf("%s.#", dataShareSchemaTablesAttr), "4"),
91+
resource.TestCheckTypeSetElemAttr("redshift_datashare.basic", fmt.Sprintf("%s.*", dataShareSchemaTablesAttr), shareName),
8692
),
8793
},
8894
{
@@ -96,6 +102,8 @@ resource "redshift_datashare" "basic" {
96102
resource.TestCheckResourceAttrSet("redshift_datashare.basic", dataShareProducerNamespaceAttr),
97103
resource.TestCheckResourceAttrSet("redshift_datashare.basic", dataShareCreatedAttr),
98104
resource.TestCheckResourceAttr("redshift_datashare.basic", fmt.Sprintf("%s.#", dataShareSchemasAttr), "0"),
105+
resource.TestCheckResourceAttr("redshift_datashare.basic", fmt.Sprintf("%s.#", dataShareSchemaTablesAttr), "1"),
106+
resource.TestCheckTypeSetElemAttr("redshift_datashare.basic", fmt.Sprintf("%s.*", dataShareSchemaTablesAttr), shareName),
99107
),
100108
},
101109
{

0 commit comments

Comments
 (0)