как распечатать частный IP из модуля, созданного с помощью terraform-google-modules
Я создал несколько экземпляров gcp, используя модуль terraform:
module "instance_template" {
source = "terraform-google modules/vm/google//modules/instance_template"
...
}
module "compute_instance" {
source = "terraform-google-
modules/vm/google//modules/compute_instance"
num_instances = 4
...
}
тогда как мне получить и вывести частный ip этих 4 экземпляров после запуска terraform apply?
2 ответа
Этот модуль не имеет вывода в виде частных IP-адресов. Он имеет только выходы instance_self_links и available_zones
Лучше использовать ресурсный блок
google_compute_instance_template
и
google_compute_instance_from_template
Затем вы можете использовать блок вывода для получения всех 4 частных IP-адресов.
output {
value = google_compute_instance_from_template.instances[*].network_ip
}
Выходные данные модуля <tcode id="4298418"></tcode> из которого вы можете получить IP-адреса.
Ниже приведен пример получения IP-адресов всех созданных экземпляров.
output "vm-ips" {
value = flatten(module.compute_instance[*].instances_details.*.network_interface.0.network_ip)
}
Выход:
vm-ips = [
"10.128.0.14",
"10.128.0.15",
"10.128.0.16",
]
В вы повторили модуль с
for-each
для создания групп экземпляров с разными параметрами.
- Скажем, 2 экземпляра, каждый с именем хоста, начинающимся с некоторого префикса, в 2 группах
Затем вы можете получить все их IP-адреса следующим образом:
output "vm-ips" {
value = flatten([
for group in module.compute_instance[*] : [
for vm_details in group: [
for detail in vm_details.instances_details: {
"name" = detail.name
"ip" = detail.network_interface.0.network_ip
}
]
]
])
}
Выход:
vm-ips = [
{
"ip" = "10.128.0.17"
"name" = "w1-001"
},
{
"ip" = "10.128.0.18"
"name" = "w1-002"
},
{
"ip" = "10.128.0.20"
"name" = "w2-001"
},
{
"ip" = "10.128.0.19"
"name" = "w2-002"
},
]