有些時候在建立資源的時候,會用到一些資料,比如在建立ecs的時候,我可能會用到一些鏡像。這個我們可以去浏覽雲供應商提供的文檔去查詢,其實我們也可以通過provider來拿到。
provider裡面是有這些資料的,provider裡面其實是由兩部分組成的,提供了兩部分資料。一部分是resource資源,每個磁盤,每個域名都是資源。
這些data source都是通過provider幫我們內建好的。隻要在tf裡面使用了provider之後,都可以通過data格式去定義我們的資料源。
資料源說白了就是雲供應商為我們提供的資料。
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:
and i386
.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:
and windows
.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}"
}
上面就是資料源的定義,簡單了解就是雲端的鏡像清單,作業系統,磁盤種類這些都可以在這裡拿到。
output就是将值傳遞出去。
可以看到所有鏡像的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裡面去引用