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

如何在Terraform的for_each循环中自动递增priority参数

在Terraform的for_each循环中实现自动递增的priority值

要在不修改原inbound_mgmt映射结构的前提下,让priority从1000开始每次迭代自动加1,核心是给每个映射元素分配一个稳定的递增索引,具体可以通过以下两种方式实现:

方式一:生成带索引的局部映射(推荐)

先通过for表达式为原映射的每个元素添加一个稳定的索引,再在资源中引用该索引计算优先级:

locals {
  inbound_mgmt = {
    ## List of Locations/sites needing to access the management interface
    "HQ" = {ip = "1.2.3.4/24"},
    "SITE1" = {ip = "3.4.5.6/29"},
    "SITE2" = {ip = "6.7.8.9/29"}
  }

  # 生成带递增索引的新映射,先对key排序保证顺序稳定
  inbound_mgmt_with_index = {
    for idx, key in sort(keys(local.inbound_mgmt)) : key => merge(
      local.inbound_mgmt[key],
      { index = idx }
    )
  }
}

resource "azurerm_network_security_rule" "allow_inbound_mgmt" {
  for_each = local.inbound_mgmt_with_index
  name                        = "Allowmgmt-${each.key}"
  # 基于初始值1000加上索引实现递增
  priority                    = 1000 + each.value.index
  direction                   = "Inbound"
  access                      = "Allow"
  # 补充资源所需的其他必填参数(比如resource_group_name、network_security_group_name等)
}

关键说明:

  • sort(keys(local.inbound_mgmt)):确保映射的key按固定顺序排列,避免Terraform因key顺序变化触发不必要的资源重建。
  • merge:将原元素的属性与新增的index字段合并,无需修改原inbound_mgmt的结构。

方式二:直接通过index函数计算索引

如果不想生成新的局部映射,也可以直接在priority字段中用index函数结合排序后的key列表计算索引:

locals {
  inbound_mgmt = {
    ## List of Locations/sites needing to access the management interface
    "HQ" = {ip = "1.2.3.4/24"},
    "SITE1" = {ip = "3.4.5.6/29"},
    "SITE2" = {ip = "6.7.8.9/29"}
  }
}

resource "azurerm_network_security_rule" "allow_inbound_mgmt" {
  for_each = local.inbound_mgmt
  name                        = "Allowmgmt-${each.key}"
  # 排序后获取当前key的索引,再加上初始值1000
  priority                    = 1000 + index(sort(keys(local.inbound_mgmt)), each.key)
  direction                   = "Inbound"
  access                      = "Allow"
  # 补充资源所需的其他必填参数
}

注意事项:

  • 两种方式都必须对key列表进行排序,否则当原映射的key顺序发生变化时,优先级会乱序,甚至导致Terraform重建安全规则。
  • 索引从0开始,所以第一个元素的优先级是1000,第二个是1001,以此类推。如果需要从1001开始,只需把初始值改为1001即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:55:21