脚本模板化
在这个过程中或许你已经发现,上面写的脚本,每次创建不同业务的虚拟机的时候,需要在不同的脚本中去找参数进行修改,这样有一些麻烦,那么有没有办法把脚本模板化呢,答案当然有。
Terraform配置支持变量,具体介绍参考这里 https://www.terraform.io/docs/configuration/variables.html
有了变量后,我们把配置中常变更的属性值定义成变量集中放到一个tf文件,后续其它文件不需要做修改,只需要更改变量文件就可以了
这里以虚拟机规格为例给一个样例,首先定义一个变量
variable "flavor_name" { default = "s2.small.1" description = "Define the flavor name that will be used to create instance"}
在虚拟机资源中引用该变量而不是写死在这里。
resource "huaweicloud_compute_instance_v2" "server_example" { ...... flavor_name = "${var.flavor_name}" ...... }
实现了变量模板化后,在执行terraform命名时可以指定该变量的值来创建不同规格的虚拟机,如下:
terraform apply -var "flavor_name=s1.large.2"
资源批量创建
如前面所说,有了上面的的模板后,基本上模板使用者和创建者角色可以分开了,基础的配置基本也就入门了,80%的case都可以应对了,接下来介绍一些更高级的能力。
首先我们看下如何批量创建相同类型的虚拟机,基础模板和单个虚拟机是一样的,唯一要做两件事情,一是定义count属性(批量资源个数),二是解决名称这类不能重复的问题,大致格式如下:
resource "huaweicloud_compute_instance_v2" "server_example" { ....... count = "2" name = "server_test_${format("%02d",count.index+1)}" ......}
这里count定义了创建两台虚拟机,name属性里使用了 server_test_
作为前缀,后面跟上批量虚拟机序号作为名称来命名。
当执行terraform plan时,系统将看到两个instance资源,一个叫 server_test_01, 另一个叫server_test_02.
如果terraform plan/apply过程中出现错误了怎么定位?
首先设置三个环境变量,linux下命令如下:
export TF_LOG=DEBUGexport TF_LOG_PATH=/var/log/terraform.log #这里是指定日志文件路径export OS_DEBUG=1
再次执行出错的terraform命名后,查看日志文档中ERROR类型错误。它能给你提供非常详细的错误线索。