原簡體中文教程連結: Introduction.《Terraform入門教程》
terrform taint
指令可以手動標記某個 Terraform 管理的資源有"污點",強迫在下次執行 apply 時刪除並重建之。
該指令並不會修改基礎設施,而是在狀態檔案中的某個資源物件上標記污點。當一個資源物件被標記了污點,在下一次 plan 操作時會計畫將之刪除並且重建,apply 操作會執行這個變更。
強迫重建某個資源可以讓你能夠觸發某種副作用。舉例來說,你想重新執行某個預置器操作,或是某些人繞過 Terraform 修改了虛擬機器狀態,而你想將虛擬機器重置。
注意為某個資源標記污點並重建之會影響到所有依賴該資源的物件。舉例來說,一筆 DNS 記錄使用了伺服器的 IP 位址,我們在伺服器上標記污點會導致 IP 改變進而影響到 DNS 記錄。這種情況下可以使用 plan 指令查看變更計劃。
terraform taint [options] ADDRESS
ADDRESS 參數是要標記污點的資源位址。
此命令可以使用如下可選參數:
-allow-missing
:如果宣告該參數,那麼即使資源不存在,指令也會回傳成功(狀態碼0)-backup=path
:寫入備份檔案的路徑,預設為 -state-out
路徑加上 ".backup"後綴。可以透過設定為 "-" 關閉備份-lock=true
:與 apply 類似,不再贅述-lock-timeout=0s
:與 apply 類似,不再贅述-state=path
:要讀寫的狀態檔案路徑。預設為 "terraform.tfstate"。如果啟用了遠端 Backend 則該參數設定無效-state-out=path
:更新後的狀態檔案寫入的路徑。預設等於 -state
路徑。如果啟用了遠端 Backend 則該參數設定無效$ terraform taint aws_security_group.allow_all
The resource aws_security_group.allow_all in the module root has been marked as tainted.
$ terraform taint "module.route_tables.azurerm_route_table.rt[\"DefaultSubnet\"]"
The resource module.route_tables.azurerm_route_table.rt["DefaultSubnet"] in the module root has been marked as tainted.
$ terraform taint "module.couchbase.aws_instance.cb_node[9]"
Resource instance module.couchbase.aws_instance.cb_node[9] has been marked as tainted.
雖然我們推薦模組深度不要超過 1,但我們仍然可以標記多層模組中的資源:
$ terraform taint "module.child.module.grandchild.aws_instance.example[2]"
Resource instance module.child.module.grandchild.aws_instance.example[2] has been marked as tainted.
terraform validate
指令可以檢查目錄下 Terraform 程式碼,只檢查語法文件,不會存取遠端 Backend、Provider 的 API 等遠端資源。
validate
檢查程式碼的語法是否合法且一致,不管輸入變數以及現存狀態。
validate
指令需要已初始化的工作目錄,所有引用的外掛程式與模組都被安裝完畢。如果只想檢查語法而不想與 Backend 交互,可以這樣初始化工作目錄:
$ terraform init -backend=false
terraform validate [options] [dir]
預設情況下 validate
指令不需要任何參數就可以在目前工作目錄下進行檢查。
可使用如下可選參數:
-json
:使用 JSON 格式輸出機器可讀的結果-no-color
:禁止使用彩色輸出terraform untaint
指令可以手動清除一個 Terraform 管理的資源物件上的污點,恢復它在狀態檔案中的狀態。它是 terraform taint
的逆向操作。
此指令不會修改實際的基礎設施資源,只會在資源檔案中清除資源物件上的污點標記。
terraform untaint [options] name
name
參數是要清除污點的資源的資源名稱。此參數的格式為 TYPE.NAME
,例如 aws_instance.foo
。
可使用如下可選參數:
-allow-missing
:如果宣告該參數,那麼即使 name 指定的資源不存在,指令執行也會回傳成功(狀態碼 0)。命令執行仍然可能報錯,但只在發生嚴重錯誤時-backup=path
:寫入備份檔案的路徑。預設為 -state-out
路徑加上 ".backup" 後綴。設定為 "-" 可關閉備份-lock=true
:類似 apply,不再贅述-lock-timeout=0s
:類似 apply,不再贅述-module=path
:資源所在模組的名稱。預設使用根模組。可透過 "." 號分隔的路徑指定模組,例如 "foo" 指定使用 foo 模組,"foo.bar" 指定使用 foo 模組中的 bar 模組-no-color
:類似 apply,不再贅述-state=path
:讀寫的狀態檔案路徑。預設為 "terraform.tfstate"。使用遠端 Backend 時此參數設定無效-state-out=path
:修改後的狀態檔案的寫入路徑。預設使用 -state
參數。使用遠端 Backend 時此參數設定無效terraform workspace
指令可以用來管理目前使用的工作區。我們在狀態管理章節中介紹過工作區的概念。
指令包含一系列子指令,我們將會一一介紹。
terraform workspace list
指令列出目前存在的工作區。
terraform workspace list
此指令會列印出存在的工作區。目前工作會使用*號標記:
$ terraform workspace list
default
* development
jsmith-test
terraform workspace select
指令用來選擇使用的工作區。
terraform workspace select [NAME]
NAME 指定的工作區必須已經存在:
$ terraform workspace list
default
* development
jsmith-test
$ terraform workspace select default
Switched to workspace "default".
terraform workspace new
指令用來建立新的工作區。
terraform workspace new [NAME]
該命令使用給定名字來建立一個新的工作區。不可存在同名工作區。
如果使用了 -state
參數,那麼給定路徑的狀態檔案會被拷貝到新工作區。
此命令支援以下可選參數:
-state=path
:用來初始化新環境所使用的狀態檔路徑建立新工作區:
$ terraform workspace new example
Created and switched to workspace "example"!
You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.
使用狀態檔案建立新工作區:
$ terraform workspace new -state=old.terraform.tfstate example
Created and switched to workspace "example".
You're now on a new, empty workspace. Workspaces isolate their state,
so if you run "terraform plan" Terraform will not see any existing state
for this configuration.
terraform workspace delete
指令被用來刪除已經存在的工作區。
terraform workspace delete [NAME]
被刪除的工作區必須已經存在,並且無法刪除目前正在使用的工作區。如果工作區狀態不是空的,Terraform 會禁止刪除,除非宣告 -force
參數。
如果使用 -force
刪除非空狀態,那麼這些資源餓狀態出於 "dangling",也就是實際基礎設施資源仍然存在,但脫離了 Terraform 的管理。有時我們希望這樣,只是希望目前 Terraform 專案不再管理這些資源,交由其他專案管理。但大多數情況下並非這樣,所以 Terraform 預設會禁止刪除非空白工作區。
此命令可以使用如下可選參數:
-force
:刪除含有非空狀態檔案的工作區。預設為 false
$ terraform workspace delete example
Deleted workspace "example".
terraform workspace show
指令被用來輸出目前使用的工作區。
terraform workspace show
例子:
$ terraform workspace show
development
原簡體中文教程連結: Introduction.《Terraform入門教程》