我的 Azure 訂閱中有很多資源。我想用 terraform 管理它們,所以我想用terraform import. 我逐一手動匯入每個資源。然后我運行terraform plan并檢查是否沒有要報告的更改,即當前基礎結構是否與配置匹配。
這是否意味著如果我通過 Azure 門戶或 cli 手動洗掉某些資源,我將能夠terraform apply完美地重新創建它們,以便它們具有與以前完全相同的配置并以完全相同的方式運行?
uj5u.com熱心網友回復:
一般來說,Terraform不能保證銷毀一個物件并重新創建它會產生一個完全等價的物件。
這是可能的,但它需要一些事情是真實的,包括:
- 您的配置指定資源引數的值與它們在遠程 API 中的值完全相同。例如,如果特定資源型別的名稱不區分大小寫(但保留大小寫),那么提供者通常會在計劃更改時忽略大小寫差異,但它會完全使用您在配置中撰寫的大小寫,可能會選擇不同的名稱.
- 資源型別不包括任何“只寫”引數。某些資源型別具有僅由提供者本身使用的引數,因此即使它們保存在 Terraform 狀態中,它們也不會作為物件的一部分保存在遠程 API 中。
terraform import因此不能將它們重新填充到狀態中,因為除了 Terraform 狀態之外沒有其他地方可以讀取它們。 - 在任何情況下,提供者都不會將省略的引數視為“忽略遠程系統中的值”而不是“取消設定遠程系統中的值”。一些提供者對某些引數有特殊的例外,在這些引數中,將它們保留為未設定允許它們在遠程 API 中“漂移”而無需 Terraform 修復它們,但是如果您使用任何以這種方式運行的資源型別,那么存盤在遠程系統中的值將是當您洗掉遠程物件時丟失,并且 Terraform 將無法恢復該值,因為它未在您的 Terraform 配置中表示。
hashicorp/azurerm供應商在上面的串列中有很多情況 3 的例子。例如,如果您有一個azurerm_virtual_network不包含任何subnet塊的資源,那么提供者將不會建議洗掉任何現有的子網,即使配置表明不應有子網。但是,如果您洗掉虛擬網路然后要求 Terraform 重新創建它,那么 Terraform 配置沒有應該存在哪些子網的記錄,因此它會建議創建一個根本沒有子網的網路。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/534651.html
