如何从使用terraform-google-modules创建的模块中打印私有IP

时间:2020-11-11 06:43:24

标签: google-cloud-platform terraform-provider-gcp terraform-modules

我已经使用terraform模块创建了一些gcp实例:

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
  ...
}

然后我在运行terraform apply之后如何获取并输出这4个实例的私有IP?

2 个答案:

答案 0 :(得分:2)

该模块没有输出作为专用Ips。它只有输出 instance_self_links和available_zones

使用更好的资源块google_compute_instance_templategoogle_compute_instance_from_template

然后您可以使用输出块来获取所有4个私有ips

output {
value = google_compute_instance_from_template.instances[*].network_ip
}

答案 1 :(得分:1)

模块输出 instances_details,您可以从中获取 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"
  },
]