HCL是Terraform的配置语言,它是HashiCorp发明的一种声明式语言,能够以更加简短和人性化的方式来描述资源。本文主要介绍HCL配置语言的基本语法及使用,语法采用当前最新版本0.12。
HCL文件以.tf结尾,Terraform执行时会读取该目录下所有的HCL文件。由于HCL是声明式语言,因此对资源和变量的引用不依赖于定义的顺序。通常tf文件包含provider,resource和data source,例如下面的代码创建一个cvm实例:
provider "tencentcloud" {
secret_id = "xxxxxxxxxxxxx"
secret_key = "xxxxxxxxxxxxx"
region = "ap-guangzhou"
}
data "tencentcloud_image" "my_favorate_image" {
os_name = "centos"
filter {
name = "image-type"
values = ["PUBLIC_IMAGE"]
}
}
resource "tencentcloud_instance" "my_awesome_app" {
instance_name = "test"
availability_zone = "ap-guangzhou-3"
image_id = data.tencentcloud_image.my_favorate_image.image_id
instance_type = "S3.SMALL1"
system_disk_type = "CLOUD_PREMIUM"
system_disk_size = 50
hostname = "user"
project_id = 0
internet_max_bandwidth_out = 1
allocate_public_ip = true
}
terraform init
时会根据provider来下载需要使用的插件,默认会从terraform官方仓库下载最新版本的插件,也可以在provider中使用version
来指定版本。string
:字符串类型,由一个或多个Unicode字符组成,例如"hello"。number
: 数字类型,可以表示整数,也可以表示浮点数。bool
:布尔类型,只能是true
或false
。数字类型和布尔类型在配置中都可以自动转换为字符串类型,相反,只要字符串值能代表有效的数字或布尔类型,都可以自动转换。比如true
可以转换为字符串"true"
,"true"
也可以转换为true
。
list
:列表类型,它的所有元素类型必须是相同类型,下标从0开始。当tf文件中表示对象的列表时写法为data_disks {
data_disk_type = "CLOUD_SSD"
data_disk_size = 100
}
data_disks {
data_disk_type = "CLOUD_SSD"
data_disk_size = 100
}
map
: 包含多个key: value
形式。在tf文件中的写法为tags = {
test = "test1"
}
null
:表示空,如果将一个参数设置为null,表示这个参数未填写,Terraform会完全忽略这个参数。null在条件表达式中比较有用,比如当var.test的值为""忽略该字段可以这样写name = var.test == "" ? null : var.testTerraform中resource和data source之间通常会引用属性值,引用方式如下:
<RESOURCE TYPE>.<NAME>.<ARGUEMENT>
引用resource属性,比如引用上面示例中cvm的id,tencentcloud_instance.my_awesome_app.id
。data.<DATA TYPE>.<NAME>
引用data source属性,比如引用上面实例中镜像的id, data.tencentcloud_image.my_favorate_image.image_id
count.index
引用实例的索引tencentcloud_instance.my_awesome_app.data_disks[*].data_size
表示cvm的所有data_disks的data_size所组成的列表terraform支持的运算符包括:
+
, -
, *
, /
, %
, -a
==
, !=
, <
, <=
, >
, >=
||
, &&
, !a
terraform支持条件表达式,表示如果条件为真,结果时true_val, 否则结果为false_val。
condition ? true_val : false_val
以上就是terraform的基本使用语法,更多使用例子可以参考这里。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。