【问题标题】:Terraform loop through json fileTerraform 循环遍历 json 文件
【发布时间】:2021-03-27 03:27:01
【问题描述】:

我正在尝试使用 terraform 在 azurerm 中启动一个存储帐户,并将其与密钥名称配对以加密此存储。但是为了商品和未来的改进,我想从 json 文件中设置这个存储帐户的名称。这个想法是用storages namekey_name在json中设置一个数组,并在我的azurerm_resources中循环遍历这些值并设置它们。

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

tenant.json

{
  "inputs": [
        {
          "tenant-pair": {"tenant-name":  "storage-name", "tenant-key": "key-name"}
        }
      ]
}

在我的 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
      }
    ]
  ])
}

我在这段代码中遇到的错误是inputs 是一个未解析的引用。

我想知道如何访问我的 json 文件并循环访问它?

非常感谢大家的帮助和指导。

【问题讨论】:

  • 你试过jsondecode(file("tenants.json"))吗?

标签: terraform terraform-provider-azure


【解决方案1】:

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

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"
}

【讨论】:

  • 感谢您的帮助。但不幸的是,即使我运行您的确切代码。我得到同样的错误“没有参数或块类型被命名为”输入“
  • 能否提供您正在尝试的完整代码?
  • 我确实使用了相同的代码进行测试。完全相同的代码伙伴。当我运行 terraform 时出现错误:Error: Extraneous JSON object property 因为它似乎无法识别我的 json 文件中的 inputs
  • 对不起,伙计,由于某些奇怪的原因,它现在正在工作。它确实打印了结果。只是一个澄清。如果我的 json 数组中有更多元素,如何打印所有元素?比如如果我有 3 个tenant-pairs 并且想要循环并打印所有这些?
猜你喜欢
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多