如何利用布尔值在Terraform资源中创建动态块?
基于布尔变量控制Terraform动态块的最优实现
你的问题出在当前的for_each表达式逻辑上:当var.jobs[0].uses_existing_cluster为true时,你生成的是一个包含空列表的列表([[]]),这种嵌套空列表的结构无法正确触发动态块的渲染。
最优实现方式是直接通过三元运算符将布尔值转换为单元素列表或空列表,因为for_each需要可迭代对象,单元素列表会触发一次动态块生成,空列表则不会生成任何块。
修改后的代码如下:
dynamic "job_cluster" { for_each = var.jobs[0].uses_existing_cluster ? [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 } } }
逻辑说明
- 当
var.jobs[0].uses_existing_cluster为true时,[1]是一个包含单个元素的列表,for_each会迭代一次,渲染出对应的job_cluster块。 - 当该布尔值为
false时,[]是空列表,for_each没有可迭代的元素,因此不会生成任何job_cluster块。
这种写法简洁直接,避免了冗余的for表达式嵌套,同时完全符合Terraform动态块的语法要求。
内容的提问来源于stack exchange,提问作者network_slayer
相关产品推荐
相关产品推荐

