Terraform如何将列表字符串逐个传入list(string)类型资源参数
解决方法
首先先把你的变量定义更严谨些,显式指定类型为list(string):
variable "mywords" { type = list(string) default = ["simple","but","lovely"] }
接下来分两种场景处理:
场景1:资源的words参数确实是list(string)类型
你当前的写法words = var.mywords本身就是正确的,因为该参数设计用来接收字符串列表。如果觉得“整个列表传入”不符合预期,可能是对参数的使用场景理解有误,这个参数本身就需要接收完整列表,无需拆分。
场景2:资源要求逐个传入字符串(比如用嵌套块定义)
如果资源要求的是通过多个独立的嵌套块来定义每个字符串(比如类似word { value = "xxx" }的结构),可以用Terraform的dynamic块遍历你的列表变量,自动生成每个块:
resource "provider_resource" "example" { dynamic "word" { for_each = var.mywords content { value = word.value } } }
这里的word是动态块的名称,需要替换成你实际资源中对应的嵌套块名称,value也要替换成块中对应的参数名。
如果资源允许重复设置同名参数(这种情况比较少见,因为Terraform通常会覆盖重复参数),可以用for表达式展开,但这种写法本质和直接传var.mywords效果一致,只有当需要对每个元素做额外处理时才有用:
resource "provider_resource" "example" { words = [for w in var.mywords : w] }
内容的提问来源于stack exchange,提问作者Ogasontop
相关产品推荐
相关产品推荐

