@@ -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 = local. iam_account_map
35+
36+ display_name = each. 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 = each. 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 = data. databricks_group . admin . id
76+ group_id = data. 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 = databricks_group. 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