Terraform: проблема получения значений с карты карты - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь получить значения с карты карты и ошибка, указанная ниже.

Ошибка:

Error: Incorrect attribute value type

  on ../../modules/lb-rules/rules.tf line 71, in resource "aws_alb_listener_rule" "http_header":
  71:         http_header_name = keys(lookup(var.listener_rules, "http_header_name", null))
    |----------------
    | var.listener_rules is object with 3 attributes

Inappropriate value for attribute "http_header_name": string required.

main.tf

module example {
...
...
listener_rules = {
    ...
    "http_header_name" = {
      "x-header" = "sample_server"
    }
  } 
    ...
}

правила .tf

resource "aws_alb_listener_rule" http_header {
  listener_arn = var.public_alb_listener_arn
  priority     = var.priority_number

  action {
    type             = "forward"
    target_group_arn = aws_alb_target_group.default.id
  }

  dynamic "condition" {
    for_each = lookup(var.listener_rules, "http_header_name", null)
    content {
      http_header {
        http_header_name = keys(lookup(var.listener_rules, "http_header_name", null))
        values           = ["hi"]
      }
    }
  }
}

1 Ответ

1 голос
/ 11 февраля 2020

Я не уверен, что полностью понял вашу цель здесь, но похоже, что идея состоит в том, чтобы создать один condition блок на элемент в этом атрибуте http_header_name. Вот один из способов написать это для Terraform v0.12.20 или новее:

resource "aws_alb_listener_rule" http_header {
  listener_arn = var.public_alb_listener_arn
  priority     = var.priority_number

  action {
    type             = "forward"
    target_group_arn = aws_alb_target_group.default.id
  }

  dynamic "condition" {
    for_each = try(var.listener_rules.http_header_name, {})
    content {
      http_header {
        http_header_name = condition.key
        values           = [condition.value]
      }
    }
  }
}
...