为了账号安全,请及时绑定邮箱和手机立即绑定

id 是保留的字段名称

id 是保留的字段名称

Go
德玛西亚99 2022-09-05 17:20:06
我正在为terraform编写一个提供程序以与API接口,这是我拥有的资源架构:&schema.Resource{        Create: resourceProjectCreate,        Read:   resourceProjectRead,        Update: resourceProjectUpdate,        Delete: resourceProjectDelete,        Importer: &schema.ResourceImporter{            State: schema.ImportStatePassthrough,        },        CustomizeDiff: customdiff.Sequence(            customdiff.ComputedIf("slug", func(d *schema.ResourceDiff, meta interface{}) bool {                return d.HasChange("name")            }),        ),        Schema: map[string]*schema.Schema{            "name": {                Type:     schema.TypeString,                Required: true,                ValidateFunc: validateName,            },            "description": {                Type:     schema.TypeString,                Optional: true,            },            "issueManagementEnabled": {                Type:     schema.TypeBool,                Required: true,            },            "forkedFromId": {                Type:     schema.TypeInt,                Required: false,            },        },    }没有编译或安装错误,我正在本地尝试此操作,因此我已设置指向我的go bin文件夹。go install.terraformrcTerraform似乎在某处找到了一个id,并抱怨道:Error: Internal validation of the provider failed! This is always a bugwith the provider itself, and not a user issue. Please reportthis bug:1 error occurred:    * resource onedev_project: id is a reserved field name代码在这里 https://github.com/UbiquitousBear/terraform-provider-onedev。有谁知道我应该在哪里删除对的引用?它不在资源架构中。id
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您的文件表明您使用的是 SDK 版本 1.17.2,其中 id 确实记录为保留属性名称go.mod

但是,它似乎不再出现在最新的 SDK 版本 2.6.1 中。此策略似乎因问题 #607 而发生了变化,并且该更改首次在 SDK 版本 v2.1.0 中发布。

虽然我无法解释为什么您共享的代码会引起该错误,但您可以通过升级到最新的SDK版本来避免此问题。由于它是一个新的主要版本,因此可能需要在API中的其他地方考虑一些重大更改。有一个Terraform SDK v2升级指南,其中描述了这些更改,还包括一个指向tf-sdk-migrator工具的链接,该工具具有一些自动化功能来帮助升级。


查看完整回答
反对 回复 2022-09-05
?
四季花海

TA贡献1811条经验 获得超5个赞

此问题有一个解决方法,无需升级到 SDK v2,您可以尝试在架构上指定其他名称,例如“id1”而不是“id”


"id1": {

                Type:        schema.TypeInt,

                Optional:    true,

                Description: "",

            },

并将此属性的值解析到您的结构上


c.ID = d.Get("id1").(int)

并尝试构建。


现在唯一的缺点是您需要在hcl文件中提及“id1”而不是“id”。


这对我有用,但仍然升级到SDKv2是更好的解决方案


查看完整回答
反对 回复 2022-09-05
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号