天天看点

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 数据源