如何修改Terraform配置,从JSON文件获取名称与区域字段数据?
问题:Terraform从JSON文件中同时输出服务器名称与区域字段
我正尝试让Terraform从JSON文件中拉取多个条目。我的JSON文件内容如下:
{ "data": [ {"name": "name-of-server", "region": "us-east", "role": "could-be-tag-or-else", "create_app": true} ] }
当前我的Terraform main.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 }
目前输出仅显示服务器名称列表。我想在输出中添加region字段,请问需要如何修改main.tf配置?我是Terraform新手,此前尝试过添加输入选项和变量但未成功,恳请帮助。
解决方案
你只需要修改locals里的windows-machines定义,从只提取name字段,改成返回包含name和region的对象列表即可。修改后的完整配置如下:
locals { # 读取并解析JSON文件 json-data = jsondecode(file("all-windows-machines-full.json")) # 提取包含name和region的对象列表 windows-machines = [ for data in local.json-data.data : { name = data.name region = data.region } ] } output "windows-machines" { value = local.windows-machines }
关键说明:
- 原配置里的
[for data in local.json-data.data : data.name]只会生成纯字符串列表(仅包含服务器名称)。 - 修改后,我们通过
{name = data.name, region = data.region}为每个JSON条目创建一个包含双字段的对象,最终输出的是对象列表,每个对象同时展示name和region信息。
执行terraform apply或terraform output后,你会得到类似这样的输出:
windows-machines = [ { "name" = "name-of-server" "region" = "us-east" }, ]
如果希望输出是组合字符串格式(比如"name-of-server (us-east)"),也可以调整成:
windows-machines = [for data in local.json-data.data : "${data.name} (${data.region})"]
对应的输出会是:
windows-machines = [ "name-of-server (us-east)", ]
内容的提问来源于stack exchange,提问作者Todd M
相关产品推荐
相关产品推荐

