Как я могу определить 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