如何使用布尔值在 terraform 资源中创建动态块

net*_*yer 3 terraform

我正在尝试创建一个基于变量(当前是布尔值)的动态块。从我到目前为止的阅读来看,我唯一可用的选项似乎是 for_each 和 for (或组合)。我似乎无法使用 count,因为那只是资源级别的函数。

我相信 for 和 foreach 期望一个可迭代的,所以我最好的方法应该是基于 for/if 表达式创建一个可迭代的,尽管我没有太多运气。

实现这一目标的最佳方法是什么?

当前代码是:

dynamic "job_cluster" {
    for_each = [for cluster in ["true"] : [] if var.jobs[0].uses_existing_cluster]

    content {
      job_cluster_key = var.jobs[0].cluster.cluster_key
      new_cluster {
        #num_workers   = 2
        node_type_id  = data.databricks_node_type.smallest.id
    }
}
Run Code Online (Sandbox Code Playgroud)

使用这种方法我没有收到任何错误消息,但是当bool=true

Mat*_*ard 5

我猜测这里真正的问题是如何根据分配bool给 的类型值为动态块编写条件var.jobs[0].uses_existing_cluster。在这种情况下,我们可以简单地使用三元组来返回一个虚拟值listfor_each动态块中可接受的类型,但由于状态原因而不是资源)以进行true逻辑返回,并使用空值list来进行错误返回以延迟短路评估:

dynamic "job_cluster" {
  for_each = var.jobs[0].uses_existing_cluster ? ["this"] : []

  content {
    job_cluster_key = var.jobs[0].cluster.cluster_key
      new_cluster {
        #num_workers = 2
        node_type_id = data.databricks_node_type.smallest.id
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我还修复了上面几个丢失的终止括号。我认为枚举不是必需的,因为它不用于在您的问题中分配值。另外,如果动态块需要多次迭代,那么range通常使用该函数:

dynamic "job_cluster" {
  # two iterations
  for_each = var.jobs[0].uses_existing_cluster ? range(1) : []

  content {
    job_cluster_key = var.jobs[0].cluster.cluster_key
      new_cluster {
        #num_workers = 2
        node_type_id = data.databricks_node_type.smallest.id
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)