猿问

id 是保留的字段名称

我正在为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.terraformrc


Terraform似乎在某处找到了一个id,并抱怨道:


Error: Internal validation of the provider failed! This is always a bug

with the provider itself, and not a user issue. Please report

this bug:


1 error occurred:

    * resource onedev_project: id is a reserved field name

代码在这里 https://github.com/UbiquitousBear/terraform-provider-onedev。有谁知道我应该在哪里删除对的引用?它不在资源架构中。id


德玛西亚99
浏览 118回答 2
2回答

白衣染霜花

您的文件表明您使用的是 SDK 版本 1.17.2,其中 id 确实记录为保留属性名称。go.mod但是,它似乎不再出现在最新的 SDK 版本 2.6.1 中。此策略似乎因问题 #607 而发生了变化,并且该更改首次在 SDK 版本 v2.1.0 中发布。虽然我无法解释为什么您共享的代码会引起该错误,但您可以通过升级到最新的SDK版本来避免此问题。由于它是一个新的主要版本,因此可能需要在API中的其他地方考虑一些重大更改。有一个Terraform SDK v2升级指南,其中描述了这些更改,还包括一个指向tf-sdk-migrator工具的链接,该工具具有一些自动化功能来帮助升级。

四季花海

此问题有一个解决方法,无需升级到 SDK v2,您可以尝试在架构上指定其他名称,例如“id1”而不是“id”"id1": {                Type:        schema.TypeInt,                Optional:    true,                Description: "",            },并将此属性的值解析到您的结构上c.ID = d.Get("id1").(int)并尝试构建。现在唯一的缺点是您需要在hcl文件中提及“id1”而不是“id”。这对我有用,但仍然升级到SDKv2是更好的解决方案
随时随地看视频慕课网APP

相关分类

Go
我要回答