Skip to content

Commit a53018e

Browse files
authored
Revert "Use stable IDs for settings resources (#3278)" (#3312)
This reverts commit 0543713.
1 parent 8b8ba8a commit a53018e

File tree

5 files changed

+66
-140
lines changed

5 files changed

+66
-140
lines changed

docs/resources/default_namespace_settings.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,3 @@ The resource supports the following arguments:
2929

3030
* `namespace` - (Required) The configuration details.
3131
* `value` - (Required) The value for the setting.
32-
33-
## Import
34-
35-
This resource can be imported by predefined name `global`:
36-
37-
```bash
38-
terraform import databricks_default_namespace_setting.this global
39-
```

docs/resources/restrict_workspace_admins_setting.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,3 @@ The resource supports the following arguments:
3838

3939
* `restrict_workspace_admins` - (Required) The configuration details.
4040
* `status` - (Required) The restrict workspace admins status for the workspace.
41-
42-
## Import
43-
44-
This resource can be imported by predefined name `global`:
45-
46-
```bash
47-
terraform import databricks_restrict_workspace_admins_setting.this global
48-
```

settings/generic_setting.go

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ import (
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1313
)
1414

15-
var (
16-
defaultSettingId = "global"
17-
)
18-
1915
func retryOnEtagError[Req, Resp any](f func(req Req) (Resp, error), firstReq Req, updateReq func(req *Req, newEtag string), retriableErrors []error) (Resp, error) {
2016
req := firstReq
2117
// Retry once on etag error.
@@ -72,9 +68,6 @@ type genericSettingDefinition[T, U any] interface {
7268

7369
// Update the etag in the setting.
7470
SetETag(t *T, newEtag string)
75-
76-
// Generate resource ID from settings instance
77-
GetId(t *T) string
7871
}
7972

8073
func getEtag[T any](t T) string {
@@ -111,9 +104,6 @@ type workspaceSetting[T any] struct {
111104

112105
// Delete the setting with the given etag, and return the new etag.
113106
deleteFunc func(ctx context.Context, w *databricks.WorkspaceClient, etag string) (string, error)
114-
115-
// Optional function to generate resource ID from the settings
116-
generateIdFunc func(setting *T) string
117107
}
118108

119109
func (w workspaceSetting[T]) SettingStruct() T {
@@ -131,15 +121,6 @@ func (w workspaceSetting[T]) Delete(ctx context.Context, c *databricks.Workspace
131121
func (w workspaceSetting[T]) GetETag(t *T) string {
132122
return getEtag(t)
133123
}
134-
135-
func (w workspaceSetting[T]) GetId(t *T) string {
136-
id := defaultSettingId
137-
if w.generateIdFunc != nil {
138-
id = w.generateIdFunc(t)
139-
}
140-
return id
141-
}
142-
143124
func (w workspaceSetting[T]) SetETag(t *T, newEtag string) {
144125
setEtag(t, newEtag)
145126
}
@@ -164,9 +145,6 @@ type accountSetting[T any] struct {
164145

165146
// Delete the setting with the given etag, and return the new etag.
166147
deleteFunc func(ctx context.Context, w *databricks.AccountClient, etag string) (string, error)
167-
168-
// Optional function to generate resource ID from the settings
169-
generateIdFunc func(setting *T) string
170148
}
171149

172150
func (w accountSetting[T]) SettingStruct() T {
@@ -188,14 +166,6 @@ func (w accountSetting[T]) SetETag(t *T, newEtag string) {
188166
setEtag(t, newEtag)
189167
}
190168

191-
func (w accountSetting[T]) GetId(t *T) string {
192-
id := defaultSettingId
193-
if w.generateIdFunc != nil {
194-
id = w.generateIdFunc(t)
195-
}
196-
return id
197-
}
198-
199169
var _ accountSettingDefinition[struct{}] = accountSetting[struct{}]{}
200170

201171
func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.Resource {
@@ -247,8 +217,7 @@ func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.R
247217
default:
248218
return fmt.Errorf("unexpected setting type: %T", defn)
249219
}
250-
d.Set("etag", res)
251-
d.SetId(defn.GetId(&setting))
220+
d.SetId(res)
252221
return nil
253222
}
254223

@@ -266,7 +235,7 @@ func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.R
266235
if err != nil {
267236
return err
268237
}
269-
res, err = defn.Read(ctx, w, d.Get("etag").(string))
238+
res, err = defn.Read(ctx, w, d.Id())
270239
if err != nil {
271240
return err
272241
}
@@ -275,7 +244,7 @@ func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.R
275244
if err != nil {
276245
return err
277246
}
278-
res, err = defn.Read(ctx, a, d.Get("etag").(string))
247+
res, err = defn.Read(ctx, a, d.Id())
279248
if err != nil {
280249
return err
281250
}
@@ -290,12 +259,12 @@ func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.R
290259
// with a response which is at least as recent as the etag.
291260
// Updating, while not always necessary, ensures that the
292261
// server responds with an updated response.
293-
d.Set("etag", defn.GetETag(res))
262+
d.SetId(defn.GetETag(res))
294263
return nil
295264
},
296265
Update: func(ctx context.Context, d *schema.ResourceData, c *common.DatabricksClient) error {
297266
var setting T
298-
defn.SetETag(&setting, d.Get("etag").(string))
267+
defn.SetETag(&setting, d.Id())
299268
return createOrUpdate(ctx, d, c, setting)
300269
},
301270
Delete: func(ctx context.Context, d *schema.ResourceData, c *common.DatabricksClient) error {
@@ -311,7 +280,7 @@ func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.R
311280
func(etag string) (string, error) {
312281
return defn.Delete(ctx, w, etag)
313282
},
314-
d.Get("etag").(string),
283+
d.Id(),
315284
updateETag,
316285
deleteRetriableErrors)
317286
if err != nil {
@@ -326,7 +295,7 @@ func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.R
326295
func(etag string) (string, error) {
327296
return defn.Delete(ctx, a, etag)
328297
},
329-
d.Get("etag").(string),
298+
d.Id(),
330299
updateETag,
331300
deleteRetriableErrors)
332301
if err != nil {
@@ -335,7 +304,7 @@ func makeSettingResource[T, U any](defn genericSettingDefinition[T, U]) common.R
335304
default:
336305
return fmt.Errorf("unexpected setting type: %T", defn)
337306
}
338-
d.Set("etag", etag)
307+
d.SetId(etag)
339308
return nil
340309
},
341310
}

settings/generic_setting_test.go

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
var testSetting = AllSettingsResources()["default_namespace"]
1616

1717
func TestQueryCreateDefaultNameSetting(t *testing.T) {
18-
qa.ResourceFixture{
18+
d, err := qa.ResourceFixture{
1919
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
2020
e := w.GetMockSettingsAPI().EXPECT()
2121
e.UpdateDefaultNamespaceSetting(mock.Anything, settings.UpdateDefaultNamespaceSettingRequest{
@@ -73,15 +73,16 @@ func TestQueryCreateDefaultNameSetting(t *testing.T) {
7373
value = "namespace_value"
7474
}
7575
`,
76-
}.ApplyAndExpectData(t, map[string]any{
77-
"id": defaultSettingId,
78-
"etag": "etag2",
79-
"namespace.0.value": "namespace_value",
80-
})
76+
}.Apply(t)
77+
78+
assert.NoError(t, err)
79+
80+
assert.Equal(t, "etag2", d.Id())
81+
assert.Equal(t, "namespace_value", d.Get("namespace.0.value"))
8182
}
8283

8384
func TestQueryReadDefaultNameSetting(t *testing.T) {
84-
qa.ResourceFixture{
85+
d, err := qa.ResourceFixture{
8586
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
8687
w.GetMockSettingsAPI().EXPECT().GetDefaultNamespaceSetting(mock.Anything, settings.GetDefaultNamespaceSettingRequest{
8788
Etag: "etag1",
@@ -99,18 +100,19 @@ func TestQueryReadDefaultNameSetting(t *testing.T) {
99100
namespace {
100101
value = "namespace_value"
101102
}
102-
etag = "etag1"
103103
`,
104-
ID: defaultSettingId,
105-
}.ApplyAndExpectData(t, map[string]any{
106-
"id": defaultSettingId,
107-
"etag": "etag2",
108-
"namespace.0.value": "namespace_value",
109-
})
104+
ID: "etag1",
105+
}.Apply(t)
106+
107+
assert.NoError(t, err)
108+
109+
assert.Equal(t, "etag2", d.Id())
110+
res := d.Get("namespace").([]interface{})[0].(map[string]interface{})
111+
assert.Equal(t, "namespace_value", res["value"])
110112
}
111113

112114
func TestQueryUpdateDefaultNameSetting(t *testing.T) {
113-
qa.ResourceFixture{
115+
d, err := qa.ResourceFixture{
114116
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
115117
e := w.GetMockSettingsAPI().EXPECT()
116118
e.UpdateDefaultNamespaceSetting(mock.Anything, settings.UpdateDefaultNamespaceSettingRequest{
@@ -146,18 +148,19 @@ func TestQueryUpdateDefaultNameSetting(t *testing.T) {
146148
namespace {
147149
value = "new_namespace_value"
148150
}
149-
etag = "etag1"
150151
`,
151-
ID: defaultSettingId,
152-
}.ApplyAndExpectData(t, map[string]any{
153-
"id": defaultSettingId,
154-
"etag": "etag2",
155-
"namespace.0.value": "new_namespace_value",
156-
})
152+
ID: "etag1",
153+
}.Apply(t)
154+
155+
assert.NoError(t, err)
156+
157+
assert.Equal(t, "etag2", d.Id())
158+
res := d.Get("namespace").([]interface{})[0].(map[string]interface{})
159+
assert.Equal(t, "new_namespace_value", res["value"])
157160
}
158161

159162
func TestQueryUpdateDefaultNameSettingWithConflict(t *testing.T) {
160-
qa.ResourceFixture{
163+
d, err := qa.ResourceFixture{
161164
MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) {
162165
e := w.GetMockSettingsAPI().EXPECT()
163166
e.UpdateDefaultNamespaceSetting(mock.Anything, settings.UpdateDefaultNamespaceSettingRequest{
@@ -214,14 +217,15 @@ func TestQueryUpdateDefaultNameSettingWithConflict(t *testing.T) {
214217
namespace {
215218
value = "new_namespace_value"
216219
}
217-
etag = "etag1"
218220
`,
219-
ID: defaultSettingId,
220-
}.ApplyAndExpectData(t, map[string]any{
221-
"id": defaultSettingId,
222-
"etag": "etag3",
223-
"namespace.0.value": "new_namespace_value",
224-
})
221+
ID: "etag1",
222+
}.Apply(t)
223+
224+
assert.NoError(t, err)
225+
226+
assert.Equal(t, "etag3", d.Id())
227+
res := d.Get("namespace").([]interface{})[0].(map[string]interface{})
228+
assert.Equal(t, "new_namespace_value", res["value"])
225229
}
226230

227231
func TestQueryDeleteDefaultNameSetting(t *testing.T) {
@@ -235,17 +239,11 @@ func TestQueryDeleteDefaultNameSetting(t *testing.T) {
235239
},
236240
Resource: testSetting,
237241
Delete: true,
238-
HCL: `
239-
namespace {
240-
value = "new_namespace_value"
241-
}
242-
etag = "etag1"
243-
`,
244-
ID: defaultSettingId,
242+
ID: "etag1",
245243
}.Apply(t)
246244

247245
assert.NoError(t, err)
248-
assert.Equal(t, "etag2", d.Get("etag").(string))
246+
assert.Equal(t, "etag2", d.Id())
249247
}
250248

251249
func TestQueryDeleteDefaultNameSettingWithConflict(t *testing.T) {
@@ -272,15 +270,9 @@ func TestQueryDeleteDefaultNameSettingWithConflict(t *testing.T) {
272270
},
273271
Resource: testSetting,
274272
Delete: true,
275-
HCL: `
276-
namespace {
277-
value = "new_namespace_value"
278-
}
279-
etag = "etag1"
280-
`,
281-
ID: defaultSettingId,
273+
ID: "etag1",
282274
}.Apply(t)
283275

284276
assert.NoError(t, err)
285-
assert.Equal(t, "etag3", d.Get("etag").(string))
277+
assert.Equal(t, "etag3", d.Id())
286278
}

0 commit comments

Comments
 (0)