基于terraform中的条件创建嵌套资源参数块
我正在尝试创建一个terraform模块来创建一个计算实例。当且仅当我在模块调用期间将变量基于terraform中的条件创建嵌套资源参数块,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,我正在尝试创建一个terraform模块来创建一个计算实例。当且仅当我在模块调用期间将变量attached\u disk\u启用设置为true时,我希望资源具有附加磁盘。我有这个: resource "google_compute_disk" "my-disk" { name = "data" type = "pd-ssd" size = 20 count = var.attached_disks_enabled ? 1 : 0 } resource "google_co
attached\u disk\u启用
设置为true
时,我希望资源具有附加磁盘。我有这个:
resource "google_compute_disk" "my-disk" {
name = "data"
type = "pd-ssd"
size = 20
count = var.attached_disks_enabled ? 1 : 0
}
resource "google_compute_instance" "computer" {
name = "computer"
boot_disk {
...
}
// How do I make this disappear if attached_disk_enabled == false?
attached_disk {
source = "${google_compute_disk.my-disk.self_link}"
device_name = "computer-disk"
mode = "READ_WRITE"
}
}
已在vars.tf
中为模块声明了变量。模块调用如下所示:
module "main" {
source = "../modules/computer"
attached_disk_enabled = false
...
}
我知道动态块以及如何使用for
循环遍历列表并设置多个块,但我不确定如何使用此方法从资源中排除块:
dynamic "attached-disk" {
for_each in var.disk_list
content {
source = "${google_compute_disk.my-disk.*.self_link}"
device_name = "computer-disk-${count.index}"
mode = "READ_WRITE"
}
}
我想用if
代替每个的。有办法做到这一点吗
$ terraform version
Terraform v0.12.0
由于磁盘资源已经附加了条件,因此可以将该资源的结果用作迭代器,从而避免再次指定条件:
dynamic "attached_disk" {
for_each = google_compute_disk.my-disk
content {
source = attached_disk.value.self_link
device_name = "computer-disk-${attached_disk.key}"
mode = "READ_WRITE"
}
}
要回答一般问题:如果您确实需要条件块,那么答案是编写一个返回单个项列表或空列表的条件表达式:
dynamic "attached_disk" {
for_each = var.attached_disk_enabled ? [google_compute_disk.my-disk[0].self_link] : []
content {
source = attached_disk.value
device_name = "computer-disk-${attached_disk.key}"
mode = "READ_WRITE"
}
}
但是,在您的特定情况下,我更喜欢前者,因为它更直接地描述了意图(“连接每个磁盘”)