天天看點

Terraform DataSource 資料源

Terraform DataSource 資料源
Terraform DataSource 資料源

有些時候在建立資源的時候,會用到一些資料,比如在建立ecs的時候,我可能會用到一些鏡像。這個我們可以去浏覽雲供應商提供的文檔去查詢,其實我們也可以通過provider來拿到。

provider裡面是有這些資料的,provider裡面其實是由兩部分組成的,提供了兩部分資料。一部分是resource資源,每個磁盤,每個域名都是資源。

這些data source都是通過provider幫我們內建好的。隻要在tf裡面使用了provider之後,都可以通過data格式去定義我們的資料源。

資料源說白了就是雲供應商為我們提供的資料。

Terraform DataSource 資料源

​​Terraform Registry​​

這裡的鏡像就是建立ecs的時候我們選擇的鏡像,我們在選鏡像的時候也不知道鏡像對應的ID是多少,這個其實可以通過provider裡面去查到。

data "alicloud_images" "images_ds" {
  owners     = "system"
  name_regex = "^centos_6"
}

output "first_image_id" {
  value = "${data.alicloud_images.images_ds.images.0.id}"
}      

通過data定義資料源,然後裡面的屬性是幫助我們去篩選資料的,因為鏡像有很多種類型,可能來自于公共市場,也有可能自己定義的,還有系統,阿裡這邊提供的。

按照名稱分類還要分為不同的版本,比如centos 7,centos 8版本。

是以需要篩選資料。

篩選完資料如何去引用呢?這裡output也是變量的一種類型,叫做輸出變量。在學程式設計語言的時候有輸入和輸出,return函數傳回值,這裡output就可以了解為函數的傳回,這裡輸出就是列印這個值,而且還可以提供為其他子產品調用這些值。

這裡output就是為了驗證我們拿到的資料,也就是鏡像源裡面的鏡像。

provider裡面有很多很多的資料源,我們都可以去使用,這裡文法是以data關鍵字開頭的,然後後面是它的類型,最後語句塊裡面就是篩選的條件參數了。

  • ​​architecture​​​ - (Optional, Available in 1.95.0+) The image architecture. Valid values: ​

    ​i386​

    ​​ and ​

    ​x86_64​

    ​.
  • ​​name_regex​​ - (Optional) A regex string to filter resulting images by name.
  • ​​owners​​​ - (Optional) Filter results by a specific image owner. Valid items are ​

    ​system​

    ​​, ​

    ​self​

    ​​, ​

    ​others​

    ​​, ​

    ​marketplace​

    ​.
  • ​​output_file​​​ - (Optional) File name where to save data source results (after running ​

    ​terraform plan​

    ​).(阿裡雲特性,可以将輸出寫到檔案裡面)

​​status​​​ - (Optional, Available in 1.95.0+) The status of the image. The following values are available, Separate multiple parameter values by using commas (,). Default value: ​

​Available​

​. Valid values:

  • ​​Available​​: The image is available.(鏡像是否可用)
  • ​​os_type​​​ - (Optional, Available in 1.95.0+) The operating system type of the image. Valid values: ​

    ​windows​

    ​​ and ​

    ​linux​

    ​.
data "alicloud_images" "images_ds" {
  owners     = "system"
  name_regex = "^centos_7"
  architecture = "x86_64"
  status = "Available"
  os_type = "linux"
  output_file = "./output.json"
}

output "first_image_id" {
   value = "${data.alicloud_images.images_ds.images.*.id}"
}      

上面就是資料源的定義,簡單了解就是雲端的鏡像清單,作業系統,磁盤種類這些都可以在這裡拿到。

Terraform DataSource 資料源

output就是将值傳遞出去。

Terraform DataSource 資料源

可以看到所有鏡像的id都可以拿到,這些鏡像都是我們篩選的結果。

兩種列印方式,一種通過輸出檔案的方式,另外一種是通過列印到終端。

value = "${data.alicloud_images.images_ds.images}"  拿到全部鏡像

value = "${data.alicloud_images.images_ds.images.0.id}"      

拿到所有鏡像的id 

value = "${data.alicloud_images.images_ds.images.*.id}"      

在ecs裡面去引用

Terraform DataSource 資料源