【问题标题】:How can I fix "No Update defined, must set ForceNew on" in terraform?如何在 terraform 中修复“未定义更新,必须设置 ForceNew”?
【发布时间】:2021-10-25 01:24:49
【问题描述】:

这是我的资源 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 ...:未定义更新,必须将 ForceNew 设置为:[]string{"config_sensitive"}

有没有办法在不设置ForceNew: true 的情况下摆脱这个错误(我不知道Update 到底是什么)?

【问题讨论】:

  • 错误信息表明您必须为资源定义一个更新函数,否则您必须将ForceNew 指定为true,因为这将强制使用关联函数执行删除/创建操作。您选择两者中的哪一个取决于 API 功能,但资源必须具有定义的更新或删除/创建功能。
  • 我明白了,您能否将其发布为评论,以便我批准您的回答?
  • 转换为答案。

标签: terraform terraform0.12+


【解决方案1】:

在 Terraform 中,当配置中的资源参数根据状态中的当前值传递不同的值,并且根据状态存在相应的资源时,提供者必须尝试更改现有资源以匹配新值在配置中。架构中定义了各种函数来支持资源,但最基本的是存在相应的函数来支持四种基本操作:创建、读取、更新和删除。当 Terraform 提供程序尝试更改资源以匹配配置中的新值时,它将尝试更新(在计划中由 ~ 表示),或在删除后执行创建(在计划中由 -/+ 表示) .

在这种情况下,您已在资源架构中将 false 分配给 ForceNew。您还没有定义Update 函数。结果将是提供者将无法更改现有资源以匹配配置中的新值。

要解决此问题,您必须将ForceNew 指定为true(这将强制删除/创建更改资源),或者定义更新函数来更改现有资源属性而不删除它并创建一个新的一个。您可以在资源架构中指定更新函数,例如:

&schema.Resource {
  Update: <name of update function>,
  ...
}

请注意,如果您使用的是插件 sdk 版本 2,那么它应该改为 UpdateContext

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 2015-09-25
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2014-07-23
    相关资源
    最近更新 更多