terraform - Terraform - API 以不同的顺序返回数据,所以 terraform 看到了毫无意义的变化?
问题描述
我看到 terraform 想要更改资源以进行无意义的更改(通常与列表类型事物的排序有关)。例如下面,这个资源没有改变,只是排序从 API 返回了这个特定的运行。
我可以更改任何内容以防止这些无意义的更改出现在计划和申请中吗?应用程序网关和它的许多块是我看到这种情况发生的另一个例子。
# azurerm_web_application_firewall_policy.owasp_only will be updated in-place
~ resource "azurerm_web_application_firewall_policy" "owasp_only" {
id = "/subscriptions/ReallingInterestingGUID/resourceGroups/rg-apim/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/ccr-owasp-only"
name = "ccr-owasp-only"
tags = {
"created-by" = bob.jones@jones.com
"terraform-stack" = "api-gateway"
}
# (4 unchanged attributes hidden)
~ managed_rules {
~ managed_rule_set {
~ type = "Microsoft_BotManagerRuleSet" -> "OWASP"
~ version = "0.1" -> "2.2.9"
}
~ managed_rule_set {
~ type = "OWASP" -> "Microsoft_BotManagerRuleSet"
~ version = "2.2.9" -> "0.1"
}
}
# (1 unchanged block hidden)
}
解决方案
在 Terraform 提供者将基于 API 的规范化误解为漂移的情况下,一般的直接答案是更改您的配置以匹配远程系统期望的规范化形式。
在您的情况下,这似乎意味着交换managed_rule_set
配置中两个块的顺序,以便顺序与远程 API 认为的规范化表示相匹配。
不幸的是,这些规范化规则并没有在远程系统文档中得到全面的详细记录,因此开发人员在实现 Terraform 提供程序集成时可能会错过它们。对此的“真正”答案是将缺少的逻辑添加到提供程序,以允许它识别远程系统何时认为两个配置是等效的,但当然这通常不是您可以立即执行的操作,而是必须等待对于包含该附加逻辑的提供程序的新版本。因此,使您的配置与远程系统的期望相匹配是一个更实际的更改,您可以在不更改提供程序版本的情况下进行更改。
推荐阅读
- python - MIP 从 Gurobi 开始
- python - 如何在不等待循环结束的情况下同时运行相同的方法?
- vue.js - 名称间距在 vuex 映射中不起作用,未找到抛出模块命名空间
- javascript - 无法读取未定义的属性“身份验证” - 使用 Account Kit 解析服务器
- java - 以升序对具有从星期一开始的星期几名称的字符串列表进行排序
- android - Android 许可 BIND_NOTIFICATION_LISTENER_SERVICE 不起作用
- nginx - 如何在 nginx 中暂时禁用从 http 到 https 的重定向?
- php - 从服务器下载 Magento 网站,但在本地服务器上运行时遇到困难。
- discord - discord.js 嵌入的空消息问题
- firebase - 使用 auth.uid 限制对 Firebase-Database 的访问不起作用