Terraform 将多个属性块合二为一

Terraform combine multiple attribute blocks into one

我正在尝试使用 terraform 在 DataBricks 工作区中自动化和配置 DataBricks 集群。

我们有需要在集群创建时安装的预定义库,我们大约有 20 个库

variable"libraries"{
default = ["pypi","jar"]
}

variable"pythonpackages"{
default = ["conda","pymongo"]
}

variable"jarpackages"{
default = ["etc1","etc1"]
}

variable"repositories"{
default = ["internal1","internal2"]
}

resource "databricks_cluster" "shared_autoscaling" {

  cluster_name            = "Shared Autoscaling"
  spark_version           = data.databricks_spark_version.latest_lts.id
  node_type_id            = data.databricks_node_type.smallest.id
  autotermination_minutes = 20
  autoscale {
    min_workers = 1
    max_workers = 50
  }
  library { 
    pypi  {
        package = "dnspython"
        }
    }
      library { 
    pypi  {
        package = "condo"
        }
    }
         library { 
    pypi  {
        package = "kedro"
        repo = "artifactory-url"
        }
    }
  
}

我正在尝试删除库属性重复项。我在库属性中使用 for_each 进行了尝试,但结果不正确。

我想要达到的目标

variable"libraries"{
default = ["pypi","jar"]
}

variable"pythonpackages"{
default = ["conda","pymongo"]
}

variable"jarpackages"{
default = ["etc1","etc1"]
}

variable"repositories"{
default = ["internal1","internal2"]
}

resource "databricks_cluster" "shared_autoscaling" {

  cluster_name            = "Shared Autoscaling"
  spark_version           = data.databricks_spark_version.latest_lts.id
  node_type_id            = data.databricks_node_type.smallest.id
  autotermination_minutes = 20
  autoscale {
    min_workers = 1
    max_workers = 50
  }

      library { 
    pypi  {
        package = ["condo","pymongo","listofpackages"]
        }
    }
  
}

您可以使用 dynamic blocks 重复嵌套块。

例如要重复库块,您可以这样写:

resource "databricks_cluster" "shared_autoscaling" {
  cluster_name            = "Shared Autoscaling"
  spark_version           = data.databricks_spark_version.latest_lts.id
  node_type_id            = data.databricks_node_type.smallest.id
  autotermination_minutes = 20
  autoscale {
    min_workers = 1
    max_workers = 50
  }
  
  dynamic "library" {
    for_each = ["condo","pymongo","listofpackages"]
    content {
      pypi {
        package = library.value
      }
    }
  }
 }