如何使模块中的块可选?

How do I make a block optional in a module?

我的模块中有这个资源:https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_router

我只想通过变量使 advertised_ip_ranges 可选。

我的模块我这样做:

resource "google_compute_router" "my-router" {
  .....
  bgp {
    .....
    advertised_ip_ranges = var.advertised_ip_ranges

我尝试了以下方法,但没有任何效果

设置 var.advertised_ip_ranges = {} 抛出此错误:An argument named "advertised_ip_ranges" is not expected here. Did you mean to define a block of type "advertised_ip_ranges"?

设置 var.advertised_ip_ranges = null 会引发相同的错误。

我只是希望能够忽略而不是通过变量设置 advertised_ip_ranges。

您可以根据变量进行设置,但您需要使用 dynamic

例如:

variable "advertised_ip_ranges" {
  type    = set(map(string))
  default = []

  # Requires Terraform 1.1+
  # Other option is to default to `null`, and add check in `dynamic`.
  nullable = false
}

resource "google_compute_router" "my_router" {
  bgp {
    dynamic "advertised_ip_ranges" {
      for_each = var.advertised_ip_ranges
      # Without `nullable`:
      # for_each = coalesce(var.advertised_ip_ranges, [])

      content {
        # Mandatory
        range = advertised_ip_ranges.value.range
        # Optional
        description = lookup(advertised_ip_ranges.value, "description", null)
      }
    # ...
  }
  # ...
}