我当前的 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_ipprivate_ip ,则在解析期间将公共地址映射到专用地址将变得不可能,因为输出数组不同步 .

输出不必与示例中的输出完全相同,但概念类似:每个主机有一组数据,其中有几个字段来自相关主机的 aws_instance . 我也可以在应用期间构建输出(我假设使用 resource "local_file" )而不是 terraform output -json ,它甚至不必是JSON,只是我可以放心解析的东西 .