@@ -8,33 +8,50 @@ locals {
88  }
99
1010  members_object_list  =  concat (
11-     flatten ([for  group , params  in  var . iam  :  [
11+     flatten ([for  group , params  in  var . iam_workspace_groups  :  [
1212      for  pair  in  setproduct ([group ], params. user ) :  {
1313        type  = " user" group  = pair [0 ], member  = pair [1 ]
1414      }] if  params . user  !=  null 
1515    ]),
16-     flatten ([for  group , params  in  var . iam  :  [
16+     flatten ([for  group , params  in  var . iam_workspace_groups  :  [
1717      for  pair  in  setproduct ([group ], params. service_principal ) :  {
1818        type  = " service_principal" group  = pair [0 ], member  = pair [1 ]
1919      }] if  params . service_principal  !=  null 
2020    ])
2121  )
22+ 
23+   iam_account_map  =  tomap ({
24+     for  group  in  var . iam_account_groups  :  group . group_name  =>  group . entitlements 
25+     if  group . group_name  !=  null 
26+   })
27+ 
28+   iam_workspace_map  =  
29+     for  group , params  in  var . iam_workspace_groups  :  group  =>  params . entitlements 
30+   }
31+ }
32+ 
33+ data  "databricks_group"  "account_groups"  {
34+   for_each  =  . iam_account_map 
35+ 
36+   display_name  =  . key 
2237}
2338
2439data  "databricks_group"  "admin"  {
40+   count  =  length (local. iam_account_map ) !=  0  ?  0  :  1 
41+ 
2542  display_name  =  " admins" 
2643}
2744
2845resource  "databricks_group"  "this"  {
29-   for_each  =  toset (keys (var. iam ))
46+   for_each  =  length (local . iam_account_map )  !=   0   ?  []  :   toset (keys (var. iam_workspace_groups ))
3047
3148  display_name  =  . key 
3249  lifecycle  { ignore_changes  =  external_id , allow_cluster_create , allow_instance_pool_create , databricks_sql_access , workspace_access ] }
3350}
3451
3552resource  "databricks_user"  "this"  {
3653  for_each  =  toset (flatten (concat (
37-     values ({ for  group , member  in  var . iam  :  group  =>  member . user  if  member . user  !=  null  }),
54+     values ({ for  group , member  in  var . iam_workspace_groups  :  group  =>  member . user  if  member . user  !=  null  }),
3855    values (local. admin_user_map )
3956  )))
4057
@@ -44,7 +61,7 @@ resource "databricks_user" "this" {
4461
4562resource  "databricks_service_principal"  "this"  {
4663  for_each  =  toset (flatten (concat (
47-     values ({ for  group , member  in  var . iam  :  group  =>  member . service_principal  if  member . service_principal  !=  null  }),
64+     values ({ for  group , member  in  var . iam_workspace_groups  :  group  =>  member . service_principal  if  member . service_principal  !=  null  }),
4865    values (local. admin_sp_map )
4966  )))
5067
@@ -54,14 +71,14 @@ resource "databricks_service_principal" "this" {
5471}
5572
5673resource  "databricks_group_member"  "admin"  {
57-   for_each  =  merge (local. admin_user_map , local. admin_sp_map )
74+   for_each  =  length (local . iam_account_map )  !=   0   ?  {}  :   merge (local. admin_user_map , local. admin_sp_map )
5875
59-   group_id   =  . databricks_group . admin . id 
76+   group_id   =  . databricks_group . admin [ 0 ] . id 
6077  member_id  =  startswith (each. key , " user" ?  databricks_user. this [each . value ]. id  :  databricks_service_principal. this [each . value ]. id 
6178}
6279
6380resource  "databricks_group_member"  "this"  {
64-   for_each  =  
81+   for_each  =  length (local . iam_account_map )  !=   0   ?  {}  :   {
6582    for  entry  in  local . members_object_list  :  " ${ entry . type } .${ entry . group } .${ entry . member } " =>  entry 
6683  }
6784
@@ -70,14 +87,12 @@ resource "databricks_group_member" "this" {
7087}
7188
7289resource  "databricks_entitlements"  "this"  {
73-   for_each  =  
74-     for  group , params  in  var . iam  :  group  =>  params 
75-   }
90+   for_each  =  length (local. iam_account_map ) !=  0  ?  local. iam_account_map  :  local. iam_workspace_map 
7691
77-   group_id                    =  . this [each . key ]. id 
78-   allow_cluster_create        =  contains (coalesce (each. value . entitlements , [" none" " allow_cluster_create" 
79-   allow_instance_pool_create  =  contains (coalesce (each. value . entitlements , [" none" " allow_instance_pool_create" 
80-   databricks_sql_access       =  contains (coalesce (each. value . entitlements , [" none" " databricks_sql_access" 
92+   group_id                    =  length (local . iam_account_map )  !=   0   ?  data . databricks_group . account_groups [ each . key ] . id   :   databricks_group. this [each . key ]. id 
93+   allow_cluster_create        =  contains (coalesce (each. value , [" none" " allow_cluster_create" 
94+   allow_instance_pool_create  =  contains (coalesce (each. value , [" none" " allow_instance_pool_create" 
95+   databricks_sql_access       =  contains (coalesce (each. value , [" none" " databricks_sql_access" 
8196  workspace_access            =  true 
8297
8398  depends_on  =  databricks_group_member . this ]
0 commit comments