Как иметь условные ресурсы внутри модуля с 0.12 for_each - PullRequest
0 голосов
/ 07 февраля 2020

Я передаю своим модулям список и собираюсь создать экземпляры и файлы eip и прикрепить их

Я использую for_each, чтобы пользователи могли переупорядочивать список и терраформ, не пытаясь уничтожить что-либо

НО как использовать условные ресурсы сейчас? Я все еще использую счет? Если так, то как, потому что вы не можете использовать count с for_each.

Теперь это мой модуль:

variable "mylist" {
  type            = set(string)
  description     = "Name used for tagging, AD, and chef"
}

variable "createip" {
  type            = bool
  default         = true
}

resource "aws_instance" "sdfsdfsdfsdf" {
  for_each    = var.mylist
  user_data   = data.template_file.user_data[each.key].rendered
  tags        = each.value
  ...

#conditional for EIP
resource "aws_eip" "public-ip" {
  for_each    = var.mylist
  // I cant use this anymore!
  // how can I say if true create else dont create
  #count       = var.createip ? 0 : length(tolist(var.mylist))
  instance = aws_instance.aws-vm[each.key].id
  vpc      = true
  tags     = each.value
}

Мне также нужно получить значение элемента mylist для eip, потому что я использую его для пометки eip. Поэтому я думаю, что мне нужно как-то индексировать в foreach l oop, а также иметь возможность использовать счетчик или другой список, чтобы определить, создан он или нет?

1 Ответ

0 голосов
/ 07 февраля 2020

Я думаю Я получил это, но я не хочу принимать, пока это не подтвердится, что это не неправильный путь (не из-за мнения, а из-за неправильного использования, которое вызовет реальные проблемы)

variable "mylist" {
  type            = set(string)
  description     = "Name used for tagging, AD, and chef"
}

variable "createip" {
  type            = bool
  default         = true
}

locals {
  // set will-create-public-ip to empty array if false
  // otherwise use same mylist which module uses for creating instances
  will-create-public-ip = var.createip ? var.mylist : []
}

resource "aws_instance" "sdfsdfsdfsdf" {
  for_each    = var.mylist
  user_data   = data.template_file.user_data[each.key].rendered
  tags        = each.value
  ...

resource "aws_eip" "public-ip" {
  // will-create-public-ip set to mylist or empty to skip this resource creatation
  for_each    = will-create-public-ip
  instance = aws_instance.aws-vm[each.key].id
  vpc      = true
  tags     = each.value
}
...