@@ -2,131 +2,90 @@ package mws
22
33import (
44 "context"
5- "errors"
65 "fmt"
76
87 "github.com/databricks/databricks-sdk-go/apierr"
8+ "github.com/databricks/databricks-sdk-go/service/iam"
99 "github.com/databricks/terraform-provider-databricks/common"
1010 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1111)
1212
13- func NewPermissionAssignmentAPI (ctx context.Context , m any ) PermissionAssignmentAPI {
14- return PermissionAssignmentAPI {m .(* common.DatabricksClient ), ctx }
15- }
16-
17- type PermissionAssignmentAPI struct {
18- client * common.DatabricksClient
19- context context.Context
20- }
21-
22- type Permissions struct {
23- Permissions []string `json:"permissions"`
24- }
25-
26- func (a PermissionAssignmentAPI ) CreateOrUpdate (workspaceId , principalId int64 , r Permissions ) error {
27- if a .client .Config .AccountID == "" {
28- return errors .New ("must have `account_id` on provider" )
29- }
30- path := fmt .Sprintf (
31- "/accounts/%s/workspaces/%d/permissionassignments/principals/%d" ,
32- a .client .Config .AccountID , workspaceId , principalId )
33- return a .client .Put (a .context , path , r )
34- }
35-
36- func (a PermissionAssignmentAPI ) Remove (workspaceId , principalId string ) error {
37- if a .client .Config .AccountID == "" {
38- return errors .New ("must have `account_id` on provider" )
39- }
40- path := fmt .Sprintf (
41- "/accounts/%s/workspaces/%s/permissionassignments/principals/%s" ,
42- a .client .Config .AccountID , workspaceId , principalId )
43- return a .client .Delete (a .context , path , nil )
44- }
45-
46- type Principal struct {
47- DisplayName string `json:"display_name"`
48- PrincipalID int64 `json:"principal_id"`
49- ServicePrincipalName string `json:"service_principal_name,omitempty"`
50- UserName string `json:"user_name,omitempty"`
51- GroupName string `json:"group_name,omitempty"`
52- }
53-
54- type PermissionAssignment struct {
55- Permissions []string `json:"permissions"`
56- Principal Principal
57- }
58-
59- type PermissionAssignmentList struct {
60- PermissionAssignments []PermissionAssignment `json:"permission_assignments"`
61- }
62-
63- func (l PermissionAssignmentList ) ForPrincipal (principalId int64 ) (res Permissions , err error ) {
64- for _ , v := range l .PermissionAssignments {
65- if v .Principal .PrincipalID != principalId {
13+ func getPermissionsByPrincipal (list iam.PermissionAssignments , principalId int64 ) (res iam.UpdateWorkspaceAssignments , err error ) {
14+ for _ , v := range list .PermissionAssignments {
15+ if v .Principal .PrincipalId != principalId {
6616 continue
6717 }
68- return Permissions { v .Permissions }, nil
18+ return iam. UpdateWorkspaceAssignments { Permissions : v .Permissions }, nil
6919 }
7020 return res , apierr .NotFound (fmt .Sprintf ("%d not found" , principalId ))
7121}
7222
73- func (a PermissionAssignmentAPI ) List (workspaceId int64 ) (list PermissionAssignmentList , err error ) {
74- if a .client .Config .AccountID == "" {
75- return list , errors .New ("must have `account_id` on provider" )
76- }
77- path := fmt .Sprintf ("/accounts/%s/workspaces/%d/permissionassignments" ,
78- a .client .Config .AccountID , workspaceId )
79- err = a .client .Get (a .context , path , nil , & list )
80- return
81- }
82-
8323func ResourceMwsPermissionAssignment () common.Resource {
84- type entity struct {
85- WorkspaceId int64 `json:"workspace_id"`
86- PrincipalId int64 `json:"principal_id"`
87- Permissions []string `json:"permissions" tf:"slice_as_set"`
88- }
89- s := common .StructToSchema (entity {},
90- common .NoCustomize )
24+ s := common .StructToSchema (iam.UpdateWorkspaceAssignments {},
25+ func (m map [string ]* schema.Schema ) map [string ]* schema.Schema {
26+ common .CustomizeSchemaPath (m ).AddNewField ("workspace_id" , & schema.Schema {
27+ Type : schema .TypeInt ,
28+ Required : true ,
29+ }).AddNewField ("principal_id" , & schema.Schema {
30+ Type : schema .TypeInt ,
31+ Required : true ,
32+ })
33+ common .CustomizeSchemaPath (m , "permissions" ).SetRequired ().SetSliceSet ()
34+ return m
35+ })
9136 pair := common .NewPairID ("workspace_id" , "principal_id" ).Schema (
9237 func (m map [string ]* schema.Schema ) map [string ]* schema.Schema {
9338 return s
9439 })
9540 return common.Resource {
9641 Schema : s ,
9742 Create : func (ctx context.Context , d * schema.ResourceData , c * common.DatabricksClient ) error {
98- var assignment entity
43+ acc , err := c .AccountClient ()
44+ if err != nil {
45+ return err
46+ }
47+ var assignment iam.UpdateWorkspaceAssignments
9948 common .DataToStructPointer (d , s , & assignment )
100- api := NewPermissionAssignmentAPI ( ctx , c )
101- err := api . CreateOrUpdate ( assignment . WorkspaceId , assignment . PrincipalId ,
102- Permissions { assignment . Permissions } )
49+ assignment . PrincipalId = common . GetInt64 ( d , "principal_id" )
50+ assignment . WorkspaceId = common . GetInt64 ( d , "workspace_id" )
51+ _ , err = acc . WorkspaceAssignment . Update ( ctx , assignment )
10352 if err != nil {
10453 return err
10554 }
10655 pair .Pack (d )
10756 return nil
10857 },
10958 Read : func (ctx context.Context , d * schema.ResourceData , c * common.DatabricksClient ) error {
59+ acc , err := c .AccountClient ()
60+ if err != nil {
61+ return err
62+ }
11063 workspaceId , principalId , err := pair .Unpack (d )
11164 if err != nil {
11265 return fmt .Errorf ("parse id: %w" , err )
11366 }
114- list , err := NewPermissionAssignmentAPI (ctx , c ). List ( common .MustInt64 (workspaceId ))
67+ list , err := acc . WorkspaceAssignment . ListByWorkspaceId (ctx , common .MustInt64 (workspaceId ))
11568 if err != nil {
11669 return err
11770 }
118- permissions , err := list . ForPrincipal ( common .MustInt64 (principalId ))
71+ permissions , err := getPermissionsByPrincipal ( * list , common .MustInt64 (principalId ))
11972 if err != nil {
12073 return err
12174 }
75+ d .Set ("workspace_id" , common .MustInt64 (workspaceId ))
76+ d .Set ("principal_id" , common .MustInt64 (principalId ))
12277 return common .StructToData (permissions , s , d )
12378 },
12479 Delete : func (ctx context.Context , d * schema.ResourceData , c * common.DatabricksClient ) error {
80+ acc , err := c .AccountClient ()
81+ if err != nil {
82+ return err
83+ }
12584 workspaceId , principalId , err := pair .Unpack (d )
12685 if err != nil {
12786 return fmt .Errorf ("parse id: %w" , err )
12887 }
129- return NewPermissionAssignmentAPI (ctx , c ). Remove (workspaceId , principalId )
88+ return acc . WorkspaceAssignment . DeleteByWorkspaceIdAndPrincipalId (ctx , common . MustInt64 (workspaceId ), common . MustInt64 ( principalId ) )
13089 },
13190 }
13291}
0 commit comments