@@ -3,6 +3,12 @@ locals {
3
3
(var. sp_client_id_secret_name ) = { value = data.azurerm_key_vault_secret.sp_client_id.value }
4
4
(var. sp_key_secret_name ) = { value = data.azurerm_key_vault_secret.sp_key.value }
5
5
}
6
+
7
+ secrets_objects_list = flatten ([for param in var . secret_scope : [
8
+ for secret in param . secrets : {
9
+ scope_name = param . scope_name , key = secret . key , string_value = secret . string_value
10
+ }] if param . secrets != null
11
+ ])
6
12
}
7
13
8
14
# Secret Scope with SP secrets for mounting Azure Data Lake Storage
@@ -18,3 +24,51 @@ resource "databricks_secret" "main" {
18
24
string_value = each. value [" value" ]
19
25
scope = databricks_secret_scope. main . id
20
26
}
27
+
28
+ # Custom additional Databricks Secret Scope
29
+ resource "databricks_secret_scope" "this" {
30
+ for_each = {
31
+ for param in var . secret_scope : (param. scope_name ) => param
32
+ if param . scope_name != null
33
+ }
34
+
35
+ name = each. key
36
+ initial_manage_principal = " users"
37
+ }
38
+
39
+ resource "databricks_secret" "this" {
40
+ for_each = { for entry in local . secrets_objects_list : " ${ entry . scope_name } .${ entry . key } " => entry }
41
+
42
+ key = each. value . key
43
+ string_value = each. value . string_value
44
+ scope = databricks_secret_scope. this [each . value . scope_name ]. id
45
+ }
46
+
47
+ # At the nearest future, Azure will allow acquiring AAD tokens by service principals,
48
+ # thus providing an ability to create Azure backed Key Vault with Terraform
49
+ # https://github.com/databricks/terraform-provider-databricks/pull/1965
50
+
51
+ # # Azure Key Vault-backed Scope
52
+ # resource "azurerm_key_vault_access_policy" "databricks" {
53
+ # count = var.key_vault_secret_scope.key_vault_id != null ? 1 : 0
54
+
55
+ # key_vault_id = var.key_vault_secret_scope.key_vault_id
56
+ # object_id = "9b38785a-6e08-4087-a0c4-20634343f21f" # Global 'AzureDatabricks' SP object id
57
+ # tenant_id = data.azurerm_key_vault_secret.tenant_id.value
58
+ #
59
+ # secret_permissions = [
60
+ # "Get",
61
+ # "List",
62
+ # ]
63
+ # }
64
+ #
65
+ # resource "databricks_secret_scope" "external" {
66
+ # count = var.key_vault_secret_scope.key_vault_id != null ? 1 : 0
67
+ #
68
+ # name = "external"
69
+ # keyvault_metadata {
70
+ # resource_id = var.key_vault_secret_scope.key_vault_id
71
+ # dns_name = var.key_vault_secret_scope.dns_name
72
+ # }
73
+ # depends_on = [azurerm_key_vault_access_policy.databricks]
74
+ # }
0 commit comments