有些时候在创建资源的时候,会用到一些数据,比如在创建ecs的时候,我可能会用到一些镜像。这个我们可以去浏览云供应商提供的文档去查询,其实我们也可以通过provider来拿到。
provider里面是有这些数据的,provider里面其实是由两部分组成的,提供了两部分数据。一部分是resource资源,每个磁盘,每个域名都是资源。
这些data source都是通过provider帮我们集成好的。只要在tf里面使用了provider之后,都可以通过data格式去定义我们的数据源。
数据源说白了就是云供应商为我们提供的数据。
这里的镜像就是创建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}"
}
上面就是数据源的定义,简单了解就是云端的镜像列表,操作系统,磁盘种类这些都可以在这里拿到。
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里面去引用
所有数据源的定义都需要去看官方文档,它的格式就是data,后面类型加上名称,最后就是筛选数据的一些参数。参数越多也就是条件越多,可能赛选出来就更加精确。
输出可以输出到json文件里面,另外可以输出到终端。
标签:数据源,ds,Terraform,DataSource,output,images,镜像,data,id From: https://blog.51cto.com/u_14035463/5806201