在 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 部分将添加到资源中,但我收到一条错误,提示需要参数或 block 定义。
最佳答案
它应该可以使用 dynamic blocks 来工作。例如:
dynamic "log_config" {
for_each = var.firewall_logging == true ? [true] : []
content {
metadata = var.log_metadata
}
}
关于Terraform:资源中的可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68738630/