Переменная интерполяция для карты типов - PullRequest
0 голосов
/ 23 июня 2019

Обновлен до terraform v0.12.2 и большинство вещей перестало работать прямо. (мой плохой, я не проверял эту страницу: https://www.terraform.io/upgrade-guides/0-12.html до обновления)

В любом случае исправлено большинство вещей, но переменная интерполяция типа map все еще не работает. в pre-v012.x это отлично работало:

security_groups.tf

// SecurityGroup: default access
resource "aws_security_group" "default" {
  count        = "${length(var.s_zones)}"
  vpc_id       = "${element(aws_vpc.vpcs.*.id, count.index)}"
  name         = "${var.vpc_names[count.index]}-default"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["${var.vpn_cidrs["lan"]}",
                   "${var.vpn_cidrs["ovp"]}"]
    description = "SSH from vpn"
  }
}

vars.tf

// Variable: vpn_cidrs
variable "vpn_cidrs" {
  type = "map"
  default = {
    lan = ["10.0.11.0/28", "10.0.12.0/28"]
    ovp = ["10.1.13.0/28", "10.1.14.0/28"]
  }
}

С версией 0.12.2 возвращается:

Ошибка: неверный тип значения атрибута

в ../../modules/vpc/security_groups.tf строка 55, в ресурсе "aws_security_group" "по умолчанию": 55: cidr_blocks = [ "$ {Var.vpn_cidrs [" LAN "]}",

Недопустимое значение для атрибута "cidr_blocks": элемент 0: строка требуется.

Я пытался использовать новый конструктор:

// Variable: vpn_cidrs
variable "vpn_cidrs" {
  type = map(string)
  default = {
    lan1 = "10.0.11.0/28",
    lan2 = "10.0.12.0/28",
    ovp1 = "10.1.13.0/28",
    ovp2 = "10.1.14.0/28",
  }
}

Но тогда я не могу понять, как использовать это для правил SG в модуле. Кто-нибудь знает, что мне не хватает или как это исправить? Действительно застрял с вечера пятницы. Любой заостренный пример кода будет высоко оценен.

-S

1 Ответ

1 голос
/ 23 июня 2019

"${var.vpn_cidrs["lan"]}" возвращает список ["10.0.11.0/28", "10.0.12.0/28"], но в качестве сообщения об ошибке требуется строка .

Попробуйте использовать "${join(", ", var.vpn_cidrs["lan"])}" для генерации строки 10.0.11.0/28, 10.0.12.0/28.

Чтобы создать объединенный список из двух списков vpn_cidrs ["lan"] и vpn_cidrs ["ovp"] , используйте функцию concat() (см. Здесь ).

cidr_blocks = "${concat(var.vpn_cidrs["lan"], var.vpn_cidrs["ovp"])}"

Это генерирует ["10.0.11.0/28", "10.0.12.0/28", "10.1.13.0/28", "10.1.14.0/28"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...