我当前的 output.tf
看起来像:
output "hosts" {
main = {
address = "${aws_instance.main.*.public_ip}"
private_address = "${aws_instance.main.*.private_ip}"
ssh_user = "ubuntu"
}
}
terraform output -json
的结果是:
{
"hosts": {
"value": {
"main": [
{
"address": ["0.0.0.0", "0.0.0.1"],
"private_address": ["0.0.0.2", "0.0.0.3"],
"ssh_user": "ubuntu"
}
]
}
}
}
我怎样才能输出,以便每个主机都有一个单独的 Map ,例如:
{
"hosts": {
"value": {
"main": [
{
"address": "0.0.0.0"
"private_address": "0.0.0.2"
"ssh_user": "ubuntu"
},
{
"address": "0.0.0.1"
"private_address": "0.0.0.3"
"ssh_user": "ubuntu"
}
]
}
}
}
这将更容易解析 . 此外,在此示例中,如果某些主机没有 public_ip
或 private_ip
,则在解析期间将公共地址映射到专用地址将变得不可能,因为输出数组不同步 .
输出不必与示例中的输出完全相同,但概念类似:每个主机有一组数据,其中有几个字段来自相关主机的 aws_instance
. 我也可以在应用期间构建输出(我假设使用 resource "local_file"
)而不是 terraform output -json
,它甚至不必是JSON,只是我可以放心解析的东西 .