三 网站建设,网站建设要会英语吗,免费字体设计软件,wordpress快速扒站《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新#xff0c;书中的示例代码也是放在GitHub上#xff0c;方便大家参考查看。 Terraform的函数
Terraform为了让大家在表达式上可以更加灵活方便地进行计算#xff0c;提供了大量的内置函数… 《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新书中的示例代码也是放在GitHub上方便大家参考查看。 Terraform的函数
Terraform为了让大家在表达式上可以更加灵活方便地进行计算提供了大量的内置函数Function。目前并不支持自定义函数只能使用Terraform自带的。使用函数的格式也很简单直接写函数名参数即可。如下面的函数为取最大值 max(34, 45, 232, 25)
232
这里把函数单独列成一章不是因为它很难理解而因为它很常用值得把这些函数梳理一下以便查询使用吧。
数值计算函数
绝对值abs abs(5)
5abs(-3.1415926)
3.1415926abs(0)
0
返回大于等于该数值的最小整数 ceil(3)
3ceil(3.1)
4ceil(2.9)
3
小于等于该数值的最大整数 floor(6)
6floor(6.9)
6floor(5.34)
5
对数函数 log(16, 2)
4log(9, 3)
2.0000000000000004
指数函数 pow(6, 2)
36pow(6, 1)
6pow(6, 0)
1
最大值、最小值 max(2, 98, 75, 4)
98min(2, 98, 75, 4)
2
字符串转换成整数第二个参数为进制 parseint(16, 10)
16parseint(16, 16)
22parseint(FF, 16)
255parseint(1010, 2)
10
信号量函数 signum(6)
1signum(-6)
-1signum(0)
0
字符串函数
删去换行在从文件中读取文本时非常有用 chomp(www.pkslow.com)
www.pkslow.comchomp(www.pkslow.com\n)
www.pkslow.comchomp(www.pkslow.com\n\n)
www.pkslow.comchomp(www.pkslow.com\n\n\r)
www.pkslow.comchomp(www.pkslow.com\n\n\ra)
EOT
www.pkslow.coma
EOT
格式化输出 format(Hi, %s!, Larry)
Hi, Larry! format(My name is %s, Im %d, Larry, 18)
My name is Larry, Im 18 format(The reuslt is %.2f, 3)
The reuslt is 3.00 format(The reuslt is %.2f, 3.1415)
The reuslt is 3.14 format(The reuslt is %8.2f, 3.1415)
The reuslt is 3.14
遍历格式化列表 formatlist(My name is %s, Im %d %s., [Larry, Jeremy, Tailor], [18, 28, 33], in 2022)
tolist([My name is Larry, Im 18 in 2022.,My name is Jeremy, Im 28 in 2022.,My name is Tailor, Im 33 in 2022.,
])
参数可以是List还可以是单个变量。
字符串连接 join(., [www, pkslow, com])
www.pkslow.comjoin(, , [Larry, Pkslow, JJ])
Larry, Pkslow, JJ
大小写字母转换 lower(Larry Nanhua DENG)
larry nanhua dengupper(Larry Nanhua DENG)
LARRY NANHUA DENG
首字母大写 title(larry)
Larry
替换 replace(www.larrydpk.com, larrydpk, pkslow)
www.pkslow.comreplace(hello larry, /la.*y/, pkslow)
hello pkslow
分割 split(., www.pklow.com)
tolist([www,pklow,com,
])
反转 strrev(pkslow)
wolskp
截取 substr(Larry Deng, 0, 5)
Larrysubstr(Larry Deng, -4, -1)
Deng
去除头尾某些特定字符注意这里只要有对应字符就会删除 trim(?!what?!!!!!, ?!)
whattrim(abaaaaabbLarry Dengaab, ab)
Larry Deng
去除头尾特定字符串注意与上面的区别 trimsuffix(?!what?!!!!!, !!!)
?!what?!!trimprefix(?!what?!!!!!, ?!)
what?!!!!!
去除头尾的空格、换行等空串 trimspace( Larry Deng \n\r)
Larry Deng
正则匹配下面的例子是匹配第一个和匹配所有 regex([a-z\\.], 2021www.pkslow.com2022larry deng 31415926)
www.pkslow.comregexall([a-z\\.], 2021www.pkslow.com2022larry deng 31415926)
tolist([www.pkslow.com,larry,deng,
])
更多正则匹配语法可参考https://www.terraform.io/language/functions/regex
集合类函数
alltrue判断列表是否全为真空列表直接返回true。只能是bool类型或者对应的字符串。 alltrue([true, true])
truealltrue([true, true, false])
falsealltrue([])
truealltrue([1])
╷
│ Error: Invalid function argument
│
│ on console-input line 1:
│ (source code not available)
│
│ Invalid value for list parameter: element 0: bool required.
anytrue判断列表是否有真只要有一个为真就返回true。空列表为false。 anytrue([true])
trueanytrue([true, false])
trueanytrue([false, false])
falseanytrue([])
false
chunklist分片根据分片数来对列表进行切分。 chunklist([www, pkslow, com, Larry, Deng], 3)
tolist([tolist([www,pkslow,com,]),tolist([Larry,Deng,]),
])
coalesce返回第一个非空元素 coalesce(, a, b)
acoalesce(, , b)
b
coalescelist返回第一个非空列表 coalescelist([], [pkslow])
[pkslow,
]
从字符串列表里把空的去掉 compact([, www, , pkslow, com])
tolist([www,pkslow,com,
])
concat连接多个列表 concat([1, 2, 3], [4, 5, 6])
[1,2,3,4,5,6,
]
contains判断是否存在某个元素 contains([www, pkslow, com], pkslow)
truecontains([www, pkslow, com], Larry)
false
distinct去除重复元素 distinct([1, 2, 2, 1, 3, 8, 1, 10])
tolist([1,2,3,8,10,
])
element获取列表的某个元素 element([a, b, c], 1)
belement([a, b, c], 2)
celement([a, b, c], 3)
aelement([a, b, c], 4)
b
flatten把内嵌的列表都展开成一个列表 flatten([1, 2, 3, [1], [[6]]])
[1,2,3,1,6,
]
index获取列表中的元素的索引值 index([www, pkslow, com], pkslow)
1
keys获取map的所有key值 keys({nameLarry, age18, webSitewww.pkslow.com})
[age,name,webSite,
]
values获取map的value值 values({nameLarry, age18, webSitewww.pkslow.com})
[18,Larry,www.pkslow.com,
]
length获取字符串、列表、Map等的长度 length([])
0length([pkslow])
1length([pkslow, com])
2length({pkslow com})
1length(pkslow)
6
lookup(map, key, default)根据key值在map中找到对应的value值如果没有则返回默认值 lookup({name Larry, age 18}, age, 1)
18lookup({name Larry, age 18}, myAge, 1)
1
matchkeys(valueslist, keyslist, searchset)对key值进行匹配。匹配到key值后返回对应的Value值。 matchkeys([a, b, c, d], [1, 2, 3, 4], [2, 4])
tolist([b,d,
])
merge合并Mapkey相同的会被最后的覆盖 merge({name Larry, webSite pkslow.com}, {age 18})
{age 18name LarrywebSite pkslow.com
}merge({name Larry, webSite pkslow.com}, {age 18}, {age 13})
{age 13name LarrywebSite pkslow.com
}
one取集合的一个元素如果为空则返回null如果只有一个元素则返回该元素如果多个元素则报错 one([])
nullone([pkslow])
pkslowone([pkslow, com])
╷
│ Error: Invalid function argument
│
│ on console-input line 1:
│ (source code not available)
│
│ Invalid value for list parameter: must be a list, set, or tuple value with either zero or one elements.
╵
range生成顺序列表
range(max)
range(start, limit)
range(start, limit, step) range(3)
tolist([0,1,2,
])range(1, 6)
tolist([1,2,3,4,5,
])range(1, 6, 2)
tolist([1,3,5,
])
reverse反转列表 reverse([1, 2, 3, 4])
[4,3,2,1,
]
setintersection对set求交集 setintersection([1, 2, 3], [2, 3, 4], [2, 3, 6])
toset([2,3,
])
setproduct列出所有组合可能 setproduct([Larry, Harry], [Deng, Potter])
tolist([[Larry,Deng,],[Larry,Potter,],[Harry,Deng,],[Harry,Potter,],
])
setsubtractset的减法 setsubtract([1, 2, 3], [3, 4])
toset([1,2,
])# 求不同setunion(setsubtract([a, b, c], [a, c, d]), setsubtract([a, c, d], [a, b, c]))
[b,d,
]
setunionset的加法 setunion([1, 2, 3], [3, 4])
toset([1,2,3,4,
])
slice(list, startindex, endindex)截取列表部分包括startindex但不包括endindex slice([a, b, c, d, e], 1, 4)
[b,c,d,
]
sort对列表中的字符串进行排序要注意如果输入的是数字会先转化为字符串再排序 sort([larry, pkslow, com, deng])
tolist([com,deng,larry,pkslow,
])sort([3, 6, 1, 9, 12, 79, 22])
tolist([1,12,22,3,6,79,9,
])
sum求和 sum([3, 1.2, 9, 17.3, 2.2])
32.7
transpose对Map的key和value进行换位 transpose({a [1, 2], b [2, 3]})
tomap({1 tolist([a,])2 tolist([a,b,])3 tolist([b,])
})
zipmap根据key和value的列表按一对一关系生成Map zipmap([age, name], [18, Larry Deng])
{age 18name Larry Deng
}
加密解密
Base64 base64encode(pkslow)
cGtzbG93base64decode(cGtzbG93)
pkslowtextencodebase64(pkslow, UTF-8)
cGtzbG93textdecodebase64(cGtzbG93, UTF-8)
pkslow
csv文本解析 csvdecode(seq,name,age\n1,larry,18\n2,pkslow,3\n3,Jeremy,29)
tolist([{age 18name larryseq 1},{age 3name pkslowseq 2},{age 29name Jeremyseq 3},
])
Json解析 jsonencode({nameLarry, age18})
{\age\:18,\name\:\Larry\}jsondecode({\age\:18,\name\:\Larry\})
{age 18name Larry
}
URL urlencode(Larry Deng/a/:/./)
LarryDeng%2Fa%2F%3A%2F.%2F%40
YAML yamlencode({a:b, c:d})
a: b
c: d yamlencode({foo:[1, 2, 3], bar: baz})
bar: baz
foo:
- 1
- 2
- 3 yamlencode({foo:[1, {a:b,c:d}, 3], bar: baz})
bar: baz
foo:
- 1
- a: bc: d
- 3yamldecode(hello: world)
{hello world
} yamldecode(true)
true yamldecode({a: foo [1, 2, 3], b: *foo})
{a [1,2,3,]b [1,2,3,]
}
文件处理
获取绝对路径 abspath(path.root)
/Users/larry
获取路径中的目录或者是文件名 dirname(/home/larry/soft/terraform)
/home/larry/softdirname(/home/larry/soft/terraform/)
/home/larry/soft/terraformbasename(/home/larry/soft/terraform)
terraformbasename(/home/larry/soft/terraform/)
terraform
判断文件是否存在并获取文件内容 fileexists(/Users/larry/.bash_profile)
truefile(/Users/larry/.bash_profile)filebase64(/Users/larry/.bash_profile)
根据模式匹配所有文件 fileset(/Users/larry, *.bash*)
toset([.bash_history,.bash_profile,.bash_profile.backup,
])
templatefile(path, vars)模板化文件指定文件和变量把变量值替换掉模板中的变量。
时间函数
获取当前时间并格式化显示格式请参考https://www.terraform.io/language/functions/formatdate formatdate(YYYY-MM-DD hh:mm:ss / D MMMM YYYY, timestamp())
2022-03-05 08:25:48 / 5 March 2022formatdate(EEEE, DD-MMM-YY hh:mm:ss ZZZ, 2018-01-02T23:12:01Z)
Tuesday, 02-Jan-18 23:12:01 UTC
时间加减 timeadd(timestamp(), 24h)
2022-03-06T08:28:52Ztimeadd(timestamp(), -24h10m)
2022-03-04T08:19:08Z
支持的单位有ns, us (or µs), ms, s, m, and h.
其它
加密 md5(www.pkslow.com)
97e164b60faf4d7875c2a8a5bc3f2245
UUID uuid()
049bf418-15d1-e034-28db-92945067dcf6
IP cidrsubnet(172.16.0.0/12, 4, 2)
172.18.0.0/16
更多请参考官网。