【发布时间】:2022-10-19 04:09:41
【问题描述】:
我有以下配置:
# Configure the Azure provider
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.25.0"
}
databricks = {
source = "databricks/databricks"
version = "1.4.0"
}
}
}
provider "azurerm" {
alias = "uat-sub"
features {}
subscription_id = "sfsdf"
}
provider "databricks" {
host = "https://abd-1234.azuredatabricks.net"
token = "sdflkjsdf"
alias = "dev-dbx-provider"
}
resource "databricks_cluster" "dev_cluster" {
cluster_name = "xyz"
spark_version = "10.4.x-scala2.12"
}
我能够成功导入 databricks_cluster.dev_cluster。导入后,我更新我的配置以从状态中的集群输出一个值。更新后的配置如下所示:
# Configure the Azure provider
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.25.0"
}
databricks = {
source = "databricks/databricks"
version = "1.4.0"
}
}
}
provider "azurerm" {
alias = "uat-sub"
features {}
subscription_id = "sfsdf"
}
provider "databricks" {
host = "https://abd-1234.azuredatabricks.net"
token = "sdflkjsdf"
alias = "dev-dbx-provider"
}
resource "databricks_cluster" "dev_cluster" {
cluster_name = "xyz"
spark_version = "10.4.x-scala2.12"
}
output "atm"{
value = databricks_cluster.dev_cluster.autotermination_minutes
}
当我在更新的配置上运行 terraform apply 时,terrform 会继续刷新我导入的集群并检测更改并执行“就地更新”,其中我的集群上的某些值设置为空(autoscale/pyspark_env 等)。当集群实际上没有进行任何更改时,所有这些都会发生。为什么会这样?为什么在未进行任何更改时 terraform 会重置某些值?
编辑-“地形计划”输出:
C:\Users\>terraform plan
databricks_cluster.dev_cluster: Refreshing state... [id=gyht]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# databricks_cluster.dev_cluster will be updated in-place
~ resource "databricks_cluster" "dev_cluster" {
~ autotermination_minutes = 10 -> 60
- data_security_mode = "NONE" -> null
id = "gyht"
~ spark_env_vars = {
- "PYSPARK_PYTHON" = "/databricks/python3/bin/python3" -> null
}
# (13 unchanged attributes hidden)
- autoscale {
- max_workers = 8 -> null
- min_workers = 2 -> null
}
- cluster_log_conf {
- dbfs {
- destination = "dbfs:/cluster-logs" -> null
}
}
# (2 unchanged blocks hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
编辑 - 使用硬编码标签解决:
resource "databricks_cluster" "dev_cluster" {
cluster_name = "xyz"
spark_version = "10.4.x-scala2.12"
autotermination_minutes = 10
data_security_mode = "NONE"
autoscale {
max_workers = 8
min_workers = 2
}
cluster_log_conf {
dbfs {
destination = "dbfs:/cluster-logs"
}
}
spark_env_vars = {
PYSPARK_PYTHON = "/databricks/python3/bin/python3"
}
}
解决方法部分有效,因为我不再看到 terraform 尝试在每次应用时重置标签。但是,如果我要更改集群上的任何标签,假设我将最大工作人员更改为 5,则 terraform 不会更新状态以反映 5 个工作人员。 TF 将用硬编码的 8 覆盖 5,这是一个问题。
【问题讨论】:
-
您可以显示计划的更改输出吗?
-
terraform 正在尝试更新哪些更改?
tags? -
@Marcin 使用计划和标签详细信息更新了 OP。
-
@harshavmb,有关详细信息,请参阅我的编辑。
-
But if I were to change any of the tags on the cluster, lets says I change max workers to 5, terraform will not update state to reflect 5 workers. TF will override 5 with the hard coded 8, which is an issue.terraform 如何设置您在资源中设置的内容是一个问题?
标签: azure terraform resources state databricks