常见函数
HCL支持丰富的内置函数,用于处理字符串、数值计算、加密,类型转换等操作,您可以通过函数名称进行调用,其语法如下:
<函数名称>(<参数1>, <参数2> ...)
本文主要对HCL中常见的函数进行总结并通过样例说明其用法。您可以通过Terraform 官方文档查看完整的函数支持列表。
字符串函数
| 
        函数名称  | 
      
        函数描述  | 
      
        样例  | 
      
        运行结果  | 
     
|---|---|---|---|
| 
        format  | 
      
        字符串格式化  | 
      
        format("Hello, %s!", "cloud")  | 
      
        Hello, cloud!  | 
     
| 
        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, cloud!", "h", "H")  | 
      
        Hello, cloud!  | 
     
数值计算函数
| 
        函数名称  | 
      
        函数描述  | 
      
        样例  | 
      
        运行结果  | 
     
|---|---|---|---|
| 
        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, cloud!")  | 
      
        3 2 13  | 
     
类型转化函数
| 
        函数名称  | 
      
        函数描述  | 
      
        样例  | 
      
        运行结果  | 
     
|---|---|---|---|
| 
        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, cloud!")  | 
      
        SGVsbG8sIGNsb3VkIQ==  | 
     
| 
        base64decode  | 
      
        将base64编码解码为UTF-8字符串(结果非UTF-8格式会报错)  | 
      
        base64decode("SGVsbG8sIGNsb3VkIQ==")  | 
      
        Hello, cloud!  | 
     
| 
        base64gzip  | 
      
        将UTF-8字符串压缩并转换为base64编码  | 
      
        base64gzip("Hello, cloud!")  | 
      
        H4sIAAAAAAAA//JIzcnJ11FIzskvTVEEAAAA//8BAAD//wbrhYUNAAAA  | 
     
哈希和加密函数
| 
        函数名称  | 
      
        函数描述  | 
      
        样例  | 
      
        运行结果  | 
     
|---|---|---|---|
| 
        sha256  | 
      
        计算字符串的SHA256值(16进制)  | 
      
        sha256("Hello, cloud!")  | 
      
        0ad167d1e3ac8e9f4e4f7ba83e92d0e3838177e959858631c770caaed8cc5e3a  | 
     
| 
        sha512  | 
      
        计算字符串的SHA512值(16进制)  | 
      
        sha512("Hello, cloud!")  | 
      
        6eb6ed9fc4edffaf90e742e7697f6cc7d8548e98aa4d5aa74982e5cdf78359e84a3ae9f226313b2dec765bf1ea4c83922dbfe4a61636d585da44ffbd7e900f56  | 
     
| 
        base64sha256  | 
      
        计算字符串的SHA256值,并转换为base64编码  | 
      
        base64sha256("Hello, cloud!")  | 
      
        CtFn0eOsjp9OT3uoPpLQ44OBd+lZhYYxx3DKrtjMXjo=  | 
     
| 
        base64sha512  | 
      
        计算字符串的SHA512值,并转换为base64编码  | 
      
        base64sha512("Hello, cloud!")  | 
      
        brbtn8Tt/6+Q50LnaX9sx9hUjpiqTVqnSYLlzfeDWehKOunyJjE7Lex2W/HqTIOSLb/kphY21YXaRP+9fpAPVg==  | 
     
| 
        md5  | 
      
        计算MD5值  | 
      
        md5("hello world")  | 
      
        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==  |