【问题标题】:terraform dynamically get key names of inner mapsterraform 动态获取内部地图的键名
【发布时间】:2023-02-21 18:09:28
【问题描述】:

我有一张地图如下

{
    "prod": {
        "test1": "value1",
        "keytoget": "value2",
        "secretsomething": "value3",
    },
    "demo": {
        "somediffkey": "value1",
        "anotherdiffkey": "value2",
    }
}

在 terraform 资源中,我使用的是 for_each 循环。 我想访问演示地图中的键,例如“somediffkey”。

但我可能不知道密钥名称,并且希望动态访问密钥名称,就像我们访问返回“demo”和“prod”的 each.key 的方式一样。

想看看是否像下面这样

resource "vault_kv_secret_v2" "az-secret" {
#   count               = length(locals.environments)
  mount               = vault_mount.kvv2-azure.path
  for_each            = local.environments
  name                = each.key
  cas                 = 1
  delete_all_versions = true
  data_json = jsonencode(
    {
      (each.key) = each.value # here the json should have somediffkey = value1 and then anotherdiffkey = vaulue2
    }
  )
}

基本上资源应该有内部地图数据作为 json 中的键值对 这可能吗?请求帮助。

【问题讨论】:

  • “正在使用 for_each 循环。” - 什么 for_each 循环?你得到什么错误?
  • @Marcin 没有错误,但不是预期的结果。我们应该将内部地图作为资源中的键值。基本上是否可以在不知道名称的情况下动态访问内部映射的键,即我不想访问值作为 each.value["somediffkey"] 因为“somediffkey”将作为输入给出并且可能不同。

标签: terraform


【解决方案1】:

你可以只jsonencodeeach.value字段:

resource "vault_kv_secret_v2" "az-secret" {
#   count               = length(locals.environments)
  mount               = vault_mount.kvv2-azure.path
  for_each            = local.environments
  name                = each.key
  cas                 = 1
  delete_all_versions = true
  data_json           = jsonencode(each.value)
}

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2021-06-03
    • 1970-01-01
    • 2020-09-08
    • 2022-01-14
    • 1970-01-01
    • 2014-02-17
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多