我有一个terraform提供程序,该提供程序可以与带外“丢失” api对象的API配合使用。我已经与供应商进行了交谈,他们在积压订单中说了这一点,但似乎对实际修复它没有兴趣。
Terraform提供程序也不使用数据源,而仅使用远程状态,这意味着它实际上无法检测到该字段丢失或任何东西。
如果我通过更改状态强制Terraform更新资源,则该字段将返回其hacky。是否有诸如“ ignore_changes”之类的东西总是在更新资源?
答案 0 :(得分:2)
ReadResource
是针对托管资源实例的Terraform提供程序API操作,它在Terraform SDK中映射到schema.Resource
中的Read
回调。
此功能的目的是使用上次操作结束时以Terraform状态记录的信息来生成一个描述远程系统中对象当前状态的新对象。除了检测对象本身属性的“漂移”之外,此功能还可以潜在地检测并报告远程对象不再存在。
在当前的SDK API中,一个Read
实现可以通过以空字符串作为ID调用d.SetId
来报告该对象不再存在,因为SDK要求任何有效的对象都必须具有非-空ID。
Terraform调用ReadResource
是在terraform plan
中准备计划的一部分,或在无参数terraform apply
的隐含计划步骤中进行。因此,提供者是否能够检测到对象何时不存在或自上一次操作结束以来其属性是否已更改时发出信号。然后,在与配置进行比较以生成建议的计划时,Terraform将考虑该漂移。
Terraform的工作流程通常期望所有资源都将收敛于稳定状态,以便用户可以运行terraform plan
并看到没有任何更改待处理的消息。提供者永久提出对每个计划进行更多更改的情况通常被认为是提供者的错误,因此,我不建议您作为问题的解决方案,并且Terraform没有旨在提供这种功能的功能。 / p>