更新时间:2022-02-10 GMT+08:00

常见函数

Terraform支持丰富的内置函数,用于处理字符串、数值计算、加密,类型转换等操作,我们可以通过函数名称进行调用,其语法如下:

<函数名称>(<参数1>, <参数2> ...)

本文主要对Terraform中常见的函数进行总结并通过样例说明其用法。您可以通过Terraform 官方文档查看完整的函数支持列表。

字符串函数

表1 字符串函数

函数名称

函数描述

样例

运行结果

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!

数值计算函数

表2 数值计算函数

函数名称

函数描述

样例

运行结果

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

集合函数

表3 集合函数

函数名称

函数描述

样例

运行结果

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

类型转化函数

表4 类型转化函数

函数名称

函数描述

样例

运行结果

toset

将列表类型转换为集合类型

toset(["One", "Two", "One"])

["One", "Two"]

tolist

将集合类型转换为列表类型

toset(["One", "Two", "Three"])

["One", "Two", "Three"]

tonumber

将字符串类型转换为数字类型

tonumber("33")

33

tostring

将数字类型转换为字符串类型

tostring(33)

"33"

编码函数

表5 编码函数

函数名称

函数描述

样例

运行结果

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

哈希和加密函数

表6 哈希和加密函数

函数名称

函数描述

样例

运行结果

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实现。

文件操作函数

表7 文件操作函数

函数名称

函数描述

样例

运行结果

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==