Как отключить ресурс в google_compute_instance с помощью Terraform - PullRequest
0 голосов
/ 09 июля 2019

Я хочу создать экземпляр и, в зависимости от какой-либо переменной, создать подключенный диск.

...
variable "extra-disk-count" {
    default = "0"
}

variable "extra-disk-size" {
    default = "100"
}

resource "google_compute_instance" "openqa" {
    count        = "${var.count}"
    name         = "${var.name}-${element(random_id.service.*.hex, count.index)}"
    machine_type = "${var.type}"
    zone         = "${var.region}"

    boot_disk {
        initialize_params {
            image = "${var.image_id}"
        }
    }

    attached_disk {
        source      = "${element(google_compute_disk.default.*.self_link, count.index)}"
        device_name = "${element(google_compute_disk.default.*.name, count.index)}"
    }
    ....
}

resource "google_compute_attached_disk" "default" {
  name  = "ssd-disk"
  count = "${var.extra-disk-count}"
  type  = "pd-ssd"
  zone  = "${var.region}"
  size  = "${var.extra-disk-size}"
  physical_block_size_bytes = 4096
}

Я могу установить var.extra-disk-count = 0, если не хочу создавать диск, но затем я получаюошибка

* google_compute_instance.openqa: element: element() may not be used with an empty list in:

${element(google_compute_disk.default.*.self_link, count.index)}

, потому что он пытается добавить элемент, который не был создан.

Как «отключить» параметр attached_disk в google_compute_instance при var.extra-disk-count = 0?

1 Ответ

2 голосов
/ 10 июля 2019

Вы можете использовать "google_compute_attached_disk" вместо attach_disk в google_compute_instance.https://www.terraform.io/docs/providers/google/r/compute_attached_disk.html

resource "google_compute_attached_disk" "default" {
  count = "${var.extra-disk-count}"
  disk = "${element(google_compute_disk.openqa.*.self_link, count.index)}"
  instance = "${element(google_compute_instance.default.*.self_link, count.index)}"
}

Обратите внимание, что число дополнительных дисков должно быть равно 0 или равно числу google_compute_attached_disk.default (var.count).если число дополнительных дисков больше чем var.count, это делает ошибку.И если число дополнительных дисков больше 0 и меньше, чем var.count, у некоторых экземпляров вычислений не будет дисков.

Поэтому я хочу изменить, как показано ниже,

// remove extra-disk-count

variable "create-extra-disk" {
  default = "false"
}

resource "google_compute_instance" "openqa" {
  count        = "${var.count}"
  name         = "${var.name}-${element(random_id.service.*.hex, count.index)}"
  machine_type = "${var.type}"
  zone         = "${var.region}"

  boot_disk {
    initialize_params {
      image = "${var.image_id}"
    }
  }
}

resource "google_compute_attached_disk" "default" {
  count    =  "${var.create-extra-disk ? var.count: 0}"
  disk     = "${element(google_compute_disk.openqa.*.self_link, count.index)}"
  instance = "${element(google_compute_instance.default.*.self_link, count.index)}"
}

resource "google_compute_disk" "default" {
  name                      = "ssd-disk"
  count                     = "${var.create-extra-disk ? var.count : 0}"
  type                      = "pd-ssd"
  zone                      = "${var.region}"
  size                      = "${var.extra-disk-size}"
  physical_block_size_bytes = 4096
}

, еслиcreate-extra-disk имеет значение false, дополнительный диск не будет создан и подключен.если create-extra-disk имеет значение true, дополнительный диск будет создан и подключен ко всем экземплярам вычислений.

...