在terraform的资源块不同的块中的条件流

问题描述 投票:0回答:1

我试图创建一个脚本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”,别的什么都不做)。

但它不是按预期工作。

google-cloud-platform terraform
1个回答
0
投票

这是与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"]
}
© www.soinside.com 2019 - 2024. All rights reserved.