Terraform支持很多内建的函数可以用来处理字符串、数值计算、加密等。调用方式如下:
<FUNCTION NAME>(<ARGUMENT 1>, <ARGUMENT 2>)
本文主要对Terraform支持的函数进行总结,简要说明其用处及用法。
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
abs | 计算绝对值 | abs(-123.4) | 123.4 |
ceil | 向上取整 | ceil(5.1) | 6 |
floor | 向下取整 | floor(4.9) | 4 |
log | 计算对数 | log(16, 2) | 4 |
max | 取最大值 | max(12, 54, 3) | 54 |
min | 取最小值 | min(12, 54, 3...) | 3 |
parseint | 将字符串转换为整数 | parseint("FF", 16) | 255 |
pow | 计算x的y次幂 | pow(3, 2) | 9 |
signum | 计算数字的正负,正数返回1,负数返回-1,0返回0 | signum(-13) | -1 |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
chomp | 移除字符串末尾的换行符 | chomp("hello\r\n") | hello |
format | 格式化字符串 | format("Hello, %s!", "world") | Hello, world! |
formatlist | 格式化字符串,返回字符串列表 | format("Hello, %s", "world", "tencent") | "Hello, world", "Hello, tencent" |
indent | 在多行字符串的每一行前面添加指定数量的空格(统一缩进) | indent(2, "test\nnew") | test\n new |
join | 把数组中的所有元素放入一个字符串,元素通过指定的分隔符分隔 | join (", ", "foo", "bar", "baz") | foo, bar, baz |
lower | 将字符串中的字母转换为小写 | lower("HELLO") | hello |
uper | 将字符串中的字符转换为大写 | upper("hello") | HELLO |
regex | 正则匹配函数 | regex("a-z+", "53453453.345345aaabbbccc23454") | aaabbbccc |
regexall | 正则匹配函数,返回所有的匹配的字串列表 | regexall("a-z+", "1234abcd5678efgh9") | "abcd","efgh" |
replace | 字符替换函数,支持正则匹配 | replace("hello world", "/w.*d/", "everybody") | hello everybody |
split | 分割字符串 | split(",", "foo,bar,baz") | "foo","bar","baz" |
strrev | 翻转字符串 | strrev("hello") | olleh |
substr | 在字符串中抽取从start下标开始的指定数目的字符 | substr("hello world", 1, 4) | ello |
title | 将给定字符串的每一行首字母大写 | title("hello world") | Hello World |
trim | 移除字符串开头和结尾的指定字符 | trim("?!hello?!", "!?") | hello |
trimprefix | 移除字符串开头的指定字符 | trimprefix("helloworld", "hello") | world |
trimsuffix | 移除字符串结尾的指定字符 | trimsuffix("helloworld", "world") | hello |
trimspace | 移除字符串开头和结尾的空白字符 | trimspace(" hello\n\n") | hello |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
chunklist | 将单个list分割为多个固定大小的list | chunklist(list, chunk_size) | |
coalesce | 返回第一个非空的字符串 | coalesce("", "b") | b |
coalescelist | 返回第一个非空的list | coalescelist([], "c", "d") | "c","d" |
compact | 移除list中的空字符串 | compact("a", "", "b", "c") | "a","b","c" |
concat | 将多个list合并为一个list | concat("a", "", "b", "c") | "a", "", "b", "c" |
contains | 判断list中是否包含给定的值 | contains("a", "b", "c", "a") | true |
distinct | 移除list中的重复元素 | distinct("a", "b", "a", "c", "d", "b") | "a", "b", "c", "d" |
element | 返回list指定位置的元素 | element("a", "b", "c", 1) | b |
flatten | 将所有list中的元素合并到一个list | flatten(["a", "b", [], "c"]) | "a", "b", "c" |
index | 找到给定值在list中的位置 | index("a", "b", "c", "b") | 1 |
keys | 返回map中的所有key | keys({a=1, c=2, d=3}) | "a","c","d" |
length | 返回list, map或string的长度 | length("hello") | 5 |
list | 将所有参数组成list | list("a", "b", "c") | "a","b","c" |
lookup | 查找map中的值,如果不存在,返回default | lookup({a="ay", b="bee"}, "a", "what?") | ay |
map | 将所有参数组成map | map("a", "b", "c", "d") | {"a" = "b", "c" = "d"} |
merge | 将多个map合并为一个map,并移除重复的key | merge({"a"="b", "c"="d"}, {"e"="f", "c"="z"}) | {"a" = "b", "c" = "z", "e" = "f"} |
range | 根据start, limit, step生成一个list | range(start, limit, step) | |
reverse | 翻转list | reverse(1, 2, 3) | 3,2,1 |
setintersection | 返回多个集合中都有的元素集合 | setintersection("a", "b", "b", "c", "b", "d") | "b" |
setproduct | 返回集合的笛卡尔积 | setproduct("a", "b") | ["a","b"] |
setsubtract | 返回第一个集合中有的但第二个集合中没有的元素集合 | setsubtract("a", "b", "c", "a", "c") | "b" |
setunion | 返回多个集合的并集 | setunion("a", "b", "b", "c", "d") | "d","b","c","a" |
slice | 从list中取连续的子list | slice("a", "b", "c", "d", 1, 3) | "b","c" |
sort | 对list按升序排序 | sort("e", "d", "a", "x") | "a","d","e","x" |
transpose | 交换map的key和value | transpose({"a" = "1", "2", "b" = "2", "3"}) | {"1" = "a","2" = "a","b","3" = "b"}} |
values | 返回map的所有value | values({a=3, c=2, d=1}) | 3,2,1 |
zipmap | 将两个list组合成map | zipmap("a", "b", 1, 2) | {"a" = 1,"b" = 2} |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
base64decode | base64解码函数 | base64decode("SGVsbG8gV29ybGQ=") | Hello World |
base64encode | base64编码函数 | base64encode("Hello World") | SGVsbG8gV29ybGQ= |
base64gzip | gzip压缩字符串然后base64编码 | base64gzip("AAAAAAAAAAAAAAAAAAAAAAAA") | H4sIAGUdX14AA3N0xA64ADb7j4sZAAAA |
csvdecode | 解码csv格式的字符串数据 | csvdecode("a,b,c\n1,2,3") | {"a" = "1","b" = "2","c" = "3"} |
jsondecode | json解码函数 | jsondecode("{\"hello\": \"world\"}") | {"hello" = "world"} |
jsonencode | json编码函数 | jsonencode({"hello"="world"}) | {"hello":"world"} |
urlencode | url编码函数 | urlencode("Hello World") | Hello%20World |
yamldecode | yaml解码函数 | yamldecode("{\"hello\": \"world\"}") | {"hello" = "world"} |
yamlencode | yaml编码函数 | yamlencode({"a":"b"}) | "a": "b" |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
abspath | 返回绝对路径 | abspath(path.root) | /home/user/some/terraform/root |
dirname | 返回文件路径,移除最后的文件名 | dirname("foo/bar/baz.txt") | foo/bar |
pathexpand | 展开用户的HOME目录 | pathexpand("~/.ssh/id_rsa") | /home/steve/.ssh/id_rsa |
basename | 返回路径中的文件名 | basename("foo/bar/baz.txt") | baz.txt |
file | 读取文件并返回文件内容 | file("hello.txt") | Hello World |
fileexists | 判断给定的路径是否存在 | fileexists("hello.txt") | true |
fileset | 正则匹配目录下的文件 | fileset(path.module, "files/*.txt") | "files/hello.txt","files/world.txt" |
filebase64 | 读取文件并返回文件内容的base64编码 | filebase64("hello.txt") | SGVsbG8gV29ybGQ= |
templatefile | 读取模板文件并渲染 | templatefile(path, vars) |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
formatdate | 格式化日期时间格式,输入日期为RFC 3339格式 | formatdate("MMM DD, YYYY", "2018-01-02T23:12:01Z") | Jan 02, 2018 |
timeadd | 加一段时间到日期上,返回一个新日期 | timeadd("2019-11-22T00:00:00Z", "10m") | 2019-11-22T00:10:00Z |
timestamp | 返回当前时间 | timestamp() | 2019-05-13T07:44:12Z |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
base64sha256 | 计算字符串的SHA256哈希值,然后base64编码 | base64sha256("hello world") | uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek= |
base64sha512 | 计算字符串的SHA512哈希值,然后base64编码 | base64sha512("hello world") | MJ7MSJwS1utMxA9QyQLytNDtd+5RGnx6m808qG1M2G+Y... |
bcrypt | 计算Blowfish算法加密值 | bcrypt("hello world") | $2a$10$D5grTTzcsqyvAeIAnY/mYOIqliCoG7eAMX0/oFcuD.iErkksEbcAa |
filebase64sha256 | 计算文件的SHA256哈希值,然后base64编码 | filebase64sha256(filepath) | |
filebase64sha512 | 计算文件的SHA512哈希值,然后base64编码 | filebase64sha512(filepath) | |
filemd5 | 计算文件的md5值 | filemd5(filepath) | |
filesha1 | 计算文件的sha1值 | filesha1(filepath) | |
filesha256 | 计算文件的sha256值 | filesha256(filepath) | |
filesha512 | 计算文件的sha512值 | filesha512(filepath) | |
md5 | 计算字符串的md5值 | md5("hello world") | 5eb63bbbe01eeed093cb22bb8f5acdc3 |
rsadecrypt | 解密RSA加密的密文 | rsadecrypt(ciphertext, privatekey) | |
sha1 | 计算字符串的sha1值 | sha1("hello world") | 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed |
sha256 | 计算字符串的sha256值 | sha256("hello world") | b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 |
sha512 | 计算字符串的sha512值 | sha512("hello world") | 309ecc489c12d6eb4cc40f50c902f2b4d0e... |
uuid | 随机生成唯一ID | uuid() | b5ee72a3-54dd-c4b8-551c-4bdc0204cedb |
uuidv5 | 根据名称生成唯一ID | uuidv5("url", "https://www.terraform.io/") | 9db6f67c-dd95-5ea0-aa5b-e70e5c5f7cf5 |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
cidrhost | 根据IP地址前缀和编号计算IP地址 | cidrhost("10.12.127.0/20", 16) | 10.12.112.16 |
cidrnetmask | 计算子网掩码 | cidrnetmask("172.16.0.0/12") | 255.240.0.0 |
cidrsubnet | 计算子网地址(具体规则看官方文档) | cidrsubnet("172.16.0.0/12", 4, 2) | 172.18.0.0/16 |
函数名 | 描述 | 使用示例 | 示例结果 |
---|---|---|---|
can | 表明表达式是否能正确计算出结果 | can(local.foo.bar) | false |
tobool | 转换为布尔值 | tobool("true") | true |
tolist | 转换为list | tolist("a", "b", 3) | "a","b","3" |
tomap | 转换为map | tomap({"a" = "foo", "b" = true}) | {"a" = "foo", "b" = "true"} |
tonumber | 转换为数字 | tonumber("1") | 1 |
toset | 转换为set | toset("a", "b", 3) | "a","b","3" |
tostring | 转换为字符串 | tostring(1) | 1 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。