如何在 terraform 中修复 "No Update defined, must set ForceNew on"?
How can I fix "No Update defined, must set ForceNew on" in terraform?
这是我的资源 tf 架构:
Schema: map[string]*schema.Schema{
"config_sensitive": {
Type: schema.TypeMap,
Optional: true,
ForceNew: false,
Sensitive: true,
Description: "Sensitive part of connector configuration. String keys and values",
},
当我尝试编译它时,我 运行 变成:
resource ...: No Update defined, must set ForceNew on: []string{"config_sensitive"}
.
有没有办法在不设置 ForceNew: true
的情况下消除此错误(我不知道 Update
到底是什么)?
在 Terraform 中,当配置中的资源参数根据状态中的当前值传递不同的值,并且根据状态存在相应的资源时,提供者必须尝试更改现有资源以匹配配置中的新值。模式中定义了各种函数来支持资源,但最基本的是存在相应的函数来支持四种基本操作:创建、读取、更新和删除。当 Terraform 提供程序尝试更改资源以匹配配置中的新值时,它将尝试更新(在计划中用 ~
表示),或者先删除然后再创建(在计划中用 [= 表示) 12=]).
在这种情况下,您已在资源架构中将 false
分配给 ForceNew
。您还没有定义 Update
函数。结果将是提供者将无法更改现有资源以匹配配置中的新值。
要解决此问题,您必须将 ForceNew
指定为 true
(这将强制 Delete/Create 更改资源),或者定义一个更新函数来更改现有的资源属性而不删除它并创建一个新的。您可以在资源模式中指定更新功能,如:
&schema.Resource {
Update: <name of update function>,
...
}
请注意,如果您使用的是插件 sdk 版本 2,则应该改为 UpdateContext
。
这是我的资源 tf 架构:
Schema: map[string]*schema.Schema{
"config_sensitive": {
Type: schema.TypeMap,
Optional: true,
ForceNew: false,
Sensitive: true,
Description: "Sensitive part of connector configuration. String keys and values",
},
当我尝试编译它时,我 运行 变成:
resource ...: No Update defined, must set ForceNew on:
[]string{"config_sensitive"}
.
有没有办法在不设置 ForceNew: true
的情况下消除此错误(我不知道 Update
到底是什么)?
在 Terraform 中,当配置中的资源参数根据状态中的当前值传递不同的值,并且根据状态存在相应的资源时,提供者必须尝试更改现有资源以匹配配置中的新值。模式中定义了各种函数来支持资源,但最基本的是存在相应的函数来支持四种基本操作:创建、读取、更新和删除。当 Terraform 提供程序尝试更改资源以匹配配置中的新值时,它将尝试更新(在计划中用 ~
表示),或者先删除然后再创建(在计划中用 [= 表示) 12=]).
在这种情况下,您已在资源架构中将 false
分配给 ForceNew
。您还没有定义 Update
函数。结果将是提供者将无法更改现有资源以匹配配置中的新值。
要解决此问题,您必须将 ForceNew
指定为 true
(这将强制 Delete/Create 更改资源),或者定义一个更新函数来更改现有的资源属性而不删除它并创建一个新的。您可以在资源模式中指定更新功能,如:
&schema.Resource {
Update: <name of update function>,
...
}
请注意,如果您使用的是插件 sdk 版本 2,则应该改为 UpdateContext
。