Terraform中如何解码templatefile输出以实现列表合并?
解决Terraform模板渲染后字符串转列表的问题
你遇到的问题是因为templatefile函数返回的是渲染后的文本字符串,哪怕你的模板内容是JSON数组格式,Terraform也只会把它当成普通字符串处理,而concat要求传入的是列表类型,所以会报错。
你需要用jsondecode函数将渲染后的JSON字符串解析成Terraform原生的列表(或对象)类型,具体修改如下:
- 保持你的
first.tfpl模板内容不变:
[ { name = "Test" grants = [ { grant = ["ADMIN"] principals = ${jsonencode(admins)} } } ]
- 修改
locals.tf中test的定义,通过jsondecode解析模板输出的字符串:
locals { admins = ["a","b","c"] } locals { test = jsondecode(templatefile("first.tfpl", { admins = local.admins })) }
- 此时
local.test会被识别为Terraform列表类型,就可以正常和其他列表用concat合并了:
locals { mylist= concat(["1","2"], local.test) }
这样修改后,Terraform就能正确解析模板输出的内容为列表,进而完成合并操作。
内容的提问来源于stack exchange,提问作者user3579222
相关产品推荐
相关产品推荐

