Создать правила Terraform из списка - PullRequest
0 голосов
/ 14 февраля 2019

Я использую Terraform v0.11.11.Я хочу иметь возможность написать сценарий развертывания для openstack, который принимает список IP-адресов или IP-диапазона или произвольной длины, которые я хочу, чтобы белый список в виртуальной машине для порта 22, скажем,

ip_list = ["11.11.0.0/16","22.22.22.0/8", "33.33.33.33" ...]

Есть ли синтаксис для правильного применения правила?

Это не работает,

"openstack_compute_secgroup_v2" "secgroup_1" {
  name        = "a_cluster"
  description = "some security group"

  rule {
    from_port   = 22
    to_port     = 22
    ip_protocol = "tcp"
    cidr        = "${var.ip_list}"
  }

возвращает следующее:


$ terraform  apply 

Error: module.openstack.openstack_compute_secgroup_v2.secgroup_1: rule.3.cidr must be a single value, not a list


ноЕсть ли способ сделать это правильно?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Если вы можете обновить до terraform 0.12, используйте динамический вложенный блок: с ip_list = ["11.11.0.0/16","22.22.22.0/8", "33.33.33.33" ...]


 "openstack_compute_secgroup_v2" "secgroup_1" {
  name        = "a_cluster"
  description = "some security group"

 dynamic "rule" {
    for_each = ${var.ip_list}

   content{
    from_port   = 22
    to_port     = 22
    ip_protocol = "tcp"
    cidr        = rule

  }
  }
}
0 голосов
/ 14 февраля 2019

У меня не было среды для проверки нижеприведенной команды.Идея должна быть в правильном направлении.

Вы должны хорошо настроить

resource "openstack_compute_secgroup_v2" "secgroup_1" {
  count       = "${length(${var.ip_list})}"
  name        = "a_cluster_${count.index}"
  description = "some security group"

  rule {
    from_port   = 22
    to_port     = 22
    ip_protocol = "tcp"
    cidr        = "${element(var.ip_list, count.index)}"
  }
}
...