Skip to content

Commit 280425b

Browse files
committed
fix: updated varialbes
1 parent 0dcaa51 commit 280425b

File tree

3 files changed

+38
-38
lines changed

3 files changed

+38
-38
lines changed

iam.tf

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2633
data "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

3239
data "databricks_group" "admin" {
40+
count = length(local.iam_account_map) != 0 ? 0 : 1
41+
3342
display_name = "admins"
3443
}
3544

3645
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))
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

4352
resource "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

5362
resource "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

6473
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)
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

7180
resource "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

8089
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
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]

permissions.tf

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,20 @@ locals {
44
scope = param.scope_name, principal = permission.principal, permission = permission.permission
55
}] if param.acl != null
66
])
7-
account_level_group_permissions = { for group in var.account_groups : (group.cluster_name) => {
8-
permissions = [{
9-
group_name = group.name,
10-
permission_level = group.permission
11-
}]
12-
} if group.permission != null
13-
}
14-
workspace_level_group_permissions = length(var.account_groups) != 0 ? {} : {
15-
for group in var.clusters : (group.cluster_name) => group if length(group.permissions) != 0
16-
}
177
}
188

199
resource "databricks_permissions" "clusters" {
20-
for_each = merge(local.account_level_group_permissions, local.workspace_level_group_permissions)
10+
for_each = {
11+
for v in var.clusters : (v.cluster_name) => v
12+
if length(v.permissions) != 0
13+
}
2114

2215
cluster_id = databricks_cluster.cluster[each.key].id
2316

2417
dynamic "access_control" {
2518
for_each = each.value.permissions
2619
content {
27-
group_name = length(var.account_groups) != 0 ? data.databricks_group.account_groups[access_control.value.group_name].display_name : databricks_group.this[access_control.value.group_name].display_name
20+
group_name = length(var.iam_workspace_groups) != 0 ? data.databricks_group.account_groups[access_control.value.group_name].display_name : databricks_group.this[access_control.value.group_name].display_name
2821
permission_level = access_control.value.permission_level
2922
}
3023
}
@@ -41,7 +34,7 @@ resource "databricks_permissions" "sql_endpoint" {
4134
dynamic "access_control" {
4235
for_each = each.value.permissions
4336
content {
44-
group_name = databricks_group.this[access_control.value.group_name].display_name
37+
group_name = length(var.iam_workspace_groups) != 0 ? data.databricks_group.account_groups[access_control.value.group_name].display_name : databricks_group.this[access_control.value.group_name].display_name
4538
permission_level = access_control.value.permission_level
4639
}
4740
}
@@ -51,6 +44,6 @@ resource "databricks_secret_acl" "this" {
5144
for_each = { for entry in local.secrets_acl_objects_list : "${entry.scope}.${entry.principal}.${entry.permission}" => entry }
5245

5346
scope = databricks_secret_scope.this[each.value.scope].name
54-
principal = databricks_group.this[each.value.principal].display_name
47+
principal = length(var.iam_workspace_groups) != 0 ? data.databricks_group.account_groups[each.value.principal].display_name : databricks_group.this[each.value.principal].display_name
5548
permission = each.value.permission
5649
}

variables.tf

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,16 @@ variable "workspace_admins" {
4343
}
4444
}
4545

46-
variable "account_groups" {
46+
variable "iam_account_groups" {
4747
type = list(object({
48-
name = string
48+
group_name = optional(string)
4949
entitlements = optional(list(string))
50-
cluster_name = optional(string)
51-
permission = optional(string)
5250
}))
53-
description = "List of objects with group name and entitlements for this group, cluster name to which should be added group and permissions for this group in cluster"
51+
description = "List of objects with group name and entitlements for this group"
5452
default = []
5553
}
5654

57-
variable "iam" {
55+
variable "iam_workspace_groups" {
5856
type = map(object({
5957
user = optional(list(string))
6058
service_principal = optional(list(string))
@@ -64,8 +62,8 @@ variable "iam" {
6462
default = {}
6563

6664
validation {
67-
condition = length([for item in values(var.iam)[*] : item.entitlements if item.entitlements != null]) != 0 ? alltrue([
68-
for entry in flatten(values(var.iam)[*].entitlements) : contains(["allow_cluster_create", "allow_instance_pool_create", "databricks_sql_access"], entry) if entry != null
65+
condition = length([for item in values(var.iam_workspace_groups)[*] : item.entitlements if item.entitlements != null]) != 0 ? alltrue([
66+
for entry in flatten(values(var.iam_workspace_groups)[*].entitlements) : contains(["allow_cluster_create", "allow_instance_pool_create", "databricks_sql_access"], entry) if entry != null
6967
]) : true
7068
error_message = "Entitlements validation. The only suitable values are: databricks_sql_access, allow_instance_pool_create, allow_cluster_create"
7169
}

0 commit comments

Comments
 (0)