HCL支持丰富的内置函数,用于处理字符串、数值计算、加密、类型转换等操作,您可以通过函数名称进行调用,其语法如下: <函数名称>(<参数1>, <参数2> ...)
本文主要对HCL中常见的函数进行总结并通过样例说明其用法。您可以通过Terraform 官方文档 查看完整的函数支持列表。
字符串函数
| 函数名称 | 函数描述 | 样例 | 运行结果 |
|---|---|---|---|
| format | 字符串格式化 | format("Hello, %s!", "cloud") | Hello, cloud! |
| lower | 将字符串中的字母转换为小写 |
| 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, cloud!", "h", "H") | Hello, cloud! |
数值计算函数
| 函数名称 | 函数描述 | 样例 | 运行结果 |
|---|---|---|---|
abs | 计算绝对值 |
| 12.4 |
max | 计算最大值 |
| 54<br>54 |
min | 计算最小值 |
| 6<br>6 |
log | 计算对数 |
| 4 |
| power | 计算x的y次幂 | power(3, 2) | 9 |
集合函数
| 函数名称 | 函数描述 | 样例 | 运行结果 |
|---|---|---|---|
element | 通过下标从列表中检索对应元素值 |
| Two |
index | 返回给定值在列表中的索引,如果该值不存在将报错 |
| 1 |
lookup | 使用给定的键从映射表中检索对应的值。如果给定的键不存在,则返回默认值 |
| A<br>G |
flatten | 展开列表中的嵌套元素 |
| ["a", "b", "c"] |
keys | 返回map中的所有key |
| ["a", "b", "c"] |
length | 获取列表、映射或是字符串的长度 |
| 3<br>2<br>13 |
类型转化函数
| 函数名称 | 函数描述 | 样例 | 运行结果 |
|---|---|---|---|
toset | 将列表类型转换为集合类型 |
| ["One", "Two"] |
tolist | 将集合类型转换为列表类型 |
| ["One", "Two", "Three"] |
tonumber | 将字符串类型转换为数字类型 |
| 33 |
| tostring | 将数字类型转换为字符串类型 | tostring(33) | "33" |
编码函数
| 函数名称 | 函数描述 | 样例 | 运行结果 |
|---|---|---|---|
base64encode | 将UTF-8字符串转换为base64编码 |
| SGVsbG8sIGNsb3VkIQ== |
base64decode | 将base64编码解码为UTF-8字符串(结果非UTF-8格式会报错) |
| Hello, cloud! |
base64gzip | 将UTF-8字符串压缩并转换为base64编码 |
| H4sIAAAAAAAA//JIzcnJ11FIzskvTVEEAAAA//8BAAD//wbrhYUNAAAA |
哈希和加密函数
| 函数名称 | 函数描述 | 样例 | 运行结果 |
|---|---|---|---|
sha256 | 计算字符串的SHA256值(16进制) |
| 0ad167d1e3ac8e9f4e4f7ba83e92d0e3838177e959858631c770caaed8cc5e3a |
sha512 | 计算字符串的SHA512值(16进制) |
| 6eb6ed9fc4edffaf90e742e7697f6cc7d8548e98aa4d5aa74982e5cdf78359e84a3ae9f226313b2dec765bf1ea4c83922dbfe4a61636d585da44ffbd7e900f56 |
base64sha256 | 计算字符串的SHA256值,并转换为base64编码 |
| CtFn0eOsjp9OT3uoPpLQ44OBd+lZhYYxx3DKrtjMXjo= |
base64sha512 | 计算字符串的SHA512值,并转换为base64编码 |
| brbtn8Tt/6+Q50LnaX9sx9hUjpiqTVqnSYLlzfeDWehKOunyJjE7Lex2W/HqTIOSLb/kphY21YXaRP+9fpAPVg== |
md5 | 计算MD5值 |
| 5eb63bbbe01eeed093cb22bb8f5acdc3 |
说明:base64sha512("Hello, cloud!" ) 不等于 base64encode(sha512("Hello, cloud!")),因为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, cloud! |
filebase64 | 读取文件并返回文件内容的base64编码 | filebase64("./hello.txt") | SGVsbG8sIGNsb3VkIQ== |