将每个主机的多个字段输出为单独的地图

时间:2018-10-30 09:19:34

标签: terraform terraform-provider-aws

我当前的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"
                }
            ]
        }
    }
}

如何进行输出,以便每个主机都有单独的映射,例如:

{
    "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,这只是我可以自信地解析的内容。

0 个答案:

没有答案