如何在Terraform中将元组转换为无转义双引号的字符串型字符串?
Terraform 动态生成带单引号的服务器列表字符串
问题背景
最初尝试将服务器元组转换为带双引号的字符串时,使用format("%q", i)会生成带转义符的结果\"xxx\", \"yyy\", \"zzz\",直接拼接又无法保留引号。后续明确核心需求:要动态将服务器列表传入format函数,生成格式为'xxx' 'yyy' 'zzz'的字符串,但多次尝试format_data的拼接方式均未达到预期。
原尝试代码:
locals { servers = [ "xxx", "yyy", "zzz" ] format_type = join(" ", [for i in local.servers : "'%s'"]) format_data = join(",", [for s in local.servers : format("\"%v\"", s)]) # 结果为"\"xxx\",\"yyy\",\"zzz\"" } output "testing" { value = format(local.format_type, local.format_data) }
解决方案
问题出在错误地将服务器列表拼接成单个字符串传入format,而format要求每个%s占位符对应一个独立参数。正确做法是使用Terraform的展开运算符...,将服务器列表的元素作为独立参数传递给format:
locals { servers = ["xxx", "yyy", "zzz"] # 生成对应数量的'%s'占位符,并用空格连接 format_type = join(" ", [for _ in local.servers : "'%s'"]) } output "testing" { # 使用...展开servers列表,每个元素对应一个%s占位符 value = format(local.format_type, local.servers...) }
效果验证
执行后输出结果为:
'xxx' 'yyy' 'zzz'
内容的提问来源于stack exchange,提问作者Theo Sweeny
相关产品推荐
相关产品推荐

