[英]id is a reserved field name
我正在為 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 install
沒有編譯或安裝錯誤,我正在本地嘗試,所以我設置了.terraformrc
指向我的 go bin 文件夾。
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
的引用? 它不在資源架構中。
您的go.mod
文件表明您使用的是 SDK 版本 1.17.2,其中id
確實記錄為保留屬性 name 。
但是, 它似乎不再出現在最新的 SDK 版本 2.6.1中。 由於issue #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 是更好的解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.