You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CustomizeDiff与DiffSuppressFunc中GetChange的old/new值来源问询

Terraform SDKv2:DiffSuppressFunc和CustomizeDiff的old/new值来源说明

DiffSuppressFunc里的old和new

  • 未修改配置时:old是Terraform状态(state)中存储的资源属性值,new是资源Read方法(即你提到的readResource())从实际基础设施读取到的当前值。
  • 用户修改main.tf后:old依然是Terraform状态里的旧值,new则是用户在配置文件中设置的新期望值,而非Read方法的返回结果。因为用户修改配置后,Terraform会先对比配置与状态生成初步差异,再调用DiffSuppressFunc判断是否需要抑制该差异。

CustomizeDiff里的old和new

通过old, new := d.GetChange("foo")获取的两个值:

  • old:来自Terraform状态中的现有值;若资源为首次创建,就是属性的默认值(配置未指定时)。
  • new:是用户main.tf中的期望值,或是Terraform通过依赖链计算出的最终期望结果。

补充漂移检测场景:若配置未变但实际基础设施值与状态不一致,CustomizeDiff会结合Read方法的结果更新差异,但GetChange的old仍为状态值,new会被修正为实际读取到的漂移后的值。

更多资料查阅渠道

  • 查看Terraform SDKv2的源码注释:重点看schema.go中DiffSuppressFunc和CustomizeDiff的定义部分,有详细逻辑说明。
  • 阅读Terraform官方Provider开发文档的「资源差异定制」章节,会深入讲解差异计算的完整流程。
  • 参考成熟Terraform Provider的实现代码(比如AWS、Azure官方Provider),看他们如何用这两个函数处理差异场景。

内容的提问来源于stack exchange,提问作者Ivan Petrov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:01:04