我有一个带有应用程序网关的 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/
相关文章:
android - 用户向上滚动时无法单击 SliverPersistentHeader 上的操作按
javascript - 使用 React 根据另一个下拉列表更新选择的选项
arrays - 如何将 numpy 数组转换为 Zarr 数组
json - Angular environment.ts 问题 JSON。然而 environme
html - 线性渐变不覆盖整个图像(留下 ~1px 边框)
amazon-web-services - API 网关 : how to grant permis