@@ -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
2224const 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
5873func (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
6378type 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
7997func (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
88106func (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
94132func (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
98136func (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
102140func (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