Как я могу использовать переменную в качестве имени атрибута в terraform 3.0? - PullRequest
1 голос
/ 03 августа 2020

Можно ли как-то создать произвольный атрибут из переменной? Вот чего я пытаюсь достичь.

Как я это делаю сейчас (теперь не рекомендуется в версии 3.0.0):

resource "aws_lb_listener_rule" "example" {
  condition {
    field  = var.condition_field
    values = var.condition_values
  }
}

Новый синтаксис требует вложенного блока с полем условия. Но мое состояние хранится в переменной:

resource "aws_lb_listener_rule" "example" {
  condition {
    var.condition_field {
      values = var.condition_values
    }
  }
}

Можно ли каким-то образом создать произвольный атрибут из переменной?

или: Можно ли сохранить в переменной вложенный блок атрибутов?

Предыстория моего вопроса: в настоящее время я пытаюсь выполнить обновление с 2.70.0 до 3.0.0, и в моей системе есть несколько критических изменений. Один из них включает aws_lb_listener_rule. Если невозможно создать атрибут из переменной, мне придется либо закрепить версию, либо изменить API модуля, используемый тоннами проектов.

1 Ответ

1 голос
/ 03 августа 2020

На самом деле кажется, что это невозможно сделать. Я обнаружил, что закрывающий элемент позволяет мне использовать 3.0.0 без изменения переменных моего модуля, и при этом все сценарии Terraform, которые его используют, являются условными блоками динамического c.

dynamic "condition" {
  for_each = var.field == "path-pattern" ? [var.field] : []
  content {
    path_pattern {
      values = var.patterns
    }   
  }
}

Это повторяется для все возможные var.field значения.

...