Как я могу определить fixed_ip для openstack_networking_port_v2, используя синтаксис splat, чтобы получить список идентификаторов подсетей

Я хотел бы динамически определять фиксированные IP-адреса для определений openstack_networking_port_v2, используя синтаксис splat, чтобы получить список идентификаторов подсетей.

Вот как я определил подсети, и это прекрасно работает:

resource "openstack_networking_subnet_v2" "s1_public" {
  count      = "${var.is_ipv6+1}"
  name       = "${var.cdn_name}s1.pub_v${count.index == 0 ? 4 : 6}-${var.user_name}"
  network_id = "${openstack_networking_network_v2.s1_public.id}"
  cidr       = "${element(var.cdn_ipnets["s1_public"], count.index)}"
  ip_version = "${ count.index == 0 ? 4 : 6 }"
}

Я использую "null_data_source", чтобы создать список карт для параметра fixed_ip определения порта:

data "null_data_source" "s1_public_gw_ips" {
  count = "${var.is_ipv6+1}"
  depends_on = [ "openstack_networking_subnet_v2.s1_public" ]

  inputs = {
    subnet_id = "${openstack_networking_subnet_v2.s1_public.*.id[count.index]}"
    ip_address = "${cidrhost(element(var.cdn_ipnets["s1_public"], count.index), var.public_offsets["gw1"])}"
  }
}

И определение порта:

resource "openstack_networking_port_v2" "rtr_s1_public_port" {
  name = "gw1.${var.cdn_name}s1.public-${var.user_name}"
  network_id = "${openstack_networking_network_v2.s1_public.id}"
  admin_state_up = "true"

  depends_on = [ "data.null_data_source.s1_public_gw_ips" ]

  fixed_ip = [ "${data.null_data_source.s1_public_gw_ips.*.inputs}" ]
}

Terraform не может создать план:

Error: openstack_networking_port_v2.rtr_s1_public_port: "fixed_ip.0.subnet_id": required field is not set

Похоже, что список сплат-индексов при планировании пуст, хотя все зависимости явно указаны. И после применения (с закомментированным определением fixed_ip, разумеется) я могу проверить с помощью консоли terraform, что мой null_data_source определен правильно:

> data.null_data_source.s1_public_gw_ips.*.inputs
[
  {    ip_address = 172.25.123.1  subnet_id = cab2bffa-d0f0-42fa-bc06-6e03f9a8dd67},
  {    ip_address = 2a00:81c0:6001:141::1  subnet_id = 455444dc-7211-4a6a-a610-9fe480ff9ebc}
]
> keys(data.null_data_source.s1_public_gw_ips.*.inputs[0])
[
  ip_address,
  subnet_id
]
> lookup(data.null_data_source.s1_public_gw_ips.*.inputs[0], "subnet_id")
cab2bffa-d0f0-42fa-bc06-6e03f9a8dd67

Это ошибка в terraform, или я что-то упустил? Вместо null_data_source я попытался использовать "localals". Но результат тот же, что списки сплат пустые, когда terraform планирует.

$ terraform -v
Terraform v0.11.0
+ provider.null v1.0.0
+ provider.openstack v1.0.0
+ provider.template v1.0.0

0 ответов

Другие вопросы по тегам