调用 PlanResourceChange 时如何告诉 Terraform 提供者新值应该是什么
How to tell a Terraform provider what a new value should be when PlanResourceChange is called
我正在阅读 Terraform 中的 underpinnings of providers。在我的例子中,我有两个属性作为改变服务器电源状态的资源的一部分。他们是desired_power_action
,另一个是power_state
。 desired_power_action
可能类似于 FORCE_OFF
。完成此操作后,我希望 power_state
为 off
。
desired_power_action
是必填字段,power_state
是计算字段。据我了解,在计划阶段,它会将 desired_power_action
投影为用户选择的任何内容。事实上,在我的提供商中,我只是将其设置为用户所说的他们想要的任何内容,因为这只是他们希望将其设置为的内容。但是对于 power_state
我不确定如何在我的提供商代码中告诉 Terraform 如果用户将 desired_power_action
设置为 FORCE_OFF
那么 power_state
的预测值就是 off
.
我知道如何在申请时设置该值,但我如何在计划时告诉 Terraform power_state
申请后 应该是 XXXXXX?
还是我误会了,这不是我需要做的事情?
您在此处链接到的“资源实例更改生命周期”文档是从 Terraform Core 开发人员的角度编写的,因为它的文档主要针对为 Terraform Core 做出贡献的人员,而不是提供商开发人员。
Terraform SDK 团队也参考了此文档以了解 SDK 应该保证哪些不变量,但是 SDK 然后在该较低级别的模型之上添加了自己的抽象,以便更方便地开发 Terraform适合常用模式的提供商。
在你的情况下,我想你已经注意到原始协议要求 PlanResourceChange
为资源类型的每个“计算”属性提供一个值,它可以使用“未知值”占位符(在 Terraform 的 UI 中转换为 (known after apply)
)或(如果提供者知道足以预测最终值)它可以 return 一个具体值,然后必须匹配 ApplyResourceChange
最后 returns.
默认情况下,SDK 将通过将所有计算属性设置为“未知”来响应 PlanResourceChange
,因此实际上大多数资源类型不包含任何特殊逻辑。但是,在像您这样的情况下,您可以选择通过填充 schema.Resource
.
的 CustomizeDiff
字段来自定义默认行为
CustomizeDiff
回调接收一个 schema.ResourceDiff
对象,它与 schema.ResourceData
类似,但包含一些额外的方法来处理 diff 同时包含旧值和新值的事实每个 argument/attribute.
在您的情况下,您可以编写一些逻辑以在您知道具体新值的情况下有条件地调用 SetNew。然后,SDK 将在其 PlanResourceChange
响应中依次 return,而不是 return 未知值的默认行为。
我正在阅读 Terraform 中的 underpinnings of providers。在我的例子中,我有两个属性作为改变服务器电源状态的资源的一部分。他们是desired_power_action
,另一个是power_state
。 desired_power_action
可能类似于 FORCE_OFF
。完成此操作后,我希望 power_state
为 off
。
desired_power_action
是必填字段,power_state
是计算字段。据我了解,在计划阶段,它会将 desired_power_action
投影为用户选择的任何内容。事实上,在我的提供商中,我只是将其设置为用户所说的他们想要的任何内容,因为这只是他们希望将其设置为的内容。但是对于 power_state
我不确定如何在我的提供商代码中告诉 Terraform 如果用户将 desired_power_action
设置为 FORCE_OFF
那么 power_state
的预测值就是 off
.
我知道如何在申请时设置该值,但我如何在计划时告诉 Terraform power_state
申请后 应该是 XXXXXX?
还是我误会了,这不是我需要做的事情?
您在此处链接到的“资源实例更改生命周期”文档是从 Terraform Core 开发人员的角度编写的,因为它的文档主要针对为 Terraform Core 做出贡献的人员,而不是提供商开发人员。
Terraform SDK 团队也参考了此文档以了解 SDK 应该保证哪些不变量,但是 SDK 然后在该较低级别的模型之上添加了自己的抽象,以便更方便地开发 Terraform适合常用模式的提供商。
在你的情况下,我想你已经注意到原始协议要求 PlanResourceChange
为资源类型的每个“计算”属性提供一个值,它可以使用“未知值”占位符(在 Terraform 的 UI 中转换为 (known after apply)
)或(如果提供者知道足以预测最终值)它可以 return 一个具体值,然后必须匹配 ApplyResourceChange
最后 returns.
默认情况下,SDK 将通过将所有计算属性设置为“未知”来响应 PlanResourceChange
,因此实际上大多数资源类型不包含任何特殊逻辑。但是,在像您这样的情况下,您可以选择通过填充 schema.Resource
.
CustomizeDiff
字段来自定义默认行为
CustomizeDiff
回调接收一个 schema.ResourceDiff
对象,它与 schema.ResourceData
类似,但包含一些额外的方法来处理 diff 同时包含旧值和新值的事实每个 argument/attribute.
在您的情况下,您可以编写一些逻辑以在您知道具体新值的情况下有条件地调用 SetNew。然后,SDK 将在其 PlanResourceChange
响应中依次 return,而不是 return 未知值的默认行为。