【问题标题】:Create nested resource parameter blocks based on conditional in terraformterraform中基于条件创建嵌套资源参数块
【发布时间】:2019-10-20 14:26:12
【问题描述】:

我正在尝试创建一个创建计算实例的 terraform 模块。当且仅当我在模块调用期间将变量 attached_disk_enabled 设置为 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 代替for_each。有没有办法做到这一点?

$ terraform version
Terraform v0.12.0 

【问题讨论】:

    标签: terraform terraform-provider-gcp


    【解决方案1】:

    因为您的磁盘资源已经附加了条件,您可以使用该资源的结果作为您的迭代器,从而避免再次指定条件:

    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"
      }
    }
    

    但是,在您的具体情况下,我更喜欢前者,因为它更直接地描述了意图(“附加每个磁盘”)。

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 2020-05-30
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 2019-08-04
      • 2021-07-10
      • 1970-01-01
      相关资源
      最近更新 更多