繁体   English   中英

在 for_each 和 for 在 terraform 中使用索引

[英]Use indexing in for_each and for in terraform

我正在尝试使用 for_each 和 for 创建多个 VPC 和子网。 下面是代码和错误。 我在使用 for_each 时无法确定索引。 使用计数更容易,但要求是使用 for_each。

main.tf

resource "aws_vpc" "VPC" {
  for_each = { for vpc in var.vpc : vpc.name => vpc}
  cidr_block            = each.value.cidr
  enable_dns_hostnames  = true
  enable_dns_support    = true
}

####### Additional CIDR for VPC ########
resource "aws_vpc_ipv4_cidr_block_association" "VPCExtraCidrBlock" {
  for_each = local.extra_cidr_list 
  vpc_id      = aws_vpc.VPC[each.value.vpc].id
  cidr_block  = each.value.extra_cidr
}


resource "aws_internet_gateway" "igw" {
  for_each = { for vpc in var.vpc : vpc.name => vpc if vpc.igw == true}
  vpc_id  = aws_vpc.VPC[each.value.name].id
}

########### Private subnets #############
resource "aws_subnet" "VPCPrivateSubnetA" {
  for_each = local.privateA_cidr_list
  vpc_id                  = aws_vpc.VPC[each.value.vpc].id
  cidr_block              = each.value.privateA
  availability_zone       = element(var.AvailabilityZonesForVPC,0)
}
resource "aws_subnet" "VPCPublicSubnetA" {
  for_each = local.publicA_cidr_list
  vpc_id                  = aws_vpc.VPC[each.value.vpc].id
  cidr_block              = each.value.publicA
  availability_zone       = element(var.AvailabilityZonesForVPC,0)

}


本地文件

我正在尝试格式化 local.tf 中的变量并对其使用 for_each 。

locals {
  extra_cidr_list = flatten([
    for idx_vpc, vpc in var.vpc: 
    [ for idx, cidr in vpc.extra_cidr :
     { vpc = vpc.name,
      extra_cidr = cidr[idx]
      } if length(vpc.extra_cidr) > 0 ] ])

  publicA_cidr_list = flatten([ for idx_vpc, vpc in var.vpc : [ for idx, cidr in vpc[idx_vpc].publicA : { vpc = vpc.name, publicA = cidr[idx] } if length(vpc[idx_vpc].publicA) > 0 ] ])

  privateA_cidr_list = flatten([ for idx_vpc, vpc in var.vpc : [ for idx, cidr in vpc[idx_vpc].privateA : { vpc = vpc.name, privateA = cidr[idx] } if length(vpc[idx_vpc].privateA) > 0 ] ])
}

模块.tf

module "VPC" {
  source = "./modules/VPC"
  vpc = var.vpc
}

tfvars 文件

vpc = [
{
name = "VPC1"
cidr = "10.150.0.0/20"
publicA            = ["10.150.0.0/23"]       
privateA           = ["10.150.9.0/26","10.150.7.0/24"] 
igw = true
extra_cidr = ["10.151.0.0/20"]
},
{
name = "VPC2"
cidr = "192.168.0.0/22"
publicA            = ["192.168.0.0/25","192.168.0.128/25","192.168.3.0/25"]                     #list of IPs
privateA           = [] 
igw = false
extra_cidr = []
}
]

请帮忙。

你的当地人不正确。 他们应该是:

locals {

  extra_cidr_list = flatten([
    for idx_vpc, vpc in var.vpc: 
       [ 
         for idx, cidr in vpc.extra_cidr :
         { 
            vpc = vpc.name,
            extra_cidr = cidr
         } if length(vpc.extra_cidr) > 0 ] ])

  publicA_cidr_list = flatten(
        [ for idx_vpc, vpc in var.vpc : 
            [ for idx, cidr in vpc.publicA : 
               { 
                  vpc = vpc.name, 
                  publicA = cidr
              } if length(vpc.publicA) > 0 ] ])

  privateA_cidr_list = flatten([ 
       for idx_vpc, vpc in var.vpc : 
         [ 
           for idx, cidr in vpc.privateA : 
           { 
             vpc = vpc.name, 
             privateA = cidr 
           } if length(vpc.privateA) > 0 ] ])
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM