You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中动态生成含随机密钥的JSON?

Terraform 实现动态生成PSK映射并输出JSON

你的代码问题在于local变量的map值中不允许使用for_each块,需要改用Terraform的for表达式来动态构造psk的键值映射。同时要保留对local.overrides.foo.connections不存在的兼容处理,以下是修正后的完整实现:

locals {
  overrides = {
    foo = {
      connections = {
        connection-one = {
          bool_setting = "true"
        }
        connection-two = {
          string_value = "primary"
        }
      }
    }
  }
  # 统一处理connections的存在性,不存在则返回空map
  connections = try(local.overrides.foo.connections, {})
  my_json = {
    "description" = "blah"
    "psk" = {
      # 使用for表达式遍历connections的所有key,关联对应的随机密码
      for conn_key in keys(local.connections) :
      conn_key => random_string.password[conn_key].result
    }
  }
}

resource "random_string" "password" {
  for_each = local.connections
  length   = 20
  special  = true
}

output "json_output" {
  value = jsonencode(local.my_json)
}

关键修改说明

  1. 复用connections变量:将try(local.overrides.foo.connections, {})提取为单独的local.connections,避免重复逻辑,提升可读性。
  2. 用for表达式替代for_each:在my_json的psk字段中,通过for表达式遍历local.connections的所有key,将每个key映射到对应的random_string.password实例的result属性(原代码遗漏了取result属性,这是生成密码的核心字段)。
  3. 兼容空场景:当local.overrides.foo.connections不存在时,local.connections为空map,random_string.password不会创建任何资源实例,最终psk字段会输出空对象,符合预期。

执行terraform apply后,json_output会生成你期望的格式,示例输出如下:

{
  "description": "blah",
  "psk": {
    "connection-one": "g2rL6IEF1XXp_JL]N<H!",
    "connection-two": "EVBQvSj@5a9lo:OZ<S_T"
  }
}

内容的提问来源于stack exchange,提问作者170730350

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:16:16