Я начинаю использовать Terraform (0.12) с разными типами серверов, каждый из которых связан с другим изображением. Я пытаюсь просто вывести все частные IP-адреса (я не знаю номера до времени выполнения), но не могу найти простой способ сделать это (я нашел более сложный).
Я пытаюсь использовать TF на провайдере масштабирования, и у меня есть такое объявление серверов (упрощенное)
# INPUT
variable "srv1" {
type = number
default = 0
}
variable "srv2" {
type = number
default = 0
}
# IMAGES
data "scaleway_instance_image" "srv1" {
name = "srv1"
}
data "scaleway_instance_image" "srv2" {
name = "srv2"
}
# SERVERS
resource "scaleway_instance_server" "srv1" {
name = "srv1_${count.index}"
image = data.scaleway_instance_image.srv1.id
count = var.srv1
}
resource "scaleway_instance_server" "srv2" {
name = "srv2_${count.index}"
image = data.scaleway_instance_image.srv2.id
count = var.srv2
}
Чтобы вывести частный IP со всех серверов, вот что я делаю
# OUTPUT
output "srv1_private_ips" {
value = ["${scaleway_instance_server.srv1.*.private_ip}"]
}
output "srv2_private_ips" {
value = ["${scaleway_instance_server.srv2.*.private_ip}"]
}
Это работает, но мне нужно создать output
раздел для каждого типа сервера. Я хотел бы иметь возможность
scaleway_instance_server.*.*.private_ip
но двойной подстановочный знак кажется невозможнымЛюбая помощь приветствуется.
Вы немного не понимаете, как работают синтаксисы "count" и splat ("*"). Используя count, вы создадите единый блок ресурсов для своих серверов, используя count, чтобы определить, сколько раз этот экземпляр будет дублироваться. Отсюда:
resource "scaleway_instance_server" "srv" {
name = "srv_${count.index}"
image = data.scaleway_instance_image.srv1.id
count = 2
}
Создадим два ресурса: scaleway_instance_server.srv[0]
и scaleway_instance_server.srv[1]
. (Да, у них будет то же самое image
- это намек на то, что это, вероятно, не лучший способ справиться с этим)
Вывод списка private_ip
атрибут со всех серверов становится тривиальным:
output "srv_private_ips" {
value = scaleway_instance_server.srv[*].private_ip
}
ПРИМЕЧАНИЕ. Я никогда не использовал поставщик масштабирования в приведенном вами примере, поэтому я просто предполагаю, что этот атрибут существует.