@@ -8,41 +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- account_groups = { for group in var . account_groups : group . name => group if group . name != null }
23- iam_map = length (var. iam ) != 0 ? { for group , params in var . iam : group => params if length (var. account_groups ) == 0 } : {}
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+ }
2431}
2532
2633data "databricks_group" "account_groups" {
27- for_each = local. account_groups
34+ for_each = local. iam_account_map
2835
2936 display_name = each. key
3037}
3138
3239data "databricks_group" "admin" {
40+ count = length (local. iam_account_map ) != 0 ? 0 : 1
41+
3342 display_name = " admins"
3443}
3544
3645resource "databricks_group" "this" {
37- for_each = length (local. account_groups ) != 0 ? [] : toset (keys (var. iam ))
46+ for_each = length (local. iam_account_map ) != 0 ? [] : toset (keys (var. iam_workspace_groups ))
3847
3948 display_name = each. key
4049 lifecycle { ignore_changes = [external_id , allow_cluster_create , allow_instance_pool_create , databricks_sql_access , workspace_access ] }
4150}
4251
4352resource "databricks_user" "this" {
4453 for_each = toset (flatten (concat (
45- 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 }),
4655 values (local. admin_user_map )
4756 )))
4857
@@ -52,7 +61,7 @@ resource "databricks_user" "this" {
5261
5362resource "databricks_service_principal" "this" {
5463 for_each = toset (flatten (concat (
55- 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 }),
5665 values (local. admin_sp_map )
5766 )))
5867
@@ -62,14 +71,14 @@ resource "databricks_service_principal" "this" {
6271}
6372
6473resource "databricks_group_member" "admin" {
65- for_each = length (local. account_groups ) != 0 ? {} : 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 )
6675
67- group_id = data. databricks_group . admin . id
76+ group_id = data. databricks_group . admin [ 0 ] . id
6877 member_id = startswith (each. key , " user" ) ? databricks_user. this [each . value ]. id : databricks_service_principal. this [each . value ]. id
6978}
7079
7180resource "databricks_group_member" "this" {
72- for_each = length (local. account_groups ) != 0 ? {} : {
81+ for_each = length (local. iam_account_map ) != 0 ? {} : {
7382 for entry in local . members_object_list : " ${ entry . type } .${ entry . group } .${ entry . member } " => entry
7483 }
7584
@@ -78,12 +87,12 @@ resource "databricks_group_member" "this" {
7887}
7988
8089resource "databricks_entitlements" "this" {
81- for_each = merge (local. account_groups , local. iam_map )
90+ for_each = length (local. iam_account_map ) != 0 ? local. iam_account_map : local . iam_workspace_map
8291
83- group_id = length (local. account_groups ) != 0 ? data. databricks_group . account_groups [each . key ]. id : databricks_group. this [each . key ]. id
84- allow_cluster_create = contains (coalesce (each. value . entitlements , [" none" ]), " allow_cluster_create" )
85- allow_instance_pool_create = contains (coalesce (each. value . entitlements , [" none" ]), " allow_instance_pool_create" )
86- 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" )
8796 workspace_access = true
8897
8998 depends_on = [databricks_group_member . this ]
0 commit comments