azure - Terraform 对动态资源的 ignore_changes

我有一个带有应用程序网关的 TF 项目,它有多个动态生成的 HTTP 监听器:

 dynamic "http_listener" {
    for_each = var.gateway_config
    iterator = cf
    content {
      name                           = "${cf.value["domain_name"]}-http"
      frontend_ip_configuration_name = local.frontend_ip_configuration_name
      frontend_port_name             = local.frontend_http_port_name
      protocol                       = "Http"
      host_name                      = cf.value["domain_name"]
    }
  }

我想在所有这些 HTTP 监听器“firewall_policy_id”参数上应用 ignore_changes 生命周期。

我尝试过的事情:

(...)
      ignore_changes = [
          http_listener[firewall_policy_id],
      ]

这以错误结束 - 需要单个静态变量

      ignore_changes = [
          http_listener["firewall_policy_id"],
      ]

这根本没有做任何事情

      ignore_changes = [
          http_listener.*.firewall_policy_id,
      ]

这会返回错误,因为 * 在这个地方不正确

我目前唯一的解决方案是添加所有可能的 HTTP 监听器(全部 200 个),但它看起来非常丑陋并且占用了代码中的大量空间:

ignore_changes = [
          http_listener[0].firewall_policy_id,
          http_listener[1].firewall_policy_id,
          http_listener[2].firewall_policy_id,
          ...
          http_listener[200].firewall_policy_id,
      ]

尝试使用 range(200) 进行列表推导,但再次出现错误,Terraform 需要在那个地方有一个静态值。

最佳答案

选项 1。只需从状态文件中删除目标。

例子

terraform state rm your_resource_want_to_ignore

选项 2。

尝试刷新状态

terraform 刷新

我已经搜索过这个主题,但发现还没有完美的解决方案。

这个问题看起来类似于 ignoring task definition change in ecs service。

即使在 github repo 讨论中,我也找不到好的方法。

https://github.com/hashicorp/terraform-provider-aws/issues/258

https://stackoverflow.com/questions/64431159/

相关文章:

python - 挣扎于基本的数据帧操作(Python)

python - Django 模型降序/嵌套查询

android - 用户向上滚动时无法单击 SliverPersistentHeader 上的操作按

javascript - 使用 React 根据另一个下拉列表更新选择的选项

arrays - 如何将 numpy 数组转换为 Zarr 数组

json - Angular environment.ts 问题 JSON。然而 environme

html - 线性渐变不覆盖整个图像(留下 ~1px 边框)

amazon-web-services - API 网关 : how to grant permis

angular - 如何在 Angular 10 应用程序仪表板中包含 firebase 分析?

python - 使用 python 控制包的错误奈奎斯特图