将 terraform 输出从列表列表打印到字符串列表
print terraform output from list of list to a list of strings
我正在使用 terraform(v1.0.9) 作为基础设施即代码在 AWS 上进行虚拟机部署。我有 Terraform output.tf 来打印两个 lan a ips 和代码打印,列表列表如 [["ip_a",],[["ip_b",]] 但我想要一个列表像这样 ["ip_a", "ip_b"].
output.tf代码
`output "foo" {
value = {
name = "xyz"
all_ips = tolist(aws_network_interface.vm_a_eni_lan_a.*.private_ips)
}
}`
正在打印 -->
"name" = "xyz" "lan_a_ips" = tolist(\[ toset(\[ "10.0.27.116",\]), toset(\[ "10.0.28.201",\]), \])
但我想要 "lan_a_ips" = ["10.0.27.116", "10.0.28.201"]
我相信调整 output.tf 会有所帮助。感谢任何帮助。
在您的例子中,您刚刚将 splat 表达式 [1] 设置在了错误的位置,即没有设置 aws_network_interface.vm_a_eni_lan_a.private_ips[*]
,而是将其设置为 aws_network_interface.vm_a_eni_lan_a.*.private_ips
。所以你只需要改变输出值:
output "foo" {
value = {
name = "xyz"
all_ips = aws_network_interface.vm_a_eni_lan_a.private_ips[*]
}
}
编辑:以上内容适用于仅创建 aws_network_interface
资源的单个实例的情况。对于使用 count
meta-argument 创建此资源的多个实例的情况,可以使用以下方法获取 IP 列表:
output "foo" {
value = {
name = "xyz"
all_ips = flatten([for i in aws_network_interface.test[*] : i.private_ips[*]])
}
}
此处,for
[2] 循环用于遍历资源的所有实例,因此在引用它们时使用 splat 表达式 aws_network_interface.test[*]
。此外,由于这将创建一个列表列表(如 private_ips[*]
returns 列表),flatten
[3] built-in 函数可用于创建单个 IP 列表地址。
[1] https://www.terraform.io/language/expressions/splat
我正在使用 terraform(v1.0.9) 作为基础设施即代码在 AWS 上进行虚拟机部署。我有 Terraform output.tf 来打印两个 lan a ips 和代码打印,列表列表如 [["ip_a",],[["ip_b",]] 但我想要一个列表像这样 ["ip_a", "ip_b"].
output.tf代码
`output "foo" {
value = {
name = "xyz"
all_ips = tolist(aws_network_interface.vm_a_eni_lan_a.*.private_ips)
}
}`
正在打印 -->
"name" = "xyz" "lan_a_ips" = tolist(\[ toset(\[ "10.0.27.116",\]), toset(\[ "10.0.28.201",\]), \])
但我想要 "lan_a_ips" = ["10.0.27.116", "10.0.28.201"]
我相信调整 output.tf 会有所帮助。感谢任何帮助。
在您的例子中,您刚刚将 splat 表达式 [1] 设置在了错误的位置,即没有设置 aws_network_interface.vm_a_eni_lan_a.private_ips[*]
,而是将其设置为 aws_network_interface.vm_a_eni_lan_a.*.private_ips
。所以你只需要改变输出值:
output "foo" {
value = {
name = "xyz"
all_ips = aws_network_interface.vm_a_eni_lan_a.private_ips[*]
}
}
编辑:以上内容适用于仅创建 aws_network_interface
资源的单个实例的情况。对于使用 count
meta-argument 创建此资源的多个实例的情况,可以使用以下方法获取 IP 列表:
output "foo" {
value = {
name = "xyz"
all_ips = flatten([for i in aws_network_interface.test[*] : i.private_ips[*]])
}
}
此处,for
[2] 循环用于遍历资源的所有实例,因此在引用它们时使用 splat 表达式 aws_network_interface.test[*]
。此外,由于这将创建一个列表列表(如 private_ips[*]
returns 列表),flatten
[3] built-in 函数可用于创建单个 IP 列表地址。
[1] https://www.terraform.io/language/expressions/splat