Terraform:资源中的可选字段

标签 terraform terraform-provider-gcp

在 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/

相关文章:

azure - Terraform "AuthorizationFailed"与 Azure 提供商

input - 将 GitHub Actions 工作流中的输入值绕过到 terraform 变量文件

kubernetes - 构建 REST 客户端失败

google-cloud-platform - Terraform:尝试使用列表创建一系列子网 cidr,但出现错误 "string required"

google-cloud-platform - 无法使用 Terraform 在 Cloud Run 上部署公共(public) API

google-cloud-platform - 使用 terraform 配置 bigquery 数据集

amazon-web-services - Terraform 错误 : ClientException: When the volume parameter is specified, 仅应使用一种卷配置类型

go - Terraform - 将 vendor aws-sdk-go 依赖项更新到最新的过程

amazon-web-services - 地形错误: Incorrect attribute value type for subnet_ids vpc modules

google-cloud-platform - 如何在 gcp 中重命名子网?