常见函数
Terraform支持丰富的内置函数,用于处理字符串、数值计算、加密,类型转换等操作,我们可以通过函数名称进行调用,其语法如下:
<函数名称>(<参数1>, <参数2> ...)
本文主要对Terraform中常见的函数进行总结并通过样例说明其用法。您可以通过Terraform 官方文档查看完整的函数支持列表。
字符串函数
函数名称 |
函数描述 |
样例 |
运行结果 |
---|---|---|---|
format |
字符串格式化 |
format("Hello, %s!", "Huaweicloud") |
Hello, Huaweicloud! |
lower |
将字符串中的字母转换为小写 |
lower("HELLO") |
hello |
upper |
将字符串中的字母转换为大写 |
upper("hello") |
HELLO |
join |
使用自定义字符将列表拼接成字符串 |
join(", ", ["One", "Two", "Three"]) |
One, Two, Three |
split |
根据分隔符拆分字符串 |
split(", ", "One, Two, Three") |
["One", "Two", "Three"] |
substr |
通过偏移量和长度从给定的字符串中提取一个子串 |
substr("hello world!", 1, 4) |
ello |
replace |
把字符串中的str1替换成str2 |
replace("hello, huaweicloud!", "h", "H") |
Hello, Huaweicloud! |
数值计算函数
函数名称 |
函数描述 |
样例 |
运行结果 |
---|---|---|---|
abs |
计算绝对值 |
abs(-12.4) |
12.4 |
max |
计算最大值 |
max(12, 54, 6) max([12, 54, 6]...) |
54 54 |
min |
计算最小值 |
min(12, 54, 6) min([12, 54, 6]...) |
6 6 |
log |
计算对数 |
log(16, 2) |
4 |
power |
计算x的y次幂 |
power(3, 2) |
9 |
集合函数
函数名称 |
函数描述 |
样例 |
运行结果 |
---|---|---|---|
element |
通过下标从列表中检索对应元素值 |
element(["One", "Two", "Three"], 1) |
Two |
index |
返回给定值在列表中的索引,如果该值不存在将报错。 |
index(["a", "b", "c"], "b") |
1 |
lookup |
使用给定的键从映射表中检索对应的值。如果给定的键不存在,则返回默认值。 |
lookup({IT="A", CT="B"}, "IT", "G") lookup({IT="A", CT="B"}, "IE", "G") |
A G |
flatten |
展开列表中的嵌套元素 |
flatten([["a", "b"], [], ["c"]]) |
["a", "b", "c"] |
keys |
返回map中的所有key |
keys({a=1, b=2, c=3}) |
["a", "b", "c"] |
length |
获取列表、映射或是字符串的长度 |
length(["One", "Two", "Three"]) length({IT="A", CT="B"}) length("Hello, Huaweicloud!") |
3 2 19 |
类型转化函数
函数名称 |
函数描述 |
样例 |
运行结果 |
---|---|---|---|
toset |
将列表类型转换为集合类型 |
toset(["One", "Two", "One"]) |
["One", "Two"] |
tolist |
将集合类型转换为列表类型 |
toset(["One", "Two", "Three"]) |
["One", "Two", "Three"] |
tonumber |
将字符串类型转换为数字类型 |
tonumber("33") |
33 |
tostring |
将数字类型转换为字符串类型 |
tostring(33) |
"33" |
编码函数
函数名称 |
函数描述 |
样例 |
运行结果 |
---|---|---|---|
base64encode |
将UTF-8字符串转换为base64编码 |
base64encode("Hello, Huaweicloud!") |
SGVsbG8sIEh1YXdlaWNsb3VkIQ== |
base64decode |
将base64编码解码为UTF-8字符串(结果非UTF-8格式会报错) |
base64decode("SGVsbG8sIEh1YXdlaWNsb3VkIQ==") |
Hello, Huaweicloud! |
base64gzip |
将UTF-8字符串压缩并转换为base64编码 |
base64gzip("Hello, Huaweicloud!") |
H4sIAAAAAAAA//JIzcnJ11HwKE0sT81MzskvTVEEAAAA//8BAAD//7SZqpwTAAAA |
哈希和加密函数
函数名称 |
函数描述 |
样例 |
运行结果 |
---|---|---|---|
sha256 |
计算字符串的SHA256值(16进制) |
sha256("Hello, Huaweicloud!") |
bbb76b2eb48a6610c1c87c8828c9b22ee1a5f5ca4c5c91584be154def9404910 |
sha512 |
计算字符串的SHA512值(16进制) |
sha512("Hello, Huaweicloud!") |
61f1ce05848b7dd7b23ee6ed5f32d9ce7476066d1c4c7a2f6a8f9d51f8edabb569ab22af0c796d01b6291715eb844edaafb1da4d6b80ed3438442016d42dac7b |
base64sha256 |
计算字符串的SHA256值,并转换为base64编码 |
base64sha256("Hello, Huaweicloud!") |
u7drLrSKZhDByHyIKMmyLuGl9cpMXJFYS+FU3vlASRA= |
base64sha512 |
计算字符串的SHA512值,并转换为base64编码 |
base64sha512("Hello, Huaweicloud!") |
YfH0BYSLfdeyPubtXzLZznR2Bm0cTHovao+dUfjtq7VpqyKvDHltAbYpFxXrhE7ar7HaTWuA7TQ4RCAW1C2sew== |
md5 |
计算MD5值 |
md5("hello world") |
5eb63bbbe01eeed093cb22bb8f5acdc3 |
base64sha512("Hello, Huaweicloud!")不等于base64encode(sha512("Hello, Huaweicloud!")),因为sha512计算的十六进制值结果在Terraform中是Unicode编码格式,并没指定UTF-8实现。
文件操作函数
函数名称 |
函数描述 |
样例 |
运行结果 |
---|---|---|---|
abspath |
计算文件的绝对路径 |
abspath("./hello.txt") |
/home/demo/test/terraform/hello.txt |
dirname |
计算字符串中包含的路径 |
dirname("foo/bar/baz.txt") |
foo/bar |
basename |
计算字符串中的文件名 |
basename("foo/bar/baz.txt") |
baz.txt |
file |
读取文件并返回文件内容 |
file("./hello.txt") |
Hello, Huaweicloud! |
filebase64 |
读取文件并返回文件内容的base64编码 |
filebase64("./hello.txt") |
SGVsbG8sIEh1YXdlaWNsb3VkIQ== |