Skip to content

Commit 6cf9bab

Browse files
Tanchwankvuong
authored andcommitted
started outline for create method, set option to configure workspace or account clients in Configure method
1 parent 567678a commit 6cf9bab

File tree

1 file changed

+61
-23
lines changed

1 file changed

+61
-23
lines changed

internal/providers/pluginfw/products/permission/resource_permission.go

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ import (
1010
"github.com/databricks/databricks-sdk-go/apierr"
1111
"github.com/databricks/databricks-sdk-go/service/iam"
1212
"github.com/databricks/terraform-provider-databricks/common"
13-
pluginfwcommon "github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/common"
13+
pluginfwcommon "github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/common"
14+
pluginfwcontext "github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/context"
1415
"github.com/databricks/terraform-provider-databricks/internal/providers/pluginfw/tfschema"
1516
"github.com/databricks/terraform-provider-databricks/permissions/entity"
1617

18+
"github.com/hashicorp/terraform-plugin-framework/provider"
1719
"github.com/hashicorp/terraform-plugin-framework/resource"
18-
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
19-
"github.com/hashicorp/terraform-plugin-framework/types"
20+
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
21+
"github.com/hashicorp/terraform-plugin-framework/types"
2022
)
2123

2224
const resourceName = "permission"
@@ -40,34 +42,49 @@ func (r *permissionResource) Configure(ctx context.Context, req resource.Configu
4042
return
4143
}
4244

43-
client, ok := req.ProviderData.(*common.DatabricksClient)
44-
45-
if !ok {
46-
resp.Diagnostics.AddError(
47-
//TODO ADD ERROR MESSAGE IN LINE WITH PROVIDER
48-
"Unable to configure the Databricks client",
49-
fmt.Sprintf("Expected *common.DatabricksClient, got %T", req.ProviderData),
50-
)
51-
52-
return
45+
var provider
46+
//TODO CHECK IF ACCOUNTID ATTRIBUTE IS SET IN PROVIDER CONFIG STRUCT,
47+
// SHOULD BE ABLE TO PULL IF IT'S SET OR NOT FROM THE GOLANG STRUCT ITSELF
48+
if != "" {
49+
accountClient, err := req.ProviderData.(*common.DatabricksClient).AccountClient()
50+
if err != nil {
51+
resp.Diagnostics.AddError(
52+
//TODO ADD ERROR MESSAGE IN LINE WITH PROVIDER
53+
"Unable to configure the Databricks client",
54+
fmt.Sprintf("Expected *common.DatabricksClient, got %T", req.ProviderData),
55+
)
56+
r.client = accountClient
57+
}
58+
59+
} else {
60+
workspaceClient, err := req.ProviderData.(*common.DatabricksClient).WorkspaceClient()
61+
if err != nil {
62+
resp.Diagnostics.AddError(
63+
//TODO ADD ERROR MESSAGE IN LINE WITH Provider
64+
"Unable to configure the Databricks client",
65+
fmt.Sprintf("Expected *common.DatabricksClient, got %T", req.ProviderData),
66+
)
67+
68+
r.client = workspaceClient
69+
}
5370
}
54-
55-
r.client = client
5671
}
5772

5873
func (r *permissionResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) {
59-
resp.TypeName = pluginfwcommon.GetDatabrikcsProductionName(resourceName)
74+
resp.TypeName = pluginfwcommon.GetDatabricksProductionName(resourceName)
6075
}
6176

6277

6378
type permissionResourceModel struct {
6479
ObjectID types.String `tfsdk:"object_id"`
6580
ObjectType types.String `tfsdk:"object_type"`
66-
AccessControlList []accessControlListModel `tfsdk:"access_control_list"`
81+
AccessControlList []permissionAccessControlListModel `tfsdk:"access_control_list"`
6782
LastUpdated types.String `tfsdk:"last_updated"`
6883
}
6984

70-
type accessControlListModel struct {
85+
//accessControlListModel is the same as iam.AccessControlRequest
86+
// was originally just called this way in entity.go
87+
type permissionAccessControlListModel struct {
7188
ServicePrincipalName types.String `tfsdk:"service_principal_name"`
7289
GroupName types.String `tfsdk:"group_name"`
7390
UserName types.String `tfsdk:"user_name"`
@@ -76,6 +93,7 @@ type accessControlListModel struct {
7693

7794

7895
//TODO set some attributes as optional, required
96+
// see /databricks/permissions/resource_permissions.go line 160
7997
func (r *permissionResource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
8098
attrs, blocks := tfschema.ResourceStructToSchemaMap(ctx, permissionResourceModel{}, nil)
8199
resp.Schema = schema.Schema{
@@ -86,21 +104,41 @@ func (r *permissionResource) Schema(ctx context.Context, req resource.SchemaRequ
86104

87105

88106
func (r *permissionResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
89-
ctx := pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
90-
w, diags := r.client.WorkspaceClient()
107+
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
108+
109+
var plan permissionResourceModel
110+
diags := req.Plan.Get(ctx, &plan)
91111
resp.Diagnostics.Append(diags...)
112+
if resp.Diagnostics.HasError() {
113+
return
114+
}
115+
116+
// generate API request from plan
117+
var acls []iam.AccessControlRequest
118+
for _, acl := range plan.AccessControlList {
119+
}
120+
121+
// create the permission
122+
//TODO: FIGURE OUT PROPER API CALL METHOD FOR THIS ACTION
123+
acl, err := r.client.AccessControl.Update(<OBJECT ID?>, iam.UpdateRuleSetRequest{
124+
Name: plan.ObjectID,
125+
ObjectType: plan.ObjectType,
126+
AccessControlList: acls,
127+
})
128+
129+
92130
}
93131

94132
func (r *permissionResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
95-
ctx := pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
133+
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
96134
}
97135

98136
func (r *permissionResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
99-
ctx := pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
137+
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
100138
}
101139

102140
func (r *permissionResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
103-
ctx := pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
141+
ctx = pluginfwcontext.SetUserAgentInResourceContext(ctx, resourceName)
104142
}
105143

106144

0 commit comments

Comments
 (0)