如何让terraform读取逗号分隔的json文件?

h43kikqp  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在尝试让terraform在我的json文件中提取多个条目。
杰森看起来像这样.......

"data":
    [
    {"name": "name-of-server", "region": "us-east", "role": "could-be-tag-or-else",      "create_app": true},
    ]

我的Terraformmain.tf目前看起来像这样。

locals {
    # get json 
    json-data = jsondecode(file("all-windows-machines-full.json"))

# get all windows
    windows-machines = [for data in local.json-data.data : data.name]
}
 output "windows-machines" { 
 value =  local.windows-machines
 }

输出仅显示服务器名称列表。
如果我想添加地区,我需要在www.example.com中输入什么main.tf?
感谢任何帮助。
我试过多次添加输入选项和变量。我是terraform的新手,还在学习。

06odsfpq

06odsfpq1#

为了帮助您理解JSON输入,您提供的格式是“对象”的“列表”(又名“元组”或“集合”)。如果您想了解这些术语之间的差异,我建议您在这里查看官方和非常清晰的文档。

原始对象(“as-is”)

为了从对象列表中重新创建对象,不要将新对象限制为data.name。相反,使用完整的对象,如下所示:

locals {
    # get json 
    json-data = jsondecode(file("all-windows-machines-full.json"))

    # get all windows
    windows-machines = [
        for data in local.json-data.data : data
    ]
}

你会得到这样的输出:

user@laptop:~/terraform/console$ terraform console
> local.windows-machines
[
  {
    "create_app" = true
    "name" = "name-of-server-00"
    "region" = "us-east"
    "role" = "could-be-tag-or-else"
  },
  {
    "create_app" = false
    "name" = "name-of-server-01"
    "region" = "eu-west-3"
    "role" = "could-be-tag-or-else"
  },
]

自定义构建对象

如果你不想让所有属性都成为最终对象的一部分,你也可以在for循环中构建它:

locals {
    # get json 
    json-data = jsondecode(file("all-windows-machines-full.json"))

    # get all windows
    windows-machines = [
        for data in local.json-data.data : {
            name   = data.name
            region = data.region
        }
    ]
}

这将给予你:

user@laptop:~/terraform/console$ terraform console
> local.windows-machines
[
  {
    "name" = "name-of-server-00"
    "region" = "us-east"
  },
  {
    "name" = "name-of-server-01"
    "region" = "eu-west-3"
  },
]

如果你想了解更多关于循环的知识,我也会推荐你这里的文档:可以在Terraform中使用的https://developer.hashicorp.com/terraform/language/expressions/forthe other expressions。)

相关问题