Skip to content

Commit 49956d2

Browse files
authored
[Feature] Add unified provider support for manual plugin framework resources and data sources (#5127)
## Changes <!-- Summary of your changes that are easy to understand --> Support for unified provider for manual plugin framework resources. To be merge after: #5115 ## Tests <!-- How is this tested? Please see the checklist below and also describe any other relevant tests --> Integration tests Unit tests
1 parent a709fb7 commit 49956d2

19 files changed

+719
-81
lines changed

NEXT_CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
### New Features and Improvements
88

9+
* Add `provider_config` support for manual plugin framework resources and data sources([#5127](https://github.com/databricks/terraform-provider-databricks/pull/5127))
10+
911
### Bug Fixes
1012

1113
### Documentation

internal/providers/pluginfw/products/app/data_app.go

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/tfschema"
1212
"github.com/databricks/terraform-provider-databricks/internal/service/apps_tf"
1313
"github.com/hashicorp/terraform-plugin-framework/datasource"
14-
"github.com/hashicorp/terraform-plugin-framework/path"
1514
"github.com/hashicorp/terraform-plugin-framework/types"
1615
)
1716

@@ -26,18 +25,20 @@ type dataSourceApp struct {
2625
type dataApp struct {
2726
Name types.String `tfsdk:"name"`
2827
App types.Object `tfsdk:"app"`
28+
tfschema.Namespace
2929
}
3030

3131
func (dataApp) ApplySchemaCustomizations(attrs map[string]tfschema.AttributeBuilder) map[string]tfschema.AttributeBuilder {
3232
attrs["name"] = attrs["name"].SetRequired()
3333
attrs["app"] = attrs["app"].SetComputed()
34-
34+
attrs["provider_config"] = attrs["provider_config"].SetOptional()
3535
return attrs
3636
}
3737

3838
func (dataApp) GetComplexFieldTypes(context.Context) map[string]reflect.Type {
3939
return map[string]reflect.Type{
40-
"app": reflect.TypeOf(apps_tf.App{}),
40+
"app": reflect.TypeOf(apps_tf.App{}),
41+
"provider_config": reflect.TypeOf(tfschema.ProviderConfigData{}),
4142
}
4243
}
4344

@@ -59,19 +60,26 @@ func (a *dataSourceApp) Configure(ctx context.Context, req datasource.ConfigureR
5960

6061
func (a *dataSourceApp) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
6162
ctx = pluginfwcontext.SetUserAgentInDataSourceContext(ctx, resourceName)
62-
w, diags := a.client.GetWorkspaceClient()
63+
64+
var config dataApp
65+
resp.Diagnostics.Append(req.Config.Get(ctx, &config)...)
66+
if resp.Diagnostics.HasError() {
67+
return
68+
}
69+
70+
workspaceID, diags := tfschema.GetWorkspaceIDDataSource(ctx, config.ProviderConfig)
6371
resp.Diagnostics.Append(diags...)
6472
if resp.Diagnostics.HasError() {
6573
return
6674
}
6775

68-
var name types.String
69-
resp.Diagnostics.Append(req.Config.GetAttribute(ctx, path.Root("name"), &name)...)
76+
w, diags := a.client.GetWorkspaceClientForUnifiedProviderWithDiagnostics(ctx, workspaceID)
77+
resp.Diagnostics.Append(diags...)
7078
if resp.Diagnostics.HasError() {
7179
return
7280
}
7381

74-
appGoSdk, err := w.Apps.GetByName(ctx, name.ValueString())
82+
appGoSdk, err := w.Apps.GetByName(ctx, config.Name.ValueString())
7583
if err != nil {
7684
resp.Diagnostics.AddError("failed to read app", err.Error())
7785
return
@@ -82,7 +90,13 @@ func (a *dataSourceApp) Read(ctx context.Context, req datasource.ReadRequest, re
8290
if resp.Diagnostics.HasError() {
8391
return
8492
}
85-
dataApp := dataApp{Name: name, App: newApp.ToObjectValue(ctx)}
93+
dataApp := dataApp{
94+
Name: config.Name,
95+
App: newApp.ToObjectValue(ctx),
96+
Namespace: tfschema.Namespace{
97+
ProviderConfig: config.ProviderConfig,
98+
},
99+
}
86100
resp.Diagnostics.Append(resp.State.Set(ctx, dataApp)...)
87101
if resp.Diagnostics.HasError() {
88102
return

internal/providers/pluginfw/products/app/data_apps.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,19 @@ type dataSourceApps struct {
2626

2727
type dataApps struct {
2828
Apps types.List `tfsdk:"app"`
29+
tfschema.Namespace
2930
}
3031

3132
func (dataApps) ApplySchemaCustomizations(attrs map[string]tfschema.AttributeBuilder) map[string]tfschema.AttributeBuilder {
3233
attrs["app"] = attrs["app"].SetComputed()
33-
34+
attrs["provider_config"] = attrs["provider_config"].SetOptional()
3435
return attrs
3536
}
3637

3738
func (dataApps) GetComplexFieldTypes(context.Context) map[string]reflect.Type {
3839
return map[string]reflect.Type{
39-
"app": reflect.TypeOf(apps_tf.App{}),
40+
"app": reflect.TypeOf(apps_tf.App{}),
41+
"provider_config": reflect.TypeOf(tfschema.ProviderConfigData{}),
4042
}
4143
}
4244

@@ -58,7 +60,20 @@ func (a *dataSourceApps) Configure(ctx context.Context, req datasource.Configure
5860

5961
func (a *dataSourceApps) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
6062
ctx = pluginfwcontext.SetUserAgentInDataSourceContext(ctx, resourceName)
61-
w, diags := a.client.GetWorkspaceClient()
63+
64+
var config dataApps
65+
resp.Diagnostics.Append(req.Config.Get(ctx, &config)...)
66+
if resp.Diagnostics.HasError() {
67+
return
68+
}
69+
70+
workspaceID, diags := tfschema.GetWorkspaceIDDataSource(ctx, config.ProviderConfig)
71+
resp.Diagnostics.Append(diags...)
72+
if resp.Diagnostics.HasError() {
73+
return
74+
}
75+
76+
w, diags := a.client.GetWorkspaceClientForUnifiedProviderWithDiagnostics(ctx, workspaceID)
6277
resp.Diagnostics.Append(diags...)
6378
if resp.Diagnostics.HasError() {
6479
return
@@ -79,7 +94,12 @@ func (a *dataSourceApps) Read(ctx context.Context, req datasource.ReadRequest, r
7994
}
8095
apps = append(apps, app.ToObjectValue(ctx))
8196
}
82-
dataApps := dataApps{Apps: types.ListValueMust(apps_tf.App{}.Type(ctx), apps)}
97+
dataApps := dataApps{
98+
Apps: types.ListValueMust(apps_tf.App{}.Type(ctx), apps),
99+
Namespace: tfschema.Namespace{
100+
ProviderConfig: config.ProviderConfig,
101+
},
102+
}
83103
resp.Diagnostics.Append(resp.State.Set(ctx, dataApps)...)
84104
if resp.Diagnostics.HasError() {
85105
return

internal/providers/pluginfw/products/app/resource_app.go

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,23 @@ const (
3232
type appResource struct {
3333
apps_tf.App
3434
NoCompute types.Bool `tfsdk:"no_compute"`
35+
tfschema.Namespace
3536
}
3637

3738
func (a appResource) ApplySchemaCustomizations(s map[string]tfschema.AttributeBuilder) map[string]tfschema.AttributeBuilder {
3839
s["no_compute"] = s["no_compute"].SetOptional()
40+
s["provider_config"] = s["provider_config"].SetOptional()
3941
s["compute_size"] = s["compute_size"].SetComputed()
4042
s = apps_tf.App{}.ApplySchemaCustomizations(s)
4143
return s
4244
}
4345

46+
func (a appResource) GetComplexFieldTypes(ctx context.Context) map[string]reflect.Type {
47+
attrs := a.App.GetComplexFieldTypes(ctx)
48+
attrs["provider_config"] = reflect.TypeOf(tfschema.ProviderConfig{})
49+
return attrs
50+
}
51+
4452
func ResourceApp() resource.Resource {
4553
return &resourceApp{}
4654
}
@@ -94,17 +102,25 @@ func (a *resourceApp) Configure(ctx context.Context, req resource.ConfigureReque
94102

95103
func (a *resourceApp) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
96104
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
97-
w, diags := a.client.GetWorkspaceClient()
105+
106+
var app appResource
107+
resp.Diagnostics.Append(req.Plan.Get(ctx, &app)...)
108+
if resp.Diagnostics.HasError() {
109+
return
110+
}
111+
112+
workspaceID, diags := tfschema.GetWorkspaceIDResource(ctx, app.ProviderConfig)
98113
resp.Diagnostics.Append(diags...)
99114
if resp.Diagnostics.HasError() {
100115
return
101116
}
102117

103-
var app appResource
104-
resp.Diagnostics.Append(req.Plan.Get(ctx, &app)...)
118+
w, diags := a.client.GetWorkspaceClientForUnifiedProviderWithDiagnostics(ctx, workspaceID)
119+
resp.Diagnostics.Append(diags...)
105120
if resp.Diagnostics.HasError() {
106121
return
107122
}
123+
108124
var appGoSdk apps.App
109125
resp.Diagnostics.Append(converters.TfSdkToGoSdkStruct(ctx, app, &appGoSdk)...)
110126
if resp.Diagnostics.HasError() {
@@ -133,6 +149,7 @@ func (a *resourceApp) Create(ctx context.Context, req resource.CreateRequest, re
133149
return
134150
}
135151
newApp.NoCompute = app.NoCompute
152+
newApp.ProviderConfig = app.ProviderConfig
136153
resp.Diagnostics.Append(resp.State.Set(ctx, newApp)...)
137154
if resp.Diagnostics.HasError() {
138155
return
@@ -150,6 +167,7 @@ func (a *resourceApp) Create(ctx context.Context, req resource.CreateRequest, re
150167
if resp.Diagnostics.HasError() {
151168
return
152169
}
170+
newApp.ProviderConfig = app.ProviderConfig
153171
resp.Diagnostics.Append(resp.State.Set(ctx, newApp)...)
154172
if resp.Diagnostics.HasError() {
155173
return
@@ -195,14 +213,21 @@ func (a *resourceApp) waitForApp(ctx context.Context, w *databricks.WorkspaceCli
195213

196214
func (a *resourceApp) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
197215
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
198-
w, diags := a.client.GetWorkspaceClient()
216+
217+
var app appResource
218+
resp.Diagnostics.Append(req.State.Get(ctx, &app)...)
219+
if resp.Diagnostics.HasError() {
220+
return
221+
}
222+
223+
workspaceID, diags := tfschema.GetWorkspaceIDResource(ctx, app.ProviderConfig)
199224
resp.Diagnostics.Append(diags...)
200225
if resp.Diagnostics.HasError() {
201226
return
202227
}
203228

204-
var app appResource
205-
resp.Diagnostics.Append(req.State.Get(ctx, &app)...)
229+
w, diags := a.client.GetWorkspaceClientForUnifiedProviderWithDiagnostics(ctx, workspaceID)
230+
resp.Diagnostics.Append(diags...)
206231
if resp.Diagnostics.HasError() {
207232
return
208233
}
@@ -219,6 +244,7 @@ func (a *resourceApp) Read(ctx context.Context, req resource.ReadRequest, resp *
219244
return
220245
}
221246
newApp.NoCompute = app.NoCompute
247+
newApp.ProviderConfig = app.ProviderConfig
222248
resp.Diagnostics.Append(resp.State.Set(ctx, newApp)...)
223249
if resp.Diagnostics.HasError() {
224250
return
@@ -227,14 +253,21 @@ func (a *resourceApp) Read(ctx context.Context, req resource.ReadRequest, resp *
227253

228254
func (a *resourceApp) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
229255
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
230-
w, diags := a.client.GetWorkspaceClient()
256+
257+
var app appResource
258+
resp.Diagnostics.Append(req.Plan.Get(ctx, &app)...)
259+
if resp.Diagnostics.HasError() {
260+
return
261+
}
262+
263+
workspaceID, diags := tfschema.GetWorkspaceIDResource(ctx, app.ProviderConfig)
231264
resp.Diagnostics.Append(diags...)
232265
if resp.Diagnostics.HasError() {
233266
return
234267
}
235268

236-
var app appResource
237-
resp.Diagnostics.Append(req.Plan.Get(ctx, &app)...)
269+
w, diags := a.client.GetWorkspaceClientForUnifiedProviderWithDiagnostics(ctx, workspaceID)
270+
resp.Diagnostics.Append(diags...)
238271
if resp.Diagnostics.HasError() {
239272
return
240273
}
@@ -259,6 +292,7 @@ func (a *resourceApp) Update(ctx context.Context, req resource.UpdateRequest, re
259292
}
260293
// Modifying no_compute after creation has no effect.
261294
newApp.NoCompute = app.NoCompute
295+
newApp.ProviderConfig = app.ProviderConfig
262296
resp.Diagnostics.Append(resp.State.Set(ctx, newApp)...)
263297
if resp.Diagnostics.HasError() {
264298
return
@@ -267,14 +301,21 @@ func (a *resourceApp) Update(ctx context.Context, req resource.UpdateRequest, re
267301

268302
func (a *resourceApp) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
269303
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
270-
w, diags := a.client.GetWorkspaceClient()
304+
305+
var app appResource
306+
resp.Diagnostics.Append(req.State.Get(ctx, &app)...)
307+
if resp.Diagnostics.HasError() {
308+
return
309+
}
310+
311+
workspaceID, diags := tfschema.GetWorkspaceIDResource(ctx, app.ProviderConfig)
271312
resp.Diagnostics.Append(diags...)
272313
if resp.Diagnostics.HasError() {
273314
return
274315
}
275316

276-
var app appResource
277-
resp.Diagnostics.Append(req.State.Get(ctx, &app)...)
317+
w, diags := a.client.GetWorkspaceClientForUnifiedProviderWithDiagnostics(ctx, workspaceID)
318+
resp.Diagnostics.Append(diags...)
278319
if resp.Diagnostics.HasError() {
279320
return
280321
}

0 commit comments

Comments
 (0)