Terraform:输出我所有不同服务器的 IP

Terraform:输出我所有不同服务器的 IP

我开始将 Terraform (0.12) 与不同类型的服务器结合使用,每个服务器都与不同的映像相关联。我试图简单地输出所有私有 IP(在运行之前我不知道 IP 号码),但找不到一种简单的方法来做到这一点(我找到了一种更复杂的方法)。

我正在 scaleway 提供商上尝试 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为每种服务器类型创建一个部分。我希望有选项

  • 循环遍历服务器类型列表并在一个输出中输出所有 IP。没有找到如何
  • 仅输出scaleway_instance_server.*.*.private_ip除双通配符之外的所有内容似乎是不可能的

任何帮助均感激不尽。

答案1

您对“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
}

注意:我从未在您给出的示例中使用过 scaleway 提供程序,因此我只是猜测该属性存在

相关内容