Google cloud platform 如何获取Terraform Google Cloud ressource Google_compute_实例_模板的IP和名称
我正在使用Terraform中的Google cloud platform 如何获取Terraform Google Cloud ressource Google_compute_实例_模板的IP和名称,google-cloud-platform,terraform,Google Cloud Platform,Terraform,我正在使用Terraform中的google\u compute\u instance\u模板ressource,我想知道如何访问Terraform中模板将创建的VM的公共IP地址和名称 我的模板如下所示: resource "google_compute_instance_template" "tpl" { name_prefix = "${var.name_prefix}-" project
google\u compute\u instance\u模板
ressource,我想知道如何访问Terraform中模板将创建的VM的公共IP地址和名称
我的模板如下所示:
resource "google_compute_instance_template" "tpl" {
name_prefix = "${var.name_prefix}-"
project = var.project_id
machine_type = var.machine_type
labels = var.labels
metadata = var.metadata
tags = var.tags
can_ip_forward = var.can_ip_forward
metadata_startup_script = var.startup_script
region = var.region
dynamic "disk" {
for_each = local.all_disks
content {
auto_delete = lookup(disk.value, "auto_delete", null)
boot = lookup(disk.value, "boot", null)
device_name = lookup(disk.value, "device_name", null)
disk_name = lookup(disk.value, "disk_name", null)
disk_size_gb = lookup(disk.value, "disk_size_gb", null)
disk_type = lookup(disk.value, "disk_type", null)
interface = lookup(disk.value, "interface", null)
mode = lookup(disk.value, "mode", null)
source = lookup(disk.value, "source", null)
source_image = lookup(disk.value, "source_image", null)
type = lookup(disk.value, "type", null)
dynamic "disk_encryption_key" {
for_each = lookup(disk.value, "disk_encryption_key", [])
content {
kms_key_self_link = lookup(disk_encryption_key.value, "kms_key_self_link", null)
}
}
}
}
dynamic "service_account" {
for_each = [var.service_account]
content {
email = lookup(service_account.value, "email", null)
scopes = lookup(service_account.value, "scopes", null)
}
}
network_interface {
network = var.network
subnetwork = var.subnetwork
subnetwork_project = var.subnetwork_project
dynamic "access_config" {
for_each = var.access_config
content {
nat_ip = access_config.value.nat_ip
network_tier = access_config.value.network_tier
}
}
}
lifecycle {
create_before_destroy = "true"
}
# scheduling must have automatic_restart be false when preemptible is true.
scheduling {
preemptible = var.preemptible
automatic_restart = ! var.preemptible
}
dynamic "shielded_instance_config" {
for_each = local.shielded_vm_configs
content {
enable_secure_boot = lookup(var.shielded_instance_config, "enable_secure_boot", shielded_instance_config.value)
enable_vtpm = lookup(var.shielded_instance_config, "enable_vtpm", shielded_instance_config.value)
enable_integrity_monitoring = lookup(var.shielded_instance_config, "enable_integrity_monitoring", shielded_instance_config.value)
}
}
}
我的计划中没有google\u compute\u实例
ressource,只有google\u compute\u实例模板
所以我的问题是,如何访问Terraform中VM的公共IP地址和名称
我试过google\u compute\u instance\u template.tpl.network\u interface.0.access\u config.0.nat\u ip
,但它是空的
致以最良好的祝愿,
rforberger基于评论
这是唯一的模板,您可以基于该模板使用或创建实例
因此,创建这些实例后,您将能够使用实例或MIG资源访问它们的IP地址。但模板本身并没有提供这样的信息。创建MIG后,可以使用MIG数据源中的属性来获取实例。但是实例的数量和id会随着时间而变化,因为它们完全由MIG管理,而不是由terraform管理。根据评论
这是唯一的模板,您可以基于该模板使用或创建实例
因此,创建这些实例后,您将能够使用实例或MIG资源访问它们的IP地址。但模板本身并没有提供这样的信息。创建MIG后,可以使用MIG数据源中的属性来获取实例。但实例的数量和id会随时间而变化,因为它们完全由MIG而不是terraform管理。使用
local exec
执行CLI
resource "null_resource" "instances" {
provisioner "local-exec" {
command = "gcloud compute instance-groups managed list-instances <NAME>"
}
}
resource“null\u资源”实例{
供应人“本地执行官”{
command=“gcloud计算实例组托管列表实例”
}
}
将
替换为表示MIG的var
或字符串。使用local exec
执行CLI
resource "null_resource" "instances" {
provisioner "local-exec" {
command = "gcloud compute instance-groups managed list-instances <NAME>"
}
}
resource“null\u资源”实例{
供应人“本地执行官”{
command=“gcloud计算实例组托管列表实例”
}
}
将
替换为表示MIG的var
或字符串。您无法访问它们,因为实例还不存在。@Marcin真的吗?没有办法访问实例的IP和名称吗?您在编写时还没有创建任何实例。您只有一个模板。该实例是使用该模板通过MIG创建的module“managed_instance_group”{source=“../../../../terraform google vm/modules/mig”region=var.region target_size=5 hostname=“k8s”instance_template=module.instance_template.self_link target_pool=[module.load_balancer\u custom_hc.target__\u pool]命名的_端口=[{name=“https”port=6443}]}```但我如何访问实例的IP和名称?或者换句话说:我如何访问由Google托管的实例组()创建的实例的IP地址和名称?您无法访问它们,因为实例还不存在。@Marcin真的吗?没有办法访问实例的IP和名称吗?您在编写时还没有创建任何实例。您只有一个模板。该实例是使用该模板通过MIG创建的module“managed_instance_group”{source=“../../../../terraform google vm/modules/mig”region=var.region target_size=5 hostname=“k8s”instance_template=module.instance_template.self_link target_pool=[module.load_balancer\u custom_hc.target__\u pool]命名的_端口=[{name=“https”port=6443}]}``但是我如何访问实例的IP和名称?或者换句话说,我如何访问由Google托管的实例组()创建的实例的IP地址和名称?这虽然不是真正的Terraform。@RonnyForberger-Terraform不管理托管实例组创建的计算引擎实例。“变通”是我能想到的唯一技术。如果您的要求是本机Terraform提供程序功能,则不可能。这虽然不是真正的Terraform。@RonnyForberger-Terraform不管理托管实例组创建的计算引擎实例。“变通”是我能想到的唯一技术。如果您的要求是本机Terraform provider功能,则不可能。如何从MIG数据源访问instances属性?我只有google_compute_region_instance_group_manager资源,它有object instance_group,但这只是google_compute_instance_group_manager的URL。访问时出现以下错误:此值没有任何属性。如何从MIG数据源访问instances属性?我只有google_compute_region_instance_group_manager资源,它有object instance_group,但这只是google_compute_instance_group_manager的URL。访问该值时出现以下错误:该值没有任何属性。