如何使用Terraform为GCP中的实例添加私有IP输出?
我在如何使用Terraform为GCP中的实例添加私有IP输出?,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,我在输出中的TF代码中定义了此输出。TF: output "ip" { value = google_compute_address.vm_private_ip.address } // Launch an MS SQL Server into GCP // Configure the Google Cloud provider provider "google" { credentials = file("mycreds.json&q
输出中的TF代码中定义了此输出。TF
:
output "ip" {
value = google_compute_address.vm_private_ip.address
}
// Launch an MS SQL Server into GCP
// Configure the Google Cloud provider
provider "google" {
credentials = file("mycreds.json")
project = var.project
region = var.region
}
// Terraform plugin for creating random ids
resource "random_id" "instance_id" {
byte_length = 8
}
// A single Compute Engine instance
resource "google_compute_instance" "default" {
name = var.instance_name
machine_type = var.machine_type
zone = var.zone
tags = [var.instance_name, var.env_name]
boot_disk {
initialize_params {
size = var.boot_disk_size
image = data.google_compute_image.sqlserverimage.self_link
}
}
network_interface {
subnetwork = var.subnetwork
subnetwork_project = var.subnetwork_project
}
}
data "google_compute_image" "sqlserverimage" {
family = var.image_family
project = var.project
}
// Create additional disks
resource "google_compute_disk" "datadisk" {
name = var.data_disk_name
type = var.data_disk_type
size = var.data_disk_size
zone = var.zone
image = data.google_compute_image.sqlserverimage.self_link
labels = {
environment = "dev"
asv = "mycompanytools"
ownercontact = "myuser"
}
physical_block_size_bytes = 4096
}
resource "google_compute_disk" "backupdisk" {
name = var.backup_disk_name
type = var.backup_disk_type
size = var.backup_disk_size
zone = var.zone
image = data.google_compute_image.sqlserverimage.self_link
labels = {
environment = "dev"
asv = "mycompanytools"
ownercontact = "myuser"
}
physical_block_size_bytes = 4096
}
resource "google_compute_disk" "logdisk" {
name = var.log_disk_name
type = var.log_disk_type
size = var.log_disk_size
zone = var.zone
image = data.google_compute_image.sqlserverimage.self_link
labels = {
environment = "dev"
asv = "mycompanytools"
ownercontact = "myuser"
}
physical_block_size_bytes = 4096
}
// Attach additional disks
resource "google_compute_attached_disk" "datadiskattach" {
disk = google_compute_disk.datadisk.id
instance = google_compute_instance.default.id
}
resource "google_compute_attached_disk" "backupdiskattach" {
disk = google_compute_disk.backupdisk.id
instance = google_compute_instance.default.id
}
resource "google_compute_attached_disk" "logdiskattach" {
disk = google_compute_disk.logdisk.id
instance = google_compute_instance.default.id
}
这是我用来在main.tf
中创建实例的代码:
output "ip" {
value = google_compute_address.vm_private_ip.address
}
// Launch an MS SQL Server into GCP
// Configure the Google Cloud provider
provider "google" {
credentials = file("mycreds.json")
project = var.project
region = var.region
}
// Terraform plugin for creating random ids
resource "random_id" "instance_id" {
byte_length = 8
}
// A single Compute Engine instance
resource "google_compute_instance" "default" {
name = var.instance_name
machine_type = var.machine_type
zone = var.zone
tags = [var.instance_name, var.env_name]
boot_disk {
initialize_params {
size = var.boot_disk_size
image = data.google_compute_image.sqlserverimage.self_link
}
}
network_interface {
subnetwork = var.subnetwork
subnetwork_project = var.subnetwork_project
}
}
data "google_compute_image" "sqlserverimage" {
family = var.image_family
project = var.project
}
// Create additional disks
resource "google_compute_disk" "datadisk" {
name = var.data_disk_name
type = var.data_disk_type
size = var.data_disk_size
zone = var.zone
image = data.google_compute_image.sqlserverimage.self_link
labels = {
environment = "dev"
asv = "mycompanytools"
ownercontact = "myuser"
}
physical_block_size_bytes = 4096
}
resource "google_compute_disk" "backupdisk" {
name = var.backup_disk_name
type = var.backup_disk_type
size = var.backup_disk_size
zone = var.zone
image = data.google_compute_image.sqlserverimage.self_link
labels = {
environment = "dev"
asv = "mycompanytools"
ownercontact = "myuser"
}
physical_block_size_bytes = 4096
}
resource "google_compute_disk" "logdisk" {
name = var.log_disk_name
type = var.log_disk_type
size = var.log_disk_size
zone = var.zone
image = data.google_compute_image.sqlserverimage.self_link
labels = {
environment = "dev"
asv = "mycompanytools"
ownercontact = "myuser"
}
physical_block_size_bytes = 4096
}
// Attach additional disks
resource "google_compute_attached_disk" "datadiskattach" {
disk = google_compute_disk.datadisk.id
instance = google_compute_instance.default.id
}
resource "google_compute_attached_disk" "backupdiskattach" {
disk = google_compute_disk.backupdisk.id
instance = google_compute_instance.default.id
}
resource "google_compute_attached_disk" "logdiskattach" {
disk = google_compute_disk.logdisk.id
instance = google_compute_instance.default.id
}
但是当我运行一个地形平面图时
会出现以下错误:
terraform plan
Error: Reference to undeclared resource
on outputs.tf line 2, in output "ip":
2: value = google_compute_address.vm_private_ip.address
A managed resource "google_compute_address" "vm_private_ip" has not been
declared in the root module.
在创建实例之前,不会知道私有IP。如何获得显示专用IP的输出?我不想为实例分配IP,我只想知道它创建后拥有什么IP。要获取通过
Google\u Compute\u实例创建的Google Compute实例的默认、动态分配的IP地址,您可以访问network\u接口。0.network\u IP
属性,如中所述:
network\u interface.0.network\u ip
-实例的内部ip地址,手动或动态分配
因此,您的输出应该是:
output "ip" {
value = google_compute_instance.default.network_interface.0.network_ip
}
下面的输出块将为您提供所需的输出值
output "ip" {
value = google_compute_instance.default.network_interface.0.network_ip
}
你能编辑你问题中的代码,使之形成一个“请”字吗?现在看起来你还没有把你的google\u compute\u address
资源命名为vm\u private\u ip
,但是你不可能从当前代码中准确地知道你哪里出错了。好的,当然,我现在就添加它。好的,我刚刚用我的原始代码更新了OP。谢谢您的代码不包含解释错误的google\u compute\u address
资源。是否要添加一个,但尚未添加?或者你只想知道google\u compute\u实例
资源的IP地址吗?我只想知道实例创建后的IP地址。我不想给它一个。我尝试将它添加到我的输出中:output“ip”{value=network\u interface.0.network\u ip}
但是我得到了这个错误:terraform plan错误:outputs.tf行2上的无效引用,在输出“ip”中:2:value=network\u interface.0.network\u ip对资源类型的引用必须后跟至少一个属性访问,并指定资源名称。
我做错了什么?@bluethundr您完全没有提供资源及其标识符名称