Terraform:资源中的可选字段
Terraform: Optional fields in Resource
在 terraform 中,我正在尝试创建一些防火墙规则,这些规则通常不启用日志记录 - 为此,我必须 而不是 log_config字段创建。但是,我有一个变量 firewall_logging,如果为真,应该添加此字段和我希望它包含的选项。
我不认为在这里使用动态是正确的做法,但它有可能是正确的,而且我误解了如何生成它,而是想出了以下方法:
resource "google_compute_firewall" "this" {
name = var.name
project = var.project
network = var.network
source_ranges = var.source_ranges
source_tags = var.source_tags
target_tags = var.target_tags
priority = var.priority
direction = var.direction
allow {
protocol = lower(var.protocol)
ports = var.ports
}
## If log_config is defined, this enables logging. By not defining it, we are disabling logging.
var.firewall_logging == true ? log_config { metadata = var.log_metadata } : null
我希望变量会被评估,如果为真,log_config 部分将添加到资源中,但我得到一个错误,指出需要参数或块定义。
它应该可以使用 dynamic blocks。例如:
dynamic "log_config" {
for_each = var.firewall_logging == true ? [true] : []
content {
metadata = var.log_metadata
}
}
在 terraform 中,我正在尝试创建一些防火墙规则,这些规则通常不启用日志记录 - 为此,我必须 而不是 log_config字段创建。但是,我有一个变量 firewall_logging,如果为真,应该添加此字段和我希望它包含的选项。
我不认为在这里使用动态是正确的做法,但它有可能是正确的,而且我误解了如何生成它,而是想出了以下方法:
resource "google_compute_firewall" "this" {
name = var.name
project = var.project
network = var.network
source_ranges = var.source_ranges
source_tags = var.source_tags
target_tags = var.target_tags
priority = var.priority
direction = var.direction
allow {
protocol = lower(var.protocol)
ports = var.ports
}
## If log_config is defined, this enables logging. By not defining it, we are disabling logging.
var.firewall_logging == true ? log_config { metadata = var.log_metadata } : null
我希望变量会被评估,如果为真,log_config 部分将添加到资源中,但我得到一个错误,指出需要参数或块定义。
它应该可以使用 dynamic blocks。例如:
dynamic "log_config" {
for_each = var.firewall_logging == true ? [true] : []
content {
metadata = var.log_metadata
}
}