Я пишу код Terraform, чтобы зарезервировать несколько IP-адресов в каждом регионе, с которым мы работаем в Google, и который позже я буду использовать для назначения нескольким конкретным экземплярам.
Так что в моем модуле яиметь
resource "google_compute_address" "reserved_public_ip" {
}
, который перебирает счетчик и записывает проект, адрес_типа, имя, регион, подсеть и адрес.
Так что в итоге я получаю массив google_compute_address.reserved_public_ip. Я могу легко составить список всех имен и адресов ip с помощью
output "public_reservedip" {
value = "${zipmap(
google_compute_address.reserved_public_ip.*.name,
google_compute_address.reserved_public_ip.*.address
)}"
}
Но я не могу составить карту региона-> ipaddress с помощью zipmap, используя * .region, потому что на регион приходится 3 ips,так что я бы в конечном итоге только с последним IP-адресом, так как ключ региона повторяется.
Я пытаюсь построить вывод в виде
value = {
region1 = [list of ips]
region2 = [list of ips]
etc...
}
Так что я могу кормить этов мой модуль, который создает соответствующие хосты gcp, и он может получить список для региона, который он создает в настоящее время, но я не могу понять преобразование, которое позволит мне сделать это.
Пример данных, которые я долженработа с:
module.gcp-network.google_compute_address.reserved_public_ip.0:
id = myproject/northamerica-northeast1/dns-reserve-1-test
address = 10.128.0.2
address_type = INTERNAL
creation_timestamp = 2019-10-08T15:41:08.690-07:00
description =
name = dns-reserve-1-test
network_tier = PREMIUM
project = myproject
purpose = GCE_ENDPOINT
region = northamerica-northeast1
self_link = https://www.googleapis.com/compute/v1/projects/myproject/regions/northamerica-northeast1/addresses/dns-reserve-1-test
subnetwork = https://www.googleapis.com/compute/v1/projects/myproject/regions/northamerica-northeast1/subnetworks/test-northamerica-northeast1-public-subnet
users.# = 0