我试图创建一个脚本terraform这需要用户输入并相应地执行。我基本上要,询问用户是否希望在谷歌云平台静态IP,如果是,则缝合资源“google_compute_instance”因此,否则,就让它去。
分享我写的代码:
variable "create_eip" {
description = "Enter 1 for true, 0 for false"
}
resource "google_compute_address" "external" {
count = "${var.create_eip}"
name = "external-ip",
address_type = "EXTERNAL",
}
resource "google_compute_instance" "compute-engine" {
name = "random",
machine_type = "f1-micro",
boot_disk {
initialize_params {
size = "10",
type = "pd-ssd",
image = "${data.google_compute_image.image.self_link}"
}
}
network_interface {
subnetwork = "default",
access_config {
nat_ip = "${google_compute_address.external.address}"
}
}
}
当用户把0作为输入代码控制还行,我到达这里的错误是“nat_ip =‘$ {} google_compute_address.external.address’”
因为它的我得到这个错误:
- google_compute_instance.compute引擎:资源“google_compute_address.external”未找到变量“google_compute_address.external.address”。
我也尝试过通过更换这样
nat_ip = "${var.create_eip == "1" ? "${google_compute_address.external.address}" : ""}"
(如果create_ip = 1,执行 “google_compute_address.external.address”,别的什么都不做)。
但它不是按预期工作。
这是与terraform一个问题...
如果大于计其他的东西你真的无法做到的。
你可以尝试这样的事情,你不能把条件的资源里面现在:
variable "create_eip" {
description = "Enter 1 for true, 0 for false"
}
resource "google_compute_address" "external" {
count = "${var.create_eip}"
name = "external-ip",
address_type = "EXTERNAL",
}
resource "google_compute_instance" "compute-engine-ip" {
count = "${var.create_eip == 1 ? 1 : 0}"
name = "random",
machine_type = "f1-micro",
boot_disk {
initialize_params {
size = "10",
type = "pd-ssd",
image = "${data.google_compute_image.image.self_link}"
}
}
network_interface {
subnetwork = "default",
access_config {
nat_ip = "${google_compute_address.external.address}"
}
}
}
resource "google_compute_instance" "compute-engine" {
count = "${var.create_eip == 1 ? 0 : 1}"
name = "random",
machine_type = "f1-micro",
boot_disk {
initialize_params {
size = "10",
type = "pd-ssd",
image = "${data.google_compute_image.image.self_link}"
}
}
network_interface {
subnetwork = "default",
access_config {
}
}
}
此代码将使用创建的IP,如果该变量的值是一个,在其他情况下,它会创建一个IP创建一个计算实例,如果你想保持对compute_address资源相同的IP,你还可以添加一个生命周期:
lifecycle = {
ignore_changes = ["node_pool"]
}