terraformdatabricksazure-databricksterraform-provider-azureterraform-provider-databricks

Issue provisioning Databricks workspace resources using Terraform


I have defined resource to provision databricks workspace on Azure using Terraform as follows which consumes the list ( of inputs from tfvar file for # of workspaces) and provision them.

resource "azurerm_databricks_workspace" "workspace" {
  for_each            = { for r in var.databricks_workspace_list : r.workspace_nm => r}
  name                = each.key
  resource_group_name = each.value.resource_group_name
  location            = each.value.location
  sku                 = "standard"

  tags = {
    Environment = "Dev"
  }
}

I am trying to create additional resource as below

resource "databricks_instance_pool" "smallest_nodes" {
  instance_pool_name = "Smallest Nodes"
  min_idle_instances = 0
  max_capacity       = 300
  node_type_id       = data.databricks_node_type.smallest.id // data block is defined
  idle_instance_autotermination_minutes = 10
}

To create instance pool, I need to pass workspace id in databricks provider block as below

provider "databricks" {
azure_client_id= *******
azure_client_secret= *******
azure_tenant_id= *******

azure_workspace_resource_id = azurerm_databricks_workspace.workspace.id

}

But when I do terraform plan, it fails with below error

Missing resource instance key
azure_workspace_resource_id = azurerm_databricks_workspace.workspace.id

Because azure_workspace_resource_id = azurerm_databricks_workspace has for_each set, its attribute must be accessed on specific instances.
For example, to correlate indices , use :
azurerm_databricks_workspace[each.key] 

I couldnt use for_each in provider block, also not able to find out way to index workspace id in provider block. Appreciate your inputs.

TF version : 0.13

Azure RM : 3.10.0

Databricks : 0.5.7


Solution

  • The problem is that you can create multiple workspaces when you're using for_each in the azurerm_databricks_workspace resource. But your provider block is trying to refer to a "generic" resource instance, so it's complaining.

    The solution here would be either:

    P.S. Your databricks_instance_pool resource doesn't have explicit depends_on, so the operation will fail with authentication error as described here.