Terraform DataSource 数据源_terraform

Terraform DataSource 数据源_数据源_02

有些时候在创建资源的时候,会用到一些数据,比如在创建ecs的时候,我可能会用到一些镜像。这个我们可以去浏览云供应商提供的文档去查询,其实我们也可以通过provider来拿到。

provider里面是有这些数据的,provider里面其实是由两部分组成的,提供了两部分数据。一部分是resource资源,每个磁盘,每个域名都是资源。

这些data source都是通过provider帮我们集成好的。只要在tf里面使用了provider之后,都可以通过data格式去定义我们的数据源。

数据源说白了就是云供应商为我们提供的数据。

Terraform DataSource 数据源_ide_03

​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 数据源_数据_04

output就是将值传递出去。

Terraform DataSource 数据源_ide_05

可以看到所有镜像的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 数据源_terraform_06

所有数据源的定义都需要去看官方文档,它的格式就是data,后面类型加上名称,最后就是筛选数据的一些参数。参数越多也就是条件越多,可能赛选出来就更加精确。

输出可以输出到json文件里面,另外可以输出到终端。

Terraform DataSource 数据源_ide_07