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

如何将Terraform中的两个网络规则对象合并为单个集合?

合并Terraform存储账户网络规则的实现方案

要将默认网络规则(local.default_network_rules)与可配置变量规则(var.network_rules)合并,最终用于创建azurerm_storage_account_network_rules资源,可按以下步骤实现:

1. 调整本地变量,添加合并逻辑

在locals.tf中新增合并后的规则计算逻辑,优先使用变量传入的非null值,同时追加IP规则和子网ID:

locals {
  default_network_rules = [
    {
      default_action          = "Deny"
      ip_rules                = ["IP_string"]
      virtual_network_subnet_ids = []
    }
  ]

  # 合并默认规则与变量规则
  merged_network_rules = [
    merge(
      local.default_network_rules[0],
      {
        # 优先使用变量中的default_action,否则保留默认值
        default_action = var.network_rules[0].default_action != null ? var.network_rules[0].default_action : local.default_network_rules[0].default_action,
        # 合并默认IP规则与变量传入的IP规则(变量为null时追加空列表)
        ip_rules = concat(
          local.default_network_rules[0].ip_rules,
          var.network_rules[0].ip_rules != null ? var.network_rules[0].ip_rules : []
        ),
        # 合并默认子网ID与变量传入的子网ID
        virtual_network_subnet_ids = concat(
          local.default_network_rules[0].virtual_network_subnet_ids,
          var.network_rules[0].virtual_network_subnet_ids != null ? var.network_rules[0].virtual_network_subnet_ids : []
        )
      }
    )
  ]
}

如果需要对IP规则或子网ID去重,可在concat外层包裹distinct函数:

ip_rules = distinct(concat(
  local.default_network_rules[0].ip_rules,
  var.network_rules[0].ip_rules != null ? var.network_rules[0].ip_rules : []
))

2. 在存储账户网络规则资源中引用合并后的规则

创建azurerm_storage_account_network_rules资源时,直接使用合并后的规则值:

resource "azurerm_storage_account_network_rules" "example" {
  storage_account_id = azurerm_storage_account.example.id

  default_action             = local.merged_network_rules[0].default_action
  ip_rules                   = local.merged_network_rules[0].ip_rules
  virtual_network_subnet_ids = local.merged_network_rules[0].virtual_network_subnet_ids
}

逻辑说明

  • 当用户未传入var.network_rules(使用默认的null值)时,将直接使用local.default_network_rules的配置
  • 当用户传入自定义规则时:
    • default_action会被变量中的值覆盖
    • ip_rules和virtual_network_subnet_ids会将默认值与变量传入的值合并
    • 变量中为null的属性将保留默认配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:05:23