Terraform Plugin Framework 現已正式發布

infoq 發佈 2023-01-28T17:23:37.722337+00:00

作者 | Matt Campbell譯者 | 劉雅夢策劃 | 丁曉昀HashiCorp發布了Terraform Plugin Framework的 1.0 版本。該框架改進並取代了Terraform Plugin SDKv2。

作者 | Matt Campbell

譯者 | 劉雅夢

策劃 | 丁曉昀

HashiCorp發布了Terraform Plugin Framework的 1.0 版本。該框架改進並取代了Terraform Plugin SDKv2。它包括對驗證器、路徑表達式、嵌套屬性、資源私有狀態管理和自定義類型的支持。新框架中的提供者程序是用 Go 編寫的可執行二進位文件。


Terraform 插件通過 RPC(遠程過程調用)與 Terraform Core 一起工作。插件可用於公開特定服務(如雲資源、SaaS 平台或 API)的實現。根據Brian Flad、Dave Parfitt和Vishnu Ravindra 的說法,新框架是對之前的 Terraform Plugin SDKv2 的改進包括:


插件框架的代碼更易於維護和未來驗證,它將作為未來 Terraform 插件開發特性和工具的基礎。


該版本包括許多預構建的驗證器,它們可以向用戶提供關於語法、類型和可接受值的反饋。例如,用於檢查字符串長度或確保數字在有效範圍內的驗證器。預構建的驗證器可以在 Go 模塊 terraform-plugin-framwork-validators中找到。


可以使用框架定義的泛型類型對屬性進行驗證。Validators 欄位應該提供一個驗證列表,如下例所示:

schema.StringAttribute{
    //……其他屬性配置……
    Validators: []validator.String{
        // 這些是來自terraform-plugin-framework-validators的示例驗證器
        stringvalidator.LengthBetween(10, 256),
        stringvalidator.RegexMatches(
            regexp.MustCompile(`^[a-z0-9]+$`),
            "must contain only lowercase alphanumeric characters",
        ),
    },
}

路徑表達式允許將屬性之間的關係指定為相對路徑。這些可以表示模式或基於模式的數據內的一個或多個實際路徑。相對路徑表達式是使用path.MatchRelative()函數啟動的。


資源私有狀態管理允許數據與狀態一起存儲,但會在 Terraform 計劃中刪除。HashiCorp 建議,這可以用於存儲和檢索不需要向用戶顯示的值,例如 API 調用的 ETag。提供者程序能夠在創建、導入、規劃、讀取和更新操作期間保存這些數據。可以在執行刪除、計劃、讀取和更新等操作期間讀取數據。私有狀態數據可以使用 GetKey 函數讀取:

func (r *resourceExample) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
    
    value, diags := req.Private.GetKey(ctx, "key")
    
    resp.Diagnostics.Append(diags...)
    
    if value != nil {
        //值為[]byte.
        ... 
    }
}

雖然還會繼續支持 Terraform Plugin SDKv2,但 HashiCorp 已經表示,新的 Terraform Plugin Framework 將會獲得新功能和工具的優先權。可以使用遷移指南將插件從 Terraform Plugin SDKv2 遷移到新的 Terraform Plugin Framework。


基於插件框架的提供者程序可以向後兼容 Terraform 0.12 及更高版本。也可以選擇使用新的Terraform Plugin Protocol版本 6。這將允許訪問 Terraform 1.x 版本中的最新功能。有關該版本的更多詳細信息,可以在博客文章或快速上手頁面上找到。


作者介紹:

Matt 領導 InfoQ 的 DevOps 編輯團隊。他是教育技術公司 D2L 的雲平台副總裁,負責其基礎設施和雲平台團隊。他關注的領域是 DevOps 和 SRE,並在企業規模上實施這些。


原文連結:

HashiCorp Terraform Plugin Framework Now Generally Available


相關閱讀:

Terraform 1.3,簡化重構體驗

Cloud Development Kit:使用TypeScript和Python生成Terraform配置

如何將基礎設施自動導入 Terraform ?

關鍵字: