@@ -8,33 +8,50 @@ locals {
8
8
}
9
9
10
10
members_object_list = concat (
11
- flatten ([for group , params in var . iam : [
11
+ flatten ([for group , params in var . iam_workspace_groups : [
12
12
for pair in setproduct ([group ], params. user ) : {
13
13
type = " user" , group = pair [0 ], member = pair [1 ]
14
14
}] if params . user != null
15
15
]),
16
- flatten ([for group , params in var . iam : [
16
+ flatten ([for group , params in var . iam_workspace_groups : [
17
17
for pair in setproduct ([group ], params. service_principal ) : {
18
18
type = " service_principal" , group = pair [0 ], member = pair [1 ]
19
19
}] if params . service_principal != null
20
20
])
21
21
)
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
22
37
}
23
38
24
39
data "databricks_group" "admin" {
40
+ count = length (local. iam_account_map ) != 0 ? 0 : 1
41
+
25
42
display_name = " admins"
26
43
}
27
44
28
45
resource "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 ))
30
47
31
48
display_name = each. key
32
49
lifecycle { ignore_changes = [external_id , allow_cluster_create , allow_instance_pool_create , databricks_sql_access , workspace_access ] }
33
50
}
34
51
35
52
resource "databricks_user" "this" {
36
53
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 }),
38
55
values (local. admin_user_map )
39
56
)))
40
57
@@ -44,7 +61,7 @@ resource "databricks_user" "this" {
44
61
45
62
resource "databricks_service_principal" "this" {
46
63
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 }),
48
65
values (local. admin_sp_map )
49
66
)))
50
67
@@ -54,14 +71,14 @@ resource "databricks_service_principal" "this" {
54
71
}
55
72
56
73
resource "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 )
58
75
59
- group_id = data. databricks_group . admin . id
76
+ group_id = data. databricks_group . admin [ 0 ] . id
60
77
member_id = startswith (each. key , " user" ) ? databricks_user. this [each . value ]. id : databricks_service_principal. this [each . value ]. id
61
78
}
62
79
63
80
resource "databricks_group_member" "this" {
64
- for_each = {
81
+ for_each = length (local . iam_account_map ) != 0 ? {} : {
65
82
for entry in local . members_object_list : " ${ entry . type } .${ entry . group } .${ entry . member } " => entry
66
83
}
67
84
@@ -70,14 +87,12 @@ resource "databricks_group_member" "this" {
70
87
}
71
88
72
89
resource "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
76
91
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" )
81
96
workspace_access = true
82
97
83
98
depends_on = [databricks_group_member . this ]
0 commit comments