HashiCorp發(fā)布了0.8版的Terraform。Terraform是一個開源工具,它能通過亞馬遜網(wǎng)頁服務(wù)、VMware vSphere和UltraDNS等基礎(chǔ)設(shè)施供應(yīng)商構(gòu)建、組合和發(fā)布可編程基礎(chǔ)設(shè)施。主要的新功能包括交互式控制臺、條件值、HashiCorp Vault和Nomad供應(yīng)器等。
Terraform 0.8版除原有的terraform控制臺之外,還新增加了一個交互式控制臺,它可以用于嘗試插值,以及檢查基礎(chǔ)設(shè)施。HashiCorp的博客表示,對于不熟悉Terraform的開發(fā)者來說,控制臺是一個非常棒的附加學(xué)習(xí)資源,因為插值(任何你想放入TerraForm配置屬性的東西)可以被輸入控制臺,然后就可以看到它產(chǎn)生的輸出了??刂婆_目前只讀,這是為了防止任何對基礎(chǔ)設(shè)施或狀態(tài)的不小心誤改。
插值現(xiàn)在支持基本的條件判斷,它支持對值進行條件賦值,比如在一個資源的元參數(shù)里。當(dāng)與資源的“count”參數(shù)結(jié)合起來時,這樣就可以支持對資源的條件性包含,比如 ‘count = “${var.env == “production” ? 1 : 0}”。這個例子的意思是,通過將變量“env”設(shè)置成非“production”的某個值,那么相關(guān)的資源數(shù)量就會是0,因此它不會被創(chuàng)建。Terraform支持以下邏輯運算符: 相等判斷==和!=,數(shù)字比較>、<、>=和<=,還有布爾運算符&&、||和!(一元運算)。
在Terraform0.8版本里,現(xiàn)在也可以指定對Terraform版本的限制了,方法是使用Terraform配置元參數(shù)“required_version”,比如“required_version >=0.8,<0.9”。HashiCorp的博客指出,添加這個功能的目的在于避免Terraform程序版本和Terraform配置之間的不一致,并且可以被用于某些場景,舉例來說,某些缺陷已經(jīng)在較新的版本中修復(fù)了,但是卻有可能對現(xiàn)有的基礎(chǔ)設(shè)施造成問題,那么加上這個參數(shù)就可以限制對版本的要求,從而避免意外的損壞。如果Terraform版本不能與要求的版本相匹配,Terraform將在很早的階段就輸出錯誤,通知用戶他們必須改變他們的Terraform版本,才能夠與配置一起正常工作。
創(chuàng)建和更改基礎(chǔ)設(shè)施通常需要若干不同的憑據(jù),例如API訪問令牌和數(shù)據(jù)庫管理密碼等,而且存儲這些憑據(jù)的最好的地方就是一個安全的秘密管理工具。Terraform Vault供應(yīng)器允許Terraform 去讀取Vault、寫入Vault和配置Vault,Vault就是HashiCorp的管理秘密的工具。
Terraform的文檔中聲明,Vault供應(yīng)器目前只支持一般性的秘密的后臺,但這已經(jīng)可以滿足兩種常見的初級用例了:(1)配置和填充Vault:Vault管理員可以使用Terraform去配置Vault,再用秘密填充它;(2)在Terraform配置中使用Vault憑證:憑證可以從Vault中獲取,這意味著為了獲得訪問其他供應(yīng)商的臨時租約,運維人員或者運行Terraform的系統(tǒng)只需要訪問一個賦予了適當(dāng)權(quán)限的Vault令牌即可。
還有一點需要特別注意的是,Terraform的Vault供應(yīng)器文檔中提到,在Terraform中與Vault交互時,任何你讀或?qū)懙拿孛芏紩槐4嬖赥erraform的狀態(tài)文件中,同時還會保存在任意生成的計劃文件中。所以對于任意讀寫Vault秘密的Terraform模塊來說,這些文件都應(yīng)被視為非常敏感的文件,因此需要被保護起來。此外,對于通過配置文件提供的秘密來說,目前Terraform沒有提供任何編輯或保護它們的機制,因此相應(yīng)地,對于選擇使用Terraform去填充Vault秘密的團隊來說,他們應(yīng)該仔細閱讀每個資源的文檔的相關(guān)章節(jié),了解這些秘密是如何被保存到狀態(tài)中的,并且仔細考慮這樣的做法是否滿足他們公司的安全策略要求。
新的Nomad供應(yīng)器允許Terraform為HashiCorp Nomad分布式調(diào)度器創(chuàng)建作業(yè),它必須作為基礎(chǔ)設(shè)施創(chuàng)建過程的一部分運行。這里的用例主要是系統(tǒng)作業(yè)或者批量初始化作業(yè)。HashiCorp博客表示,這一新功能并不是在試圖完全取代Nomad的運行,但Terraform可以用來引導(dǎo)一個集群以及相關(guān)的應(yīng)用。
Terraform 0.8版本也有幾點與Terraform 0.7不能向后兼容的地方,HashiCorp團隊建議開發(fā)者們認真查看升級指南。升級指南詳細描述了版本之間不兼容的細節(jié),以及在升級到0.8版本時所需要考慮的細節(jié)。
要了解更多關(guān)于HashiCorp Terraform v0.8發(fā)布的細節(jié),可以查看HashiCorp的博客。在HashiCorp網(wǎng)站上可以下載Terraform二進制文件,并且在項目的GitHub庫可以找到Terraform的代碼(主要用Golang寫成)。
閱讀英文原文:HashiCorp Release Terraform 0.8, Including an Interactive Console, and Vault and Nomad Providers