地形资源块中不同块内的条件流



我正在尝试创建一个接受用户输入并相应地执行的地形脚本。我基本上想问用户是否想要谷歌云平台中的静态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.计算引擎:找不到变量的资源"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",否则不执行任何操作(。

但它没有按预期工作。

这是地形的一个问题...

除了计数之外,您实际上无法为其他事情做 if。

您可以尝试类似的事情,因为您现在无法将条件放入资源中:

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

如果变量值为 1,则此代码将使用创建的 ip 创建一个计算实例,在另一种情况下,它将创建一个 ip,如果要在compute_address资源上保留相同的 ip,还可以添加生命周期:

lifecycle = {
  ignore_changes = ["node_pool"]
}

最新更新