Terraform v1.5.4 动态项在合并选项上失败

Terraform v1.5.4 dynamic items failing on coalesce options

提问人:Shay Allen 提问时间:8/1/2023 更新时间:8/1/2023 访问量:39

问:

我是 Terraform 的新手。我打算利用本地 yaml 文件作为 Cloudflare 中大量重定向的动态列表的数据源。我可以通过不使用合并默认选项并让 yaml 文件中的每个条目都包含一个值(在本例中为 status_code)来使其工作。但是,我只想在状态代码与 301 默认值不同时输入状态代码。当我设置合并时,它给了我错误:

错误:不支持的属性 此对象没有名为“status_code”的属性。

我认为这是因为它不再在我的 yaml 文件中看到status_code值。有没有办法做到这一点?

这是我 main.tf:

locals {
  redirects = yamldecode(file("${path.module}/redirects.yaml"))
}

resource "cloudflare_list" "redirect_list" {
  account_id  = var.cloudflare_account_id
  name        = "redirect_list"
  description = "List of domains to redirect"
  kind        = "redirect"

  dynamic "item" {
    for_each = local.redirects

    content {
      value {
        redirect {
          source_url  = item.value.source_url
          target_url  = item.value.target_url
          status_code = coalesce(item.value.status_code, 301) # Set default to 301
        }
      }
    }
  }
}

这是我的redirects.yaml中的一个示例:

- source_url: "https://support.example.com"
  target_url: "https://example.com"

- source_url: "https://help.example.com"
  target_url: "https://example.com"

我所期望的是 terraform,使用 coalesce 函数来查看 item.value.status_code 是否存在以及它是否没有将 301 插入其中。就像我之前说的,如果我把status_code钥匙放在那里,这确实有效,但我希望我不必这样做。

Terraform 合并 terraform-provider-cloudflare

评论


答:

1赞 Marcin 8/1/2023 #1

请改用查找

status_code = lookup(item.value, "status_code", 301)

评论

1赞 Shay Allen 8/1/2023
非常感谢@Marcin!这就像一个魅力。