Terraform передает значение в список только в том случае, если условие истинно

#terraform #terraform-provider-aws

Вопрос:

Я пытаюсь создать модуль AWS VPC с использованием Terraform. Я делаю вторичный CIDR VPC дополнительной функцией модуля.

if secondary_cidr = true, then create subnets using the seocandary_cidr and network acls Проблема, с которой я сталкиваюсь, связана со списками доступа к сети. При создании сетевых списков управления доступом с использованием terraform используется список идентификаторов подсети для привязки к NACL. Я хочу создать один сетевой ACL для связи первичных подсетей и вторичных подсетей только тогда, когда secondary_cidr=true

Смотрите код ниже:

   cidr1_subnets = {
    CIDR1_SUBNETS = [aws_subnet.app1-az1.id, aws_subnet.app1-az2.id, aws_subnet.app1-az3.id]
  }
  cidr2_subnets = {
    exists = {
      CIDR2_SUBNETS = [aws_subnet.app2-az1.id, aws_subnet.app2-az2.id, aws_subnet.app2-az3.id]
    }
    not_exists = {}
  }
}

resource "aws_network_acl" "app" {
  vpc_id = aws_vpc.main.id

  egress {
    protocol   = "-1"
    rule_no    = 100
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 0
    to_port    = 0
  }

  ingress {
    protocol   = "-1"
    rule_no    = 100
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 0
    to_port    = 0
  }

  subnet_ids = merge(
    local.cidr1_subnets,
    local.cidr2_subnets[var.secondary_cidr == true ? true : false]
  )

}```

 

Ответ №1:

Я думаю, что вам нужно следующее:

 subnet_ids =  var.secondary_cidr == true ? merge(local.cidr1_subnets, local.cidr2_subnets) : local.cidr1_subnets
 

Кстати, ваше locals и использование слияния в любом случае потерпят неудачу, но, я думаю, это проблема другой проблемы.

Комментарии:

1. Вы правы — местные не сработали. Я решил просто поставить все после условия, но теперь Terraform жалуется на количество. Я попробовал использовать aws_subnet.app2-az1[*] и aws_subnet.app2-az1[count.index] то, и другое, но безуспешно. Смотрите код ниже:

2. subnet_ids = var.secondary_cidr == 1 ? [aws_subnet.app-az1.id, aws_subnet.app-az2.id, aws_subnet.app-az3.id, aws_subnet.app2-az1[count.index].id, aws_subnet.app2-az2[count.index].id, aws_subnet.app2-az3[count.index].id] : [aws_subnet.app-az1.id, aws_subnet.app-az2.id, aws_subnet.app-az3.id]

3. @Дуг, я думаю, у тебя теперь новая проблема. Таким образом, будет рекомендован новый вопрос. Кроме того, если бы ответ на этот текущий вопрос был полезен, мы были бы признательны за его принятие.