天天看點

Terraform 文法 變量的使用

Terraform 文法 變量的使用

變量分為兩種類型,一種為輸入變量,另外一種為輸出變量。

Terraform 文法 變量的使用

之前在寫tf的模闆檔案的時候用了很多變量,比如在寫認證資訊的時候,定義的變量存放了阿裡雲的ak和sk,最後就是region的資訊。

變量的使用都是使用variable關鍵字,後面跟上變量的名稱,塊裡面有變量的類型。

隻需要将子產品當中經常變化的部分聲明為變量,類似于shell。

這些變量也可以跨不同的子產品去共享,比如像region資訊,當我們有多個子產品的時候,既然在同一個region下面,我們就不需要聲明很多這種變量了,這樣可以實作組合和重用。

可以從終端讀取,通過export聲明的變量。

tf會去讀取檔案裡面的變量,預設讀取的檔案terraform.tvars,當項目裡面有這個檔案,那麼tf在執行的時候會以這裡面的變量去讀取。

Terraform 文法 變量的使用

 在UI當中顯示,就是在tf終端當中列印出來的資訊,有很多變量我們可以讓它不展示出來,這個是個布爾值,如果是true就不展示。可以看到,引用了該變量,在plan下面該變量被列印出來了。

Terraform 文法 變量的使用
Terraform 文法 變量的使用

變量參數類型還是很多的,之前在其他語言裡面聲明了變量,可能是字元串,或者是一個數值,或者是一個布爾值,甚至是any包含了下面的任意對象。

list 清單 裡面是類型,如果是string,那麼就是字元串清單。

set 序列。object是自定義的對象。

Terraform 文法 變量的使用

比如要配置dns的資料,dns域名裡面可能定義了多個環境,每個環境它的域名可能都不太一樣。

那麼我們根據key去定義環境,value就是每個環境定義的域名。

上面圖檔注意,一個是聲明變量,另外一個是定義變量,那麼tf才能讀取進來。

圖檔左邊是聲明變量,右邊是定義變量。

Terraform 文法 變量的使用

list類型是一個清單,可以說是個數組,通過list可以定義具有相同意義的值。

list裡面調用值就是通過索引去調用。

output "my_env" {
  value = var.env_list[0]
}      
Terraform 文法 變量的使用

object就是一個對象了,這個是自定義的對象。你可以自定義一些屬性,它的類型和它的值。

那麼建立ecs的時候就可以傳遞這個變量了,在調用的時候就和map是一樣的。

image_id                   = var.ecs_info.esc_image
  instance_name              = var.ecs_info.ecs_name
  vswitch_id                 = alicloud_vswitch.vsw.id      
+ image_id                           = "centos_7_04_64_20G_alibase_201701015.vhd"
      + instance_charge_type               = "PostPaid"
      + instance_name                      = "my_ecs"      
Terraform 文法 變量的使用

上面就是變量的優先級了,可以在環境變量裡面設定變量,還可以在tfvars裡面設定變量。如果是使用json寫的,那麼可以建立tfvars.json。

然後下面是可以覆寫的變量。

最後可以在指令行裡面傳遞變量。

Terraform 文法 變量的使用

 在執行tf部署的時候,傳遞一個變量是region,可以通過-var,如果是傳遞很多變量,那麼就寫多個-var,變量類型有很多,比如list類型,注意使用單引号引用起來。

可能将變量寫到檔案裡面,但是它的檔案名稱不叫terraform.tfvars,它可能叫dev.tfvars,也是我自己定義的檔案。這個時候就需要通過-var-file參數進行指定。

最後就是環境變量,所有變量都是以TF_VAR開頭,這個時候tf在讀取環境變量的時候認為它是tf的變量,加載這裡面的值。

Terraform 文法 變量的使用