@@ -3,44 +3,46 @@ locals {
33 var . policy_name_prefix ,
44 ])
55
6- # Define the policies with existing groups mapped to each policy
7- policies = var. policy_map
8-
9- # Generate full workspace policy names by prefixing policy names
10- all_ws_policy_names = flatten ([
6+ policy_group_memberships = flatten ([
117 for prefix in local . ws_policy_name_prefixes : [
12- for policy_map in local . policies :
13- " ${ prefix } ${ keys (policy_map)[0 ]} "
8+ for policy_suffix , groups_names in merge (var. policy_map ... ) : [
9+ for group_name in groups_names : {
10+ policy = " ${ prefix } ${ policy_suffix } " ,
11+ group = group_name
12+ }
13+ ]
1414 ]
1515 ])
1616
17- # Create a flat map of policy names to associated groups
18- policy_group_map = merge ( [for policy_map in local . policies : policy_map ] ... )
17+ ws_cluster_policy_names = toset ( flatten ([ for pair in local . policy_group_memberships : pair . policy ]))
18+ usergroups_names = toset ( flatten ( [for pair in local . policy_group_memberships : pair . group ]) )
1919}
2020
2121# Create Databricks groups for each policy name
22- resource "databricks_group" "ws_policy_groups " {
23- for_each = toset ( local. all_ws_policy_names )
22+ resource "databricks_group" "ws_cluster_policy_groups " {
23+ for_each = local. ws_cluster_policy_names
2424
2525 display_name = each. key
2626 workspace_access = true
2727}
2828
29- # Retrieve the existing Databricks groups that need to be assigned
30- data "databricks_group" "groups" {
31- for_each = toset (flatten ([
32- for group in local . policy_group_map : group
33- ]))
29+ # Retrieve the existing Databricks usergroups that need to be assigned
30+ data "databricks_group" "usergroups" {
31+ for_each = local. usergroups_names
3432
3533 display_name = each. value
3634}
3735
38- # Assign the existing groups to the newly created policy groups
36+ # Assign user groups to policy groups per policy-usergroup pair
3937resource "databricks_group_member" "ws_policy_group_members" {
40- for_each = databricks_group. ws_policy_groups
41-
42- group_id = each. value . id
43-
44- # Assign all existing groups that correspond to this policy group
45- member_id = data. databricks_group . groups [local . policy_group_map [replace (each. key , var. policy_name_prefix , " " )][0 ]]. id
38+ for_each = {
39+ for pair in local . policy_group_memberships :
40+ " ${pair.policy}+${pair.group}" => {
41+ policy : pair.policy,
42+ group : pair.group,
43+ }
44+ }
45+
46+ group_id = databricks_group. ws_cluster_policy_groups [each . value . policy ]. id
47+ member_id = data. databricks_group . usergroups [each . value . group ]. id
4648}
0 commit comments