在天蓝色中创建多个子网

Creating Multiple subnet in azure


Varible.tf

variable "vnet" {
  type        = map(any)
  description = "creating rg and vmet"
  default = {
    "rg1" = {
      vnet_name      = "vnet1"
      address        = ["10.0.0.0/16"]
      subnet_name    = ["snet1", "snet2"]
      subnet_address = ["10.1.0.0/24", "10.2.0.0/24"]
      location       = "south india"
    }
  }
}

main.tf

resource "azurerm_subnet" "mysubnet" {
  for_each             = var.vnet
  name                 = each.value["subnet_name"]
  address_prefixes     = each.value["subnet_address"]
  address_prefixes     = each.value["subnet_address"]
  virtual_network_name = each.value["vnet_name"]
  resource_group_name  = each.key

}

错误:

Error: Incorrect attribute value type
    on main.tf line 25, in resource "azurerm_subnet" "mysubnet":
      name                 = each.value["subnet_name"]
      each.value["subnet_name"] is tuple with 2 elements

属性“名称”的值不合适:需要字符串。

如何迭代创建多个子网?

您必须先展平您的变量。例如:

locals {
  vnet_flat = merge([
     for group_name, details in var.vnet: 
      {for idx in range(length(details.subnet_name)):
          "${group_name}-${idx}" => {
              group_name = group_name
              vnet_name = details.vnet_name
              address = details.address
              subnet_name = details.subnet_name[idx]
              subnet_address = details.subnet_address[idx]
              location = details.location
          }
      }
  ]...)
}

resource "azurerm_subnet" "mysubnet" {
  for_each             = local.vnet_flat
  name                 = each.value.subnet_name
  address_prefixes     = [each.value.subnet_address]
  virtual_network_name = each.value.vnet_name
  resource_group_name  = each.value.group_name
}

... 用于 Expanding Function Arguments