如何使模块中的块可选?
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)
}
# ...
}
# ...
}
我的模块中有这个资源: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)
}
# ...
}
# ...
}