@@ -21,16 +21,23 @@ import (
2121const groupMemberEntitlement = "member"
2222
2323type groupBuilder struct {
24- client * databricks.Client
25- resourceType * v2.ResourceType
26- resourceCache * ResourceCache
24+ client * databricks.Client
25+ resourceType * v2.ResourceType
2726}
2827
2928func (g * groupBuilder ) ResourceType (ctx context.Context ) * v2.ResourceType {
3029 return groupResourceType
3130}
3231
33- func groupResource (_ context.Context , group * databricks.Group , parent * v2.ResourceId ) (* v2.Resource , error ) {
32+ func groupResourceId (_ context.Context , groupId string , parentResourceId * v2.ResourceId ) string {
33+ if parentResourceId == nil {
34+ return strings .Join ([]string {groupResourceType .Id , groupId }, "/" )
35+ }
36+
37+ return strings .Join ([]string {parentResourceId .ResourceType , parentResourceId .Resource , groupResourceType .Id , groupId }, "/" )
38+ }
39+
40+ func groupResource (ctx context.Context , group * databricks.Group , parent * v2.ResourceId ) (* v2.Resource , error ) {
3441 members := make ([]string , len (group .Members ))
3542
3643 for i , member := range group .Members {
@@ -54,11 +61,10 @@ func groupResource(_ context.Context, group *databricks.Group, parent *v2.Resour
5461 }
5562
5663 var options []rs.ResourceOption
57- groupId := strings .Join ([]string {groupResourceType .Id , group .ID }, "/" )
5864 if parent != nil {
59- groupId = strings .Join ([]string {parent .ResourceType , parent .Resource , groupResourceType .Id , group .ID }, "/" )
6065 options = append (options , rs .WithParentResourceID (parent ))
6166 }
67+ groupId := groupResourceId (ctx , group .ID , parent )
6268
6369 resource , err := rs .NewGroupResource (
6470 group .DisplayName ,
@@ -110,7 +116,6 @@ func (g *groupBuilder) List(ctx context.Context, parentResourceID *v2.ResourceId
110116 if err != nil {
111117 return nil , "" , nil , err
112118 }
113- g .resourceCache .Set (group .ID , gr )
114119
115120 rv = append (rv , gr )
116121 }
@@ -210,12 +215,12 @@ func (g *groupBuilder) Grants(ctx context.Context, resource *v2.Resource, pToken
210215 case "Users" :
211216 resourceId = & v2.ResourceId {ResourceType : userResourceType .Id , Resource : memberID }
212217 case "Groups" :
213- memberResource , annotation , err := g . resourceCache . ExpandGrantForGroup (ctx , workspaceId , memberID )
218+ rid , expandAnnotation , err := groupGrantExpansion (ctx , memberID , parentId )
214219 if err != nil {
215- return nil , "" , nil , fmt . Errorf ( "databricks-connector: failed to expand grant for group %s: %w" , memberID , err )
220+ return rv , "" , nil , err
216221 }
217- anns = append ( anns , annotation )
218- resourceId = memberResource . Id
222+ resourceId = rid
223+ anns = append ( anns , expandAnnotation )
219224 case "ServicePrincipals" :
220225 resourceId = & v2.ResourceId {ResourceType : servicePrincipalResourceType .Id , Resource : memberID }
221226 default :
@@ -240,12 +245,12 @@ func (g *groupBuilder) Grants(ctx context.Context, resource *v2.Resource, pToken
240245 }
241246 var annotations []protoreflect.ProtoMessage
242247 if resourceId .ResourceType == groupResourceType .Id {
243- memberResource , annotation , err := g . resourceCache . ExpandGrantForGroup (ctx , workspaceId , resourceId .Resource )
248+ rid , expandAnnotation , err := groupGrantExpansion (ctx , resourceId .Resource , resource . ParentResourceId )
244249 if err != nil {
245- return nil , "" , nil , fmt . Errorf ( "databricks-connector: failed to expand grant for group %s: %w" , resourceId . Resource , err )
250+ return rv , "" , nil , err
246251 }
247- annotations = append ( annotations , annotation )
248- resourceId = memberResource . Id
252+ resourceId = rid
253+ annotations = append ( annotations , expandAnnotation )
249254 }
250255
251256 rv = append (rv , grant .NewGrant (resource , ruleSet .Role , resourceId , grant .WithAnnotation (annotations ... )))
@@ -471,10 +476,9 @@ func (g *groupBuilder) Revoke(ctx context.Context, grant *v2.Grant) (annotations
471476 return nil , nil
472477}
473478
474- func newGroupBuilder (client * databricks.Client , resourceCache * ResourceCache ) * groupBuilder {
479+ func newGroupBuilder (client * databricks.Client ) * groupBuilder {
475480 return & groupBuilder {
476- client : client ,
477- resourceType : groupResourceType ,
478- resourceCache : resourceCache ,
481+ client : client ,
482+ resourceType : groupResourceType ,
479483 }
480484}
0 commit comments