Назад | Перейти на главную страницу

Terraform: вывод IP всех моих серверов

Я начинаю использовать 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 раздел для каждого типа сервера. Я хотел бы иметь возможность

Любая помощь приветствуется.

Вы немного не понимаете, как работают синтаксисы "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
}

ПРИМЕЧАНИЕ. Я никогда не использовал поставщик масштабирования в приведенном вами примере, поэтому я просто предполагаю, что этот атрибут существует.