|
| 1 | +data "databricks_group" "admins" { |
| 2 | + display_name = "admins" |
| 3 | +} |
| 4 | + |
| 5 | +resource "databricks_group" "this" { |
| 6 | + for_each = toset([for group in keys(var.iam) : group if group != "admins"]) |
| 7 | + |
| 8 | + display_name = each.key |
| 9 | + lifecycle { ignore_changes = [external_id] } |
| 10 | +} |
| 11 | + |
| 12 | +resource "databricks_user" "this" { |
| 13 | + for_each = toset(flatten([for k, v in { for group, member in var.iam : group => member["user"] } : distinct(flatten(v))])) |
| 14 | + |
| 15 | + user_name = each.value |
| 16 | + databricks_sql_access = true |
| 17 | + lifecycle { ignore_changes = [external_id] } |
| 18 | +} |
| 19 | + |
| 20 | +resource "databricks_service_principal" "this" { |
| 21 | + for_each = toset(flatten([for k, v in { for group, member in var.iam : group => member["service_principal"] } : distinct(flatten(v))])) |
| 22 | + |
| 23 | + display_name = each.value |
| 24 | + application_id = lookup(var.user_object_ids, each.value) |
| 25 | + databricks_sql_access = true |
| 26 | +} |
| 27 | + |
| 28 | +resource "databricks_group_member" "admin_users" { |
| 29 | + for_each = { for entry in flatten([for group, types in var.iam : [for type in types : [for member in type : { |
| 30 | + group = group, member = member |
| 31 | + } if group == "admins" && type == types["user"]]]]) : "${entry.group}.${entry.member}" => entry } |
| 32 | + |
| 33 | + group_id = data.databricks_group.admins.id |
| 34 | + member_id = databricks_user.this[each.value.member].id |
| 35 | +} |
| 36 | + |
| 37 | +resource "databricks_group_member" "admin_service_principals" { |
| 38 | + for_each = { for entry in flatten([for group, types in var.iam : [for type in types : [for member in type : { |
| 39 | + group = group, member = member |
| 40 | + } if group == "admins" && type == types["service_principal"]]]]) : "${entry.group}.${entry.member}" => entry } |
| 41 | + |
| 42 | + group_id = data.databricks_group.admins.id |
| 43 | + member_id = databricks_service_principal.this[each.value.member].id |
| 44 | +} |
| 45 | + |
| 46 | +resource "databricks_group_member" "users" { |
| 47 | + for_each = { for entry in flatten([for group, types in var.iam : [for type in types : [for member in type : { |
| 48 | + group = group, member = member |
| 49 | + } if group != "admins" && group != "users" && type == types["user"]]]]) : "${entry.group}.${entry.member}" => entry } |
| 50 | + |
| 51 | + group_id = databricks_group.this[each.value.group].id |
| 52 | + member_id = databricks_user.this[each.value.member].id |
| 53 | +} |
| 54 | + |
| 55 | +resource "databricks_group_member" "service_principals" { |
| 56 | + for_each = { for entry in flatten([for group, types in var.iam : [for type in types : [for member in type : { |
| 57 | + group = group, member = member |
| 58 | + } if group != "admins" && group != "users" && type == types["service_principal"]]]]) : "${entry.group}.${entry.member}" => entry } |
| 59 | + |
| 60 | + group_id = databricks_group.this[each.value.group].id |
| 61 | + member_id = databricks_service_principal.this[each.value.member].id |
| 62 | +} |
| 63 | + |
| 64 | +resource "databricks_permissions" "sql_endpoint" { |
| 65 | + for_each = { for entry in databricks_sql_endpoint.this : "${entry.name}" => "${entry.id}" } |
| 66 | + |
| 67 | + sql_endpoint_id = each.value |
| 68 | + |
| 69 | + dynamic "access_control" { |
| 70 | + for_each = { for entry in flatten([for resource, permissions in var.iam_permissions : [for permission, groups in permissions : [for group in groups : { |
| 71 | + resource = resource, permission = permission, group = group |
| 72 | + } if resource == "sql_endpoint"]]]) : "${entry.resource}.${entry.permission}.${entry.group}" => entry } |
| 73 | + content { |
| 74 | + group_name = access_control.value.group |
| 75 | + permission_level = access_control.value.permission |
| 76 | + } |
| 77 | + } |
| 78 | + |
| 79 | + depends_on = [databricks_group.this] |
| 80 | +} |
| 81 | + |
| 82 | +resource "databricks_permissions" "token" { |
| 83 | + authorization = "tokens" |
| 84 | + |
| 85 | + dynamic "access_control" { |
| 86 | + for_each = { for entry in flatten([for resource, permissions in var.iam_permissions : [for permission, groups in permissions : [for group in groups : { |
| 87 | + resource = resource, permission = permission, group = group |
| 88 | + } if resource == "token"]]]) : "${entry.resource}.${entry.permission}.${entry.group}" => entry } |
| 89 | + content { |
| 90 | + group_name = access_control.value.group |
| 91 | + permission_level = access_control.value.permission |
| 92 | + } |
| 93 | + } |
| 94 | + depends_on = [databricks_group.this] |
| 95 | +} |
0 commit comments