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

Terraform配置Nomad变量:多命名空间与Map变量迭代问题

解决Terraform配置Nomad变量的问题

错误原因

你遇到的错误是因为错误地尝试访问map类型变量的.key和.values属性——Terraform的map类型并没有这些内置属性。var.job_varaible本身就是一个完整的键值对map,直接引用或通过for表达式遍历即可。

解决方案

根据你的需求(为所有命名空间设置对应的变量),提供两种实现方式:

方式一:每个命名空间创建一个包含所有job变量的变量集

如果希望每个命名空间对应一个包含所有job变量的Nomad变量资源,直接将整个var.job_varaible赋值给items即可,同时注意保证path的唯一性:

resource "nomad_variable" "test" {
  path      = "nomad/jobs/${each.value}" # 为每个命名空间生成唯一path
  for_each  = toset(var.namespace_vars)
  namespace = each.value
  items     = var.job_varaible # 直接使用完整的map作为变量内容
}

方式二:每个命名空间的每个job变量单独创建资源(嵌套遍历)

如果需要将每个job变量单独作为一个Nomad变量资源在各个命名空间下创建,可以使用嵌套for表达式生成复合键来实现嵌套遍历:

resource "nomad_variable" "test" {
  path      = "nomad/jobs/${each.value.namespace}/${each.value.var_key}"
  for_each  = {
    # 嵌套遍历命名空间和job变量,生成唯一的复合键
    for ns in var.namespace_vars:
    for k in keys(var.job_varaible):
    "${ns}-${k}" => {
      namespace = ns
      var_key   = k
      var_value = var.job_varaible[k]
    }
  }
  namespace = each.value.namespace
  items     = {
    each.value.var_key = each.value.var_value
  }
}

说明

  • 方式一适合批量将一组变量应用到多个命名空间,资源数量与命名空间数量一致;
  • 方式二适合需要对单个变量进行精细化管理的场景,资源数量为命名空间数量 × job变量数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:21:22