Skip to content

Commit 0693e4c

Browse files
authored
Migrated databricks_shares data source to Go SDK (#2072)
1 parent 30188dd commit 0693e4c

File tree

3 files changed

+103
-12
lines changed

3 files changed

+103
-12
lines changed

catalog/data_shares.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,21 @@ package catalog
33
import (
44
"context"
55

6+
"github.com/databricks/databricks-sdk-go"
67
"github.com/databricks/terraform-provider-databricks/common"
78
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
89
)
910

1011
func DataSourceShares() *schema.Resource {
11-
type sharesData struct {
12+
return common.WorkspaceData(func(ctx context.Context, data *struct {
1213
Shares []string `json:"shares,omitempty" tf:"computed,slice_set"`
13-
}
14-
return common.DataResource(sharesData{}, func(ctx context.Context, e any, c *common.DatabricksClient) error {
15-
data := e.(*sharesData)
16-
sharesAPI := NewSharesAPI(ctx, c)
17-
shares, err := sharesAPI.list()
14+
}, w *databricks.WorkspaceClient) error {
15+
16+
shares, err := w.Shares.ListAll(ctx)
1817
if err != nil {
1918
return err
2019
}
21-
for _, share := range shares.Shares {
20+
for _, share := range shares {
2221
data.Shares = append(data.Shares, share.Name)
2322
}
2423
return nil

catalog/resource_share.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,6 @@ func (si *ShareInfo) suppressCDFEnabledDiff() {
8484
}
8585
}
8686

87-
func (a SharesAPI) list() (shares Shares, err error) {
88-
err = a.client.Get(a.context, "/unity-catalog/shares", nil, &shares)
89-
return
90-
}
91-
9287
func (a SharesAPI) create(si *ShareInfo) error {
9388
si.sortSharesByName()
9489
return a.client.Post(a.context, "/unity-catalog/shares", si, si)
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package acceptance
2+
3+
import (
4+
"strconv"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func checkSharesDataSourcePopulated(t *testing.T) func(s *terraform.State) error {
13+
return func(s *terraform.State) error {
14+
_, ok := s.Modules[0].Resources["data.databricks_shares.this"]
15+
require.True(t, ok, "data.databricks_shares.this has to be there")
16+
num_shares, _ := strconv.Atoi(s.Modules[0].Outputs["shares"].Value.(string))
17+
assert.GreaterOrEqual(t, num_shares, 1)
18+
return nil
19+
}
20+
}
21+
func TestUcAccDataSourceShares(t *testing.T) {
22+
unityWorkspaceLevel(t, step{
23+
Template: `
24+
resource "databricks_catalog" "sandbox" {
25+
name = "sandbox{var.RANDOM}"
26+
comment = "this catalog is managed by terraform"
27+
properties = {
28+
purpose = "testing"
29+
}
30+
}
31+
32+
resource "databricks_schema" "things" {
33+
catalog_name = databricks_catalog.sandbox.id
34+
name = "things{var.RANDOM}"
35+
comment = "this database is managed by terraform"
36+
properties = {
37+
kind = "various"
38+
}
39+
}
40+
41+
resource "databricks_table" "mytable" {
42+
catalog_name = databricks_catalog.sandbox.id
43+
schema_name = databricks_schema.things.name
44+
name = "bar"
45+
table_type = "MANAGED"
46+
data_source_format = "DELTA"
47+
48+
column {
49+
name = "id"
50+
position = 0
51+
type_name = "INT"
52+
type_text = "int"
53+
type_json = "{\"name\":\"id\",\"type\":\"integer\",\"nullable\":true,\"metadata\":{}}"
54+
}
55+
}
56+
57+
resource "databricks_table" "mytable_2" {
58+
catalog_name = databricks_catalog.sandbox.id
59+
schema_name = databricks_schema.things.name
60+
name = "bar_2"
61+
table_type = "MANAGED"
62+
data_source_format = "DELTA"
63+
64+
column {
65+
name = "id"
66+
position = 0
67+
type_name = "INT"
68+
type_text = "int"
69+
type_json = "{\"name\":\"id\",\"type\":\"integer\",\"nullable\":true,\"metadata\":{}}"
70+
}
71+
}
72+
73+
resource "databricks_share" "myshare" {
74+
name = "{var.RANDOM}-terraform-delta-share"
75+
object {
76+
name = databricks_table.mytable.id
77+
comment = "c"
78+
data_object_type = "TABLE"
79+
}
80+
object {
81+
name = databricks_table.mytable_2.id
82+
cdf_enabled = false
83+
comment = "c"
84+
data_object_type = "TABLE"
85+
}
86+
}
87+
88+
data "databricks_shares" "this" {
89+
depends_on = [databricks_share.myshare]
90+
}
91+
output "shares" {
92+
value = length(data.databricks_shares.this.shares)
93+
}
94+
`,
95+
Check: checkSharesDataSourcePopulated(t),
96+
})
97+
}

0 commit comments

Comments
 (0)