首页 > 后端开发 > Golang > 正文

Terraform Provider Development:即使更新失败,tfstate 也会更新

PHPz
发布: 2024-02-10 20:00:09
转载
1118人浏览过

terraform provider development:即使更新失败,tfstate 也会更新

php小编苹果在Terraform Provider开发中,我们经常会遇到更新失败的情况。但是,即使更新失败,tfstate文件也会被更新。这是因为Terraform使用tfstate文件来跟踪资源的状态和配置信息。无论是创建、更新还是删除资源,Terraform都会在tfstate文件中记录下相应的状态。这种设计可以确保即使在更新过程中出现问题,我们仍然可以通过tfstate文件来获取最新的资源状态,从而保证了一致性和可靠性。

问题内容

所以我很好奇如何开发 terraform 提供程序,并遇到了一个我无法解释的问题。

我的 CRUD 非常简单,我创建资源并在生命周期内更新其元数据,然后在销毁命令中删除它。

func resourceCreate(d *schema.ResourceData, m any) error {
    id, err := uuid.GenerateUUID()
    if err != nil {
        return err
    }

    d.SetId(id)
    return nil
}

func resourceRead(d *schema.ResourceData, m any) error {
    return nil
}

func resourceUpdate(d *schema.ResourceData, m any) error {
    return errors.New("failed")
}

func resourceDelete(d *schema.ResourceData, m any) error {
    d.SetId("")
    return nil
}
登录后复制

正如您所看到的,更新函数返回错误,这是我的问题。我故意使进程失败,但 tfstate 仍然更新(我正在更改资源声明中的一个变量以查看此更改)。

这是完整的资源声明

func demoResource() *schema.Resource {
    return &schema.Resource{
        Description: "descr",
        Create: resourceCreate,
        Read:   resourceRead,
        Update: resourceUpdate,
        Delete: resourceDelete,

        // CreateContext: demoResCreate,
        // ReadContext:   demoResRead,
        // UpdateContext: demoResUpdate,
        // DeleteContext: demoResDelete,
        Timeouts: &schema.ResourceTimeout{
            Create: schema.DefaultTimeout(10 * time.Minute),
            Update: schema.DefaultTimeout(10 * time.Minute),
            Delete: schema.DefaultTimeout(10 * time.Minute),
        },

        Schema: map[string]*schema.Schema{
            "name": {
                Type:        schema.TypeString,
                Required:    true,
                Description: "name",
            },
        },
    }
}
登录后复制

我错过了什么?我认为更新操作失败后不应更新 tfstate,但确实如此。我尝试了 CRUD 和 CRUDContext 方法,在这两种情况下它的行为都是相同的。

双轨制会员管理系统 v9.1
双轨制会员管理系统 v9.1

双轨制会员管理系统是一个以asp+access进行开发的双轨制直销系统源码,要求很低,容易维护。 后台路径:/admin 后台用户名和密码均为:admin 9.1版更新内容: 1、增加了操作余额前自动备份数据库,如果操作成功,则自动删除备份的数据库;如果操作有页面错误导致不成功,则会自动恢复到备份的数据库。这样运行过程中,即使是程序错误,也不用担心数据丢失了。 2、增加会员登录首

双轨制会员管理系统 v9.1 843
查看详情 双轨制会员管理系统 v9.1

P/S/ terraform版本 Terraform v1.6.5,用于提供商开发使用hashicorp/terraform-plugin-sdk/v2/

解决方法

根据博客文章,这似乎是预期的行为:一个>

“如果 Update 回调返回时有或没有错误,则保存完整状态。”

另外,我发现了一些真实的工作示例,它们都在 Update 中返回 Read 回调。

Cloudflare 提供商 例如,GitHub 提供商

他们都这样做:

func resourceCloudflareAccountMemberUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {

    return resourceCloudflareAccountMemberRead(ctx, d, meta)
}
登录后复制

以上就是Terraform Provider Development:即使更新失败,tfstate 也会更新的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号