通过json文件的Terraform循环

通过json文件的Terraform循环,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我正在尝试使用terraform在azurerm中创建一个存储帐户,并将其与密钥名配对以加密此存储。但是为了提高商品和未来的性能,我想从json文件中设置这个存储帐户的名称。我们的想法是在json中设置一个数组,其中包含storages name和key\u name,并在myazurerm\u resources中循环这些值并进行设置 我面临的问题是无法访问json文件。我将其配置如下 tenant.json { "inputs": [ {

我正在尝试使用terraform在azurerm中创建一个存储帐户,并将其与密钥名配对以加密此存储。但是为了提高商品和未来的性能,我想从json文件中设置这个存储帐户的名称。我们的想法是在json中设置一个数组,其中包含
storages name
key\u name
,并在my
azurerm\u resources
中循环这些值并进行设置

我面临的问题是无法访问json文件。我将其配置如下

tenant.json

{
  "inputs": [
        {
          "tenant-pair": {"tenant-name":  "storage-name", "tenant-key": "key-name"}
        }
      ]
}
在my main.tf中,在一些文档之后,我设置了一个
locals
,如下所示:

locals {
  tenant_data = jsondecode("./tenants.json")

}
但如果我试图将这些数据展平:

locals {
  tenant_data = jsondecode("./tenants.json")
  helper_list = flatten([for v in local.tenant_data.inputs :
    [for tenant_name, tenant_key in v.tenant-pair :
      {
        "tenant_name" = tenant_name
        "tenant_key"  = tenant_key
      }
    ]
  ])
}
我在这段代码中遇到的错误是,
输入
是一个未解析的引用

我想知道如何访问json文件并在其中循环


非常感谢各位的帮助和指导。

当您将JSON数据值作为一个文件提供时,请使用
文件
函数,如下所示

locals {
  tenant_data = jsondecode(file("tenant.json"))
}

output "json" {
  value = element(flatten([for v in local.tenant_data.inputs : v.tenant-pair]), 0)
}
输出:

Outputs:

json = {
  "tenant-key" = "key-name"
  "tenant-name" = "storage-name"
}

您是否尝试过使用
jsondecode(文件(“tenants.json”)
?感谢您的帮助。但不幸的是,即使我运行你的代码。我得到了相同的错误“没有参数或块类型被命名”输入“您能提供您正在尝试的完整代码吗?我确实使用了您相同的代码进行测试。完全相同的代码伙伴。当我运行terraform时,我得到了一个错误:
error:externous JSON object property
,因为它似乎无法识别我的JSON文件orry mate中的
输入
,出于某种奇怪的原因,它现在正在工作。它会打印结果。只是澄清一下。如果json数组中有更多元素,如何打印所有元素?比如,如果我有3个
租户对
,想循环并打印所有租户对?