Условный поток внутри разных блоков в ресурсных блоках терраформ - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь создать скрипт terraform, который принимает пользовательский ввод и выполняет соответственно.Я в основном хочу спросить, хочет ли пользователь статический IP-адрес в облачной платформе Google, если да, то прошейте ресурс «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-engine: ресурс '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", иначе ничего не сделайте).

Но это не такработает как положено.

1 Ответ

0 голосов
/ 04 февраля 2019

Это проблема с terraform ...

Вы не можете сделать 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 {
   }
 }
}

Этот код создаст экземпляр вычисления с использованием созданного ip, если значение переменной равно единице, в другом случае он создаст ip, вы также можете добавитьжизненный цикл, если вы хотите сохранить тот же ip на ресурсе compute_address:

lifecycle = {
  ignore_changes = ["node_pool"]
}
...