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