HashiCorp發布了最新的基礎架構即程式碼工具Terraform 0.12,這個版本對語言進行了大幅度的修改,官方希望增加配置的可讀性,並提高可重用模組的可用性,增加的功能包含新的表示式語法、通用類型系統(Generalized Type System)以及迭代建構(Iteration Constructs)等。官方提醒,這個版本進行諸多修改,與先前版本不相容。

Terraform使用大量的表達式在資源之間傳遞配置,而且在表達式中的引用,會被用來創建決定操作步驟的相依圖(Dependency Graph),在之前的版本,Terraform要求所有文字表達都需要以字串的形式表達,但從Terraform 0.12開始,官方修改了表達式的語法,開始允許表達式在任何情況下直接使用,不需要再使用字串內插補點語法。官方提到,隨著表達式和配置越來越複雜,新的語法能夠增加可讀性。

之前版本:

Terraform 0.12

而Terraform 0.12新加入的通用類型系統,能讓模組之間傳遞物件更加方便。Terraform一開始的版本主要使用字串運作,後來版本陸續加入Lists與Maps資料結構,不過由於初始的語言功能並不支援,使得這兩個資料結構並不好用,尤其是在模組組合模式(Module Composition Patterns)的時候,所有必要的屬性都需以單獨的參數值輸出與輸入,而現在通用類型系統提供了額外傳遞物件以及數值的方式,可以將整個物件列表做為一個整體傳遞。

之前版本:

Terraform 0.12:

另一個資料結構在過去版本不好用的原因,則是缺乏通用的迭代建構方法,無法進行Lists與Maps轉換,現在Terraform 0.12加入了for運算子,就能夠透過映射或是過濾輸入元素,建置另一個集合。

而過去Terraform會將執行計畫簡化輸出成鍵值配對,而在巢狀模組中會難以讓使用者了解確切更改的地方,現在Terraform 0.12添加了全新的計畫渲染器,並且與新的類型系統整合,以配置語言的行事顯示變更,並且能以縮排顯示巢狀結構。

Terraform 0.12也大大改進了錯誤消息內容,能更好地顯示配置錯誤與其他潛在問題,官方提到,過去的錯誤訊息品質不一,經常性地缺少上下文,導致使用者即便收到錯誤訊息,也難以理解真正問題發生的原因,而且訊息內使用的術語也不一致,新的Terraform 0.12錯誤訊息現遵循可預測的結構,定義了錯誤訊息需包含的所有資訊,同時也統一了用語。

官方提醒,由於這個版本的語法進行了極大程度的修改,勢必無法與之前版本完全相容,雖然大致相容於Terraform 0.11,但部分的語法改進需要更嚴謹的解析器與語言模型,以消除歧異或是讓錯誤訊息提供更好的回饋。另外,現在包括PaaS、SaaS以及AWS、GCP、Azure等IaaS供應商,尚未提供相容於Terraform 0.12的服務,但官方已經發布了最新的供應商開發者指南,加速幫助供應商提供Terraform 0.12服務。


Advertisement

更多 iThome相關內容