Я хочу создать экземпляр и в зависимости от некоторой переменной создать подключенный диск.
...
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 ?
Терраформ v0.11.13
Но если это невозможно с 0.11, я могу попробовать обновиться до 0.12, если есть более простой способ.
Это возможно в версии до 0.12 (в зависимости от того, полагаетесь ли вы на вывод ресурса google_compute_instance.openqa), но проще с 0.12.





Вы можете использовать «google_compute_attached_disk» вместо «attached_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). если extra-disk-count больше, чем var.count, возникает ошибка. И если extra-disk-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, дополнительный диск будет создан и подключен ко всем вычислительным экземплярам.
Это сработало идеально. Большое спасибо! Только небольшая поправка. Последним ресурсом должен быть "google_compute_disk"
Хорошо. Я изменил как ваш комментарий
Какую версию Terraform вы используете?