【问题标题】:Terraform: Optional fields in ResourceTerraform:资源中的可选字段
【发布时间】:2021-10-14 17:10:21
【问题描述】:

在 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 部分添加到资源中,但我收到需要参数或块定义的错误。

【问题讨论】:

    标签: terraform terraform-provider-gcp


    【解决方案1】:

    它应该使用dynamic blocks 工作。例如:

    dynamic "log_config" {
      for_each = var.firewall_logging == true ? [true] : []
      content {
        metadata = var.log_metadata
      }
    }
    

    【讨论】:

    • 你知道当你看到一个问题的解决方案时,盯着问题看了这么久不知道如何解决它,解决方案简单到你觉得愚蠢吗?这就是我现在。显然需要测试它,但谢谢:)
    • 很高兴能帮上忙,希望对你有用:)
    • 不要编辑它,我读错了我的输出:D,动态创建部分,所以它是正确的,因为你原来有它;)
    • 好的,从逻辑上讲这对我来说是有道理的,但由于某种原因它不起作用:(
    • 该代码在测试中有效,但是它不会更新现有规则! - 这似乎是从使用 enable_logging 到 log_config 的一系列错误的一部分。 github.com/hashicorp/terraform-provider-google/issues/7309
    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多